Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 与x27之间的差异;kubectl apply';和';kubectl创建';_Kubernetes_Declarative_Imperative - Fatal编程技术网

Kubernetes 与x27之间的差异;kubectl apply';和';kubectl创建';

Kubernetes 与x27之间的差异;kubectl apply';和';kubectl创建';,kubernetes,declarative,imperative,Kubernetes,Declarative,Imperative,我使用下面的yaml创建了一个pod,使用kubectl create-f pod.xml和kubectl apply-f pod.xml创建了一个pod,我看不到任何区别,两个命令都创建了一个pod。中提到了命令式命令和声明式命令。但是,创建和应用的行为方式仍然相同 apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app: myapp spec: containers: - name: myapp-c

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

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如何应用
声明性和
kubectl如何创建
命令性?它们都使用
对象详细信息。

简单地说,
create
apply
基本相同,如果您在单个文件上运行该操作以创建资源。但是,
apply
允许您同时在一个目录下的多个文件上创建和修补

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

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

关于这个问题还有更多的见解:
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
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 create
kubectl apply
之间没有区别,如上所示。但是,第二次
kubectl create
将抛出错误


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

这是两种不同的方法。我们称之为kubectl create。在这种方法中,您告诉Kubernetes API您想要创建、替换或删除什么,而不是告诉K8s集群世界的样子

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


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

重复查询的可能重复只是指向k8s文档,没有太多解释,因此此查询需要引起一些注意。OP要求更多解释,与文档中提到的不同