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