使用命令式指令管理 Kubernetes 物件

Kubernetes 物件可以使用內建於 kubectl 命令列工具的命令式指令快速地建立、更新與刪除。本文件說明這些指令的組織方式,以及如何使用它們來管理即時物件。

開始之前

安裝 kubectl

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

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

權衡

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

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

請參閱 Kubernetes 物件管理,以了解每種物件管理方式的優點與缺點討論。

如何建立物件

kubectl 工具支援動詞驅動指令,用於建立一些最常見的物件類型。這些指令的命名旨在讓不熟悉 Kubernetes 物件類型的使用者也能辨識。

  • run:建立新的 Pod 以執行容器。
  • expose:建立新的 Service 物件,以在 Pod 之間負載平衡流量。
  • autoscale:建立新的 Autoscaler 物件,以自動水平擴展控制器,例如 Deployment。

kubectl 工具也支援物件類型驅動的建立指令。這些指令支援更多物件類型,並且更明確地說明其意圖,但要求使用者知道他們想要建立的物件類型。

  • create <物件類型> [<子類型>] <執行個體名稱>

某些物件類型具有子類型,您可以在 create 指令中指定。例如,Service 物件具有多個子類型,包括 ClusterIP、LoadBalancer 和 NodePort。以下範例建立具有子類型 NodePort 的 Service

kubectl create service nodeport <myservicename>

在先前的範例中,create service nodeport 指令稱為 create service 指令的子指令。

您可以使用 -h 旗標來尋找子指令支援的引數與旗標

kubectl create service nodeport -h

如何更新物件

kubectl 指令支援動詞驅動指令,用於一些常見的更新操作。這些指令的命名旨在讓不熟悉 Kubernetes 物件的使用者能夠執行更新,而無需知道必須設定的特定欄位

  • scale:水平擴展控制器,透過更新控制器的副本計數來新增或移除 Pod。
  • annotate:從物件新增或移除註解。
  • label:從物件新增或移除標籤。

kubectl 指令也支援由物件的某個方面驅動的更新指令。設定此方面可能會為不同的物件類型設定不同的欄位

  • set <欄位>:設定物件的某個方面。

kubectl 工具支援以下額外的方式來直接更新即時物件,但它們需要更好地理解 Kubernetes 物件綱要。

  • edit:透過在編輯器中開啟組態,直接編輯即時物件的原始組態。
  • patch:透過使用補丁字串,直接修改即時物件的特定欄位。有關補丁字串的更多詳細資訊,請參閱 API 慣例中的補丁章節。

如何刪除物件

您可以使用 delete 指令從叢集中刪除物件

  • delete <類型>/<名稱>
kubectl delete deployment/nginx

如何檢視物件

有幾個指令可以用於列印關於物件的資訊

  • get:列印關於相符物件的基本資訊。使用 get -h 查看選項清單。
  • describe:列印關於相符物件的彙總詳細資訊。
  • logs:列印在 Pod 中執行的容器的 stdout 與 stderr。

在建立之前使用 set 指令修改物件

有些物件欄位沒有您可以在 create 指令中使用的旗標。在某些情況下,您可以結合使用 setcreate 來在物件建立之前指定欄位的值。這是透過將 create 指令的輸出管線傳輸到 set 指令,然後再傳輸回 create 指令來完成的。以下範例

kubectl create service clusterip my-svc --clusterip="None" -o yaml --dry-run=client | kubectl set selector --local -f - 'environment=qa' -o yaml | kubectl create -f -
  1. kubectl create service -o yaml --dry-run=client 指令會建立 Service 的組態,但會將其以 YAML 格式列印到 stdout,而不是將其傳送到 Kubernetes API 伺服器。
  2. kubectl set selector --local -f - -o yaml 指令會從 stdin 讀取組態,並將更新後的組態以 YAML 格式寫入 stdout。
  3. kubectl create -f - 指令會使用透過 stdin 提供的組態建立物件。

在建立之前使用 --edit 修改物件

您可以使用 kubectl create --edit 在物件建立之前對其進行任意變更。以下範例

kubectl create service clusterip my-svc --clusterip="None" -o yaml --dry-run=client > /tmp/srv.yaml
kubectl create --edit -f /tmp/srv.yaml
  1. kubectl create service 指令會建立 Service 的組態,並將其儲存到 /tmp/srv.yaml
  2. kubectl create --edit 指令會在建立物件之前,先開啟組態檔以供編輯。

接下來呢?

最後修改時間:2022 年 5 月 19 日下午 5:00 PST:在不同頁面中更新了參考文獻,使其具有正確的文件標題 (f559518520)