使用組態檔以命令方式管理 Kubernetes 物件
Kubernetes 物件可以使用 kubectl
命令列工具以及以 YAML 或 JSON 撰寫的物件組態檔來建立、更新與刪除。本文件說明如何使用組態檔定義與管理物件。
開始之前
安裝 kubectl
。
您需要有一個 Kubernetes 叢集,且 kubectl 命令列工具必須設定為與您的叢集通訊。建議在至少有兩個節點且未作為控制平面主機的叢集上執行本教學課程。如果您還沒有叢集,可以使用 minikube 建立一個,或者您可以使用這些 Kubernetes 實驗環境
若要檢查版本,請輸入kubectl version
。取捨
kubectl
工具支援三種物件管理方式
- 命令式指令
- 命令式物件組態
- 宣告式物件組態
請參閱 Kubernetes 物件管理 以取得關於每種物件管理方式的優點與缺點的討論。
如何建立物件
您可以使用 kubectl create -f
從組態檔建立物件。請參考 kubernetes API 參考 以取得詳細資訊。
kubectl create -f <filename|url>
如何更新物件
警告
使用replace
命令更新物件會捨棄組態檔中未指定的所有規格部分。對於規格部分由叢集管理的物件,例如 LoadBalancer
類型的服務,則不應使用此命令,因為 externalIPs
欄位是獨立於組態檔管理的。獨立管理的欄位必須複製到組態檔,以防止 replace
捨棄它們。您可以使用 kubectl replace -f
根據組態檔更新即時物件。
kubectl replace -f <filename|url>
如何刪除物件
您可以使用 kubectl delete -f
刪除組態檔中描述的物件。
kubectl delete -f <filename|url>
注意
如果組態檔在 metadata
區段中指定了 generateName
欄位而不是 name
欄位,您將無法使用 kubectl delete -f <filename|url>
刪除物件。您必須使用其他標誌來刪除物件。例如
kubectl delete <type> <name>
kubectl delete <type> -l <label>
如何檢視物件
您可以使用 kubectl get -f
檢視組態檔中描述的物件資訊。
kubectl get -f <filename|url> -o yaml
-o yaml
標誌指定列印完整的物件組態。使用 kubectl get -h
查看選項列表。
限制
當每個物件的組態都完全定義並記錄在其組態檔中時,create
、replace
和 delete
命令運作良好。但是,當即時物件更新,且更新未合併到其組態檔中時,下次執行 replace
時,更新將會遺失。如果控制器(例如 HorizontalPodAutoscaler)直接對即時物件進行更新,則可能會發生這種情況。以下範例:
- 您從組態檔建立物件。
- 另一個來源透過變更某些欄位來更新物件。
- 您從組態檔取代物件。步驟 2 中其他來源所做的變更將會遺失。
如果您需要支援多個寫入器寫入同一個物件,則可以使用 kubectl apply
來管理物件。
從 URL 建立和編輯物件,但不儲存組態
假設您有物件組態檔的 URL。您可以使用 kubectl create --edit
在建立物件之前對組態進行變更。這對於指向可能由讀者修改的組態檔的教學課程和任務特別有用。
kubectl create -f <url> --edit
從命令式命令遷移到命令式物件組態
從命令式命令遷移到命令式物件組態涉及多個手動步驟。
將即時物件匯出到本機物件組態檔
kubectl get <kind>/<name> -o yaml > <kind>_<name>.yaml
從物件組態檔中手動移除 status 欄位。
對於後續的物件管理,請完全使用
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"