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)。

Sidebar