Pra*_*ati 6 declarative imperative kubernetes
我使用以下yaml 创建kubectl create -f pod.xml并kubectl apply -f pod.xml使用了pod,但没有发现任何区别,两个命令都创建了pod。该K8S文件,提到了命令性和声明的命令。但是,创建和应用的行为仍然相同。
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']
Run Code Online (Sandbox Code Playgroud)
有什么不同?另外,kubectl apply声明式和kubectl create命令式又如何?他们两个都使用一个或多个带有对象详细信息的yaml文件。
Pra*_*ati 12
kubectl create和kubectl apply命令之间有细微的差别。
该kubectl create命令创建一个新资源。因此,如果再次运行该命令,则将引发错误,因为资源名称在名称空间中应该是唯一的。
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
在中kubectl create,我们指定了某种操作,在这种情况下create,它势在必行。在kubectl apply命令中,我们指定系统的目标状态,而不指定特定的动作,因此是声明性的。我们让系统决定要采取的措施。如果资源不存在,它将创建它;如果资源不存在,它将把配置应用于现有资源。
从执行的角度来看,第一次创建资源之间在kubectl create和之间没有区别,kubectl apply如上所述。但是,第二次kubectl create将抛出错误。
我花了一些时间来解决它,但是现在有意义。
在普通的术语,create并apply在本质上是相同的,如果你在一个文件运行操作以创建资源。但是,apply允许您在一个目录下的多个文件上同时创建和修补。
还有一个apply从目录中删除资源的方法,但在撰写本文时它处于 alpha 阶段:
kubectl apply -f <directory/> --prune -l your=label)
Run Code Online (Sandbox Code Playgroud)
关于这个问题也有更多的见解:Kubectl apply vs kubectl create?
| 归档时间: |
|
| 查看次数: |
3297 次 |
| 最近记录: |