Sur*_*noi 202 kubernetes kubectl
我在文档中理解的是kubectl apply = kubectl create + kubectl replace.参考
我的理解是
如果我想在集群中创建新的k8s资源,我应该使用kubectl创建操作.现在,如果我想更新现场k8s资源中的内容,我应该使用kubectl替换操作.
如果我想做两个操作(创建一个新的k8s资源以及更新实时k8s资源)那么我应该使用kubectl应用操作
我的问题是为什么在集群中执行相同任务有三个操作?这些操作的用例是什么?他们如何在引擎盖下相互区别?
目前我正在使用kubectl create操作在集群中创建新资源.谢谢
小智 254
这是两种不同的方法.kubectl create我们称之为命令式管理.在这种方法中,您可以告诉Kubernetes API您要创建,替换或删除的内容,而不是您希望K8s群集世界的样子.
kubectl apply是声明式管理方法的一部分,scale即使您apply对对象进行了其他更改,也可以保留应用于活动对象(即通过)的更改.
您可以在Kubernetes对象管理文档中阅读有关命令式和声明式管理的更多信息.
dah*_*boy 53
一种了解初学者差异的最佳方式。
参考:https : //www.digitalocean.com/community/tutorials/imperative-vs-declarative-kubernetes-management-a-digitalocean-comic
有错误是图像中提到的例子。请参考评论以获得更好的理解。
你也可以参考下面的例子。
至关重要的 :
声明:
从 K8s 的角度来看:
当务之急:您必须自己管理不同的资源,例如 pod、服务、副本集等。
声明性: K8 将处理所有资源,您需要指定您的实际需求。
小智 31
在CI脚本中运行时,您将遇到命令性命令的问题,因为如果资源已存在,则create会引发错误.
你可以做的是通过使用和选项应用(声明模式)命令行命令的输出:--dry-run=true-o yaml
kubectl create whatever --dry-run=true -o yaml | kubectl apply -f -
Run Code Online (Sandbox Code Playgroud)
如果资源已存在,则上述命令不会引发错误(如果需要,将更新资源).
这在您无法使用声明性模式的某些情况下非常有用(例如,在创建docker-registry秘密时).
Zoe*_* Li 19
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/
Use*_*123 18
根据我的理解,只是给出一个更直接的答案:
apply-进行增量更改
create-覆盖所有更改
从Kubernetes网站链接的DigitalOcean文章中获取以下内容:
我们在这里使用Apply而不是create,以便将来我们可以将更改增量应用到Ingress Controller对象,而不是完全覆盖它们。
tim*_*geb 17
????????????????????????????????????????????????????????????
? command ? object does not exist ? object already exists ?
????????????????????????????????????????????????????????????
? create ? create new object ? ERROR ?
? ? ? ?
? apply ? create new object ? configure object ?
? ? (needs complete spec) ? (accepts partial spec) ?
? ? ? ?
? replace ? ERROR ? delete object ?
? ? ? create new object ?
????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
这可以用简单的例子来总结:-
让我们创建一个简单的 yaml 来部署其中包含 nginx 映像的 pod。
pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx
Run Code Online (Sandbox Code Playgroud)
现在我们使用 kubectl 命令创建一个 pod -
kubectl create -f pod.yaml
现在创建了一个名为 nginx 的 pod,您可以通过以下方式获取有关 pod 运行的信息 -
kubectl get pods -o wide
以及有关 pod 的详细视图
kubectl describe pod nginx
现在,如果我想在我的 pod.yaml 文件中进行一些更改,如下所示 -
pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
tier: frontend
title: frontend
spec:
containers:
- name: nginx
image: nginx
Run Code Online (Sandbox Code Playgroud)
现在尝试命令
kubectl create -f pod.yaml
应用 pod.yaml 中的更改。
它将有一个输出 -
来自服务器的错误(AlreadyExists):创建“pod.yaml”时出错:pod“nginx”已存在
但使用命令 -
kubectl apply -f pod.yaml
输出是 -
已配置 pod/nginx
正如第一条评论中一样,它非常详细地解释了,create就像命令式命令专注于分配的任务一样,您不能为它们分配进一步的任务来调整集群的世界,但apply像声明性命令一样,旨在使其能够调整集群的世界。
| 归档时间: |
|
| 查看次数: |
62117 次 |
| 最近记录: |