使用組態檔以命令方式管理 Kubernetes 物件

Kubernetes 物件可以使用 kubectl 命令列工具以及以 YAML 或 JSON 撰寫的物件組態檔來建立、更新與刪除。本文件說明如何使用組態檔定義與管理物件。

開始之前

安裝 kubectl

您需要有一個 Kubernetes 叢集,且 kubectl 命令列工具必須設定為與您的叢集通訊。建議在至少有兩個節點且未作為控制平面主機的叢集上執行本教學課程。如果您還沒有叢集,可以使用 minikube 建立一個,或者您可以使用這些 Kubernetes 實驗環境

若要檢查版本,請輸入 kubectl version

取捨

kubectl 工具支援三種物件管理方式

  • 命令式指令
  • 命令式物件組態
  • 宣告式物件組態

請參閱 Kubernetes 物件管理 以取得關於每種物件管理方式的優點與缺點的討論。

如何建立物件

您可以使用 kubectl create -f 從組態檔建立物件。請參考 kubernetes API 參考 以取得詳細資訊。

  • kubectl create -f <filename|url>

如何更新物件

您可以使用 kubectl replace -f 根據組態檔更新即時物件。

  • kubectl replace -f <filename|url>

如何刪除物件

您可以使用 kubectl delete -f 刪除組態檔中描述的物件。

  • kubectl delete -f <filename|url>

如何檢視物件

您可以使用 kubectl get -f 檢視組態檔中描述的物件資訊。

  • kubectl get -f <filename|url> -o yaml

-o yaml 標誌指定列印完整的物件組態。使用 kubectl get -h 查看選項列表。

限制

當每個物件的組態都完全定義並記錄在其組態檔中時,createreplacedelete 命令運作良好。但是,當即時物件更新,且更新未合併到其組態檔中時,下次執行 replace 時,更新將會遺失。如果控制器(例如 HorizontalPodAutoscaler)直接對即時物件進行更新,則可能會發生這種情況。以下範例:

  1. 您從組態檔建立物件。
  2. 另一個來源透過變更某些欄位來更新物件。
  3. 您從組態檔取代物件。步驟 2 中其他來源所做的變更將會遺失。

如果您需要支援多個寫入器寫入同一個物件,則可以使用 kubectl apply 來管理物件。

從 URL 建立和編輯物件,但不儲存組態

假設您有物件組態檔的 URL。您可以使用 kubectl create --edit 在建立物件之前對組態進行變更。這對於指向可能由讀者修改的組態檔的教學課程和任務特別有用。

kubectl create -f <url> --edit

從命令式命令遷移到命令式物件組態

從命令式命令遷移到命令式物件組態涉及多個手動步驟。

  1. 將即時物件匯出到本機物件組態檔

    kubectl get <kind>/<name> -o yaml > <kind>_<name>.yaml
    
  2. 從物件組態檔中手動移除 status 欄位。

  3. 對於後續的物件管理,請完全使用 replace

    kubectl replace -f <kind>_<name>.yaml
    

定義控制器選取器和 PodTemplate 標籤

建議的方法是定義一個單一、不可變的 PodTemplate 標籤,僅供控制器選取器使用,而沒有其他語意含義。

範例標籤

selector:
  matchLabels:
      controller-selector: "apps/v1/deployment/nginx"
template:
  metadata:
    labels:
      controller-selector: "apps/v1/deployment/nginx"

下一步

上次修改時間為 2022 年 5 月 19 日下午 5:00 PST:Updated references in different pages with the correct titles of the documents (f559518520)