我从文档中了解到的是:
- kubectl create =在集群中创建新的k8s资源
- kubectl replace =更新活动集群中的资源
- kubectl apply =如果我想创建+替换(参考)
我的问题是
- 为什么在集群中要执行三个操作才能执行同一任务?
- 这些操作的用例是什么?
- 它们在引擎盖下有何不同?
我从文档中了解到的是:
我的问题是
Answers:
这是两种不同的方法:
kubectl create
这就是我们所谓的命令式管理。通过这种方法,您可以告诉Kubernetes API您要创建,替换或删除的内容,而不是您希望K8s群集世界的外观。
kubectl apply
是“声明式管理”方法的一部分,在该方法中,即使您对该对象进行了其他更改,也可能scale
“ 保留 ”了您对活动对象(即通过)应用的apply
更改。
您可以在Kubernetes对象管理文档中阅读有关命令式和声明式管理的更多信息。
kubectl create
,并kubectl apply
具有相同的作用或没有。
kubectl create
如果资源已经存在,将抛出错误。 kubectl apply
惯于。区别在于,kubectl create
专门说“创建此东西”,而kubectl apply
说“做任何必要的事情(创建,更新等)使其看起来像这样”。
在CI脚本中运行时,命令性命令会遇到麻烦,因为如果资源已经存在,create会引发错误。
您可以做的是通过使用和选项,应用(声明式)命令式命令的输出:--dry-run=true
-o yaml
kubectl create whatever --dry-run=true -o yaml | kubectl apply -f -
如果资源已经存在,则上面的命令不会引发错误(并且将在需要时更新资源)。
在某些无法使用声明性模式的情况下(例如,在创建docker-registry机密时),这非常有用。
kubectl delete deployment nginx --ignore-not-found; kubectl create deployment nginx --image=nginx
根据我的理解,只是给出一个更直接的答案:
apply
-对现有对象进行增量更改
create
-创建一个全新的对象(以前不存在/已删除),
这是从Kubernetes网站链接的DigitalOcean文章中获取的:
我们在此处使用Apply而不是create,以便将来我们可以将更改增量应用到Ingress Controller对象,而不是完全覆盖它们。
apply
like docker-compose up -d
+使用create
like docker-compose up -d --build
?
kubectl run
= kubectl create deployment
kubectl create -f your-object-config.yaml
kubectl delete -f your-object-config.yaml
kubectl replace -f your-object-config.yaml
kubectl diff -f configs/
kubectl apply -f configs/
kubectl create一次可以使用一个对象配置文件。这也称为命令式管理
kubectl创建-f文件名| URL
kubectl apply适用于包含对象配置yaml文件的目录及其子目录。这也称为声明式管理。可以从目录中拾取多个对象配置文件。 kubectl apply -f目录/
详细信息:
https
: //kubernetes.io/docs/tasks/manage-kubernetes-objects/declarative-config/ https://kubernetes.io/docs/tasks/manage-kubernetes-objects/imperative-config/
我们之所以喜欢Kubernetes,是因为一旦我们给了他们他们想要的东西,它就会继续寻找如何在没有我们任何参与的情况下实现它。
“创造”就像通过把事情掌握在自己手中来玩神。当您只想使用POD而不关心abt部署/复制控制器时,这对于本地调试很有用。
“申请”正在按规则进行。“应用”就像是一个主工具,可以帮助您创建和修改,不需要任何东西来管理容器。