当前位置: 首页 > 知识库问答 >
问题:

“kubectl应用”和“kubectl创建”之间的区别

寇坚成
2023-03-14

我用kubectl create-f pod创建了一个pod。xml和kubectl apply-f pod。xml使用下面的yaml,我看不出有任何区别,使用这两个命令创建一个pod。K8S文档提到了命令式和声明式命令。但是,create和apply的行为方式仍然相同。

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox
    command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']

有什么区别?另外,kubectl applydeclarative和kubectl create命令是如何实现的?它们都会获取一个或多个包含对象详细信息的yaml文件。

共有3个答案

权烨磊
2023-03-14

这是两种不同的方法。我们称之为命令管理。在这种方法中,你告诉库伯内特斯应用编程接口你想要创建、替换或删除什么,而不是你想要你的K8s集群世界是什么样子。

kubectl apply是声明式管理方法的一部分,在声明式管理方法中,即使您将其他更改应用于某个活动对象,也会保留您可能已应用于该对象(即通过缩放)的更改。

您可以在Kubernetes对象管理文档中阅读有关命令式和声明式管理的更多信息。

裴存
2023-03-14

简单地说,如果您在单个文件上运行操作来创建资源,那么createApplication本质上是相同的。但是,Application允许您在一个目录下的多个文件上同时创建和修补。

还有一个apply可以从目录中删除资源,但在本文撰写时,它是alpha格式的:

kubectl apply -f <directory/> --prune -l your=label)

在这个问题上也有更多的见解:Kubectl应用还是kubectl创建?

元玮
2023-03-14

kubectl createkubectl apply命令之间有细微的区别。

命令创建一个新的资源。因此,如果再次运行该命令,它将抛出一个错误,因为资源名称在命名空间中应该是唯一的。

kubectl get pods
No resources found.

kubectl create -f pod.xml 
pod/myapp-pod created

kubectl create -f pod.xml 
Error from server (AlreadyExists): error when creating "pod.xml": pods "myapp-pod" already exists

2) kubectl apply命令将配置应用于资源。如果资源不在那里,那么它将被创建。kubectl apply命令可以第二次运行,因为它只应用如下所示的配置。在这种情况下,配置没有改变。所以,豆荚没有改变。

kubectl delete pod/myapp-pod
pod "myapp-pod" deleted

kubectl apply -f pod.xml 
pod/myapp-pod created

kubectl apply -f pod.xml 
pod/myapp-pod unchanged

kubectl create中,我们指定了一个特定的操作,在本例中是create,因此它是必需的。在kubectl apply命令中,我们指定系统的目标状态,而不指定特定的操作,因此是声明性的。我们让系统决定采取什么行动。如果资源不在那里,它将创建它,如果资源在那里,它将把配置应用于现有资源。

从执行角度来看,第一次创建资源时,kubectl createkubectl apply之间没有区别,如上所示。但是,第二次kubectl create将抛出一个错误。

我花了一些时间来解决这个问题,但现在有了意义。

 类似资料:
  • 我最近在学习Kubernetes,我不太清楚“kubectl apply”和“kubectl replace”之间的区别。是否存在我们只能使用其中一个的情况?

  • null 我的问题是 为什么在一个集群中有三个操作来执行相同的任务? 这些操作的用例是什么? 他们在引擎盖下有什么不同?

  • 我刚刚开始使用kubernetes,并使用kops在AWS上建立集群。在我阅读(并尝试)的许多例子中,会有这样的命令: 这似乎在幕后做了几件事,我可以查看使用创建的清单文件,等等。然而,我看到许多例子,人们手工创建清单文件,并使用像或这样的命令 我假设两种方法都实现了相同的目标,但通过自己创建清单文件,您可以更好地控制,这对吗? 然后我必须自己创建服务、复制控制器和Pod规范吗? 最后,如果您自己

  • kubectl 是 Kubernetes 自带的客户端,可以用它来直接操作 Kubernetes。 使用格式有两种: kubectl [flags]kubectl [command] get 显示一个或多个资源 describe 显示资源详情 create 从文件或标准输入创建资源 update 从文件或标准输入更新资源 delete 通过文件名、标准输入、资源名或者 label selector

  • kubectl-slice 是一个 CLI 工具,可以通过规则将包含多个对象资源的 Kubernetes 配置清单切割成多个 YAML 文件。 例如下面的配置清单: apiVersion: v1kind: Podmetadata: name: nginx-ingress---apiVersion: v1kind: Namespacemetadata: name: production 通过 k

  • Kubectl-fzf kubectl-fzf provides a fast and powerful fzf autocompletion for kubectl. Table of Contents Kubectl-fzf Table of Contents Features Requirements Installation Cache builder Local installation