kubectl适用于创建。 在集群Kubernetes环境中使用哪个命令创建资源?
kubectl apply和kubectl create是在集群Kubernetes环境中创建资源的两种不同方法。
它们都从文件或从STDIN创建资源。
kubectl的应用和创建:创建资源的两种方法
现在,让我们仔细研究一下,了解kubectl在实现时如何应用和创建彼此不同的地方。
kubectl创建:命令式控制
kubectl create是我们所谓的命令式控制。 使用这种方法,您可以告诉Kubernetes API您要创建,替换或删除的内容。
简而言之,create创建一个全新的对象(以前不存在或已删除)。
kubectl适用:声明式控制
kubectl apply是声明性管理方法的一部分,在该方法中,即使您将其他更改应用于活动对象,也可能会“保留”对活动对象(即按比例缩放)可能已应用的更改。
用简单的术语来说,Apply对现有对象进行了其他更改,从而定义了我们需要的内容。
注意:kubectl创建和应用方法都接受JSON和YAML文件格式。
通过示例了解kubectl创建和应用之间的区别
我们将使用下面的YAML文件来创建Kubernetes模块。
[email protected]:~/pod-create# cat mypod.yml apiVersion: v1 kind: Pod metadata: name: create-vs-apply-demo labels: app: front-end rel: dev spec: containers: - name: httpd image: docker.io/httpd imagePullPolicy: IfNotPresent ports: - containerPort: 80
让我们强制性地创建一个Pod,即使用kubectl create命令:
[email protected]:~/pod-create# kubectl create -f mypod.yml pod/create-vs-apply-demo created
列出模块的状态以及标签:
[email protected]:~/pod-create# kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS create-vs-apply-demo 1/1 Running 0 8s app=front-end,rel=dev
现在,编辑YAML文件,并在其中添加一个额外的标签(示例:applyVScreate)。
[email protected]:~/pod-create# cat mypod.yml apiVersion: v1 kind: Pod metadata: name: create-vs-apply-demo labels: app: front-end rel: dev demo: applyVscreate spec: containers: - name: httpd image: docker.io/httpd imagePullPolicy: IfNotPresent ports: - containerPort: 80
现在,让我们再次采用命令式方法来应用更改。
[email protected]:~/pod-create# kubectl create -f mypod.yml Error from server (AlreadyExists): error when creating "mypod.yml": pods "create-vs-apply-demo" already exists
引发错误并报告资源已存在。
现在让我们使用声明式方法执行相同的操作,即 kubectl apply命令。
[email protected]:~/pod-create# kubectl apply -f mypod.yml pod/create-vs-apply-demo configured
因此,这次配置了资源。 检查您的更改。
[email protected]:~/pod-create# kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS create-vs-apply-demo 1/1 Running 0 3m19s app=front-end,demo=applyVscreate,rel=dev
您会看到一个新的快捷方式已应用于该模块。
我们认为您现在应该对这两种方法有所了解。
Kubectl是应用还是创建? 使用哪一个?
您如何使用这些概念或方法取决于用例。 这与好与坏无关。
如果要对k8s对象进行版本控制,最好使用声明性方法(kubectl apply),这有助于确定k8s对象中数据的精度。
并且,如果您只想创建用于故障排除,学习或实验的任何资源,请采用命令式方法(kubectl create)。