使用命令式指令管理 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
<欄位>
:設定物件的某個方面。
注意
在 Kubernetes 1.5 版本中,並非每個動詞驅動指令都有相關聯的方面驅動指令。kubectl
工具支援以下額外的方式來直接更新即時物件,但它們需要更好地理解 Kubernetes 物件綱要。
edit
:透過在編輯器中開啟組態,直接編輯即時物件的原始組態。patch
:透過使用補丁字串,直接修改即時物件的特定欄位。有關補丁字串的更多詳細資訊,請參閱 API 慣例中的補丁章節。
如何刪除物件
您可以使用 delete
指令從叢集中刪除物件
delete <類型>/<名稱>
注意
您可以將kubectl delete
用於命令式指令與命令式物件組態。差異在於傳遞給指令的引數。若要將 kubectl delete
用作命令式指令,請將要刪除的物件作為引數傳遞。以下範例傳遞名為 nginx 的 Deployment 物件kubectl delete deployment/nginx
如何檢視物件
有幾個指令可以用於列印關於物件的資訊
get
:列印關於相符物件的基本資訊。使用get -h
查看選項清單。describe
:列印關於相符物件的彙總詳細資訊。logs
:列印在 Pod 中執行的容器的 stdout 與 stderr。
在建立之前使用 set
指令修改物件
有些物件欄位沒有您可以在 create
指令中使用的旗標。在某些情況下,您可以結合使用 set
與 create
來在物件建立之前指定欄位的值。這是透過將 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 -
kubectl create service -o yaml --dry-run=client
指令會建立 Service 的組態,但會將其以 YAML 格式列印到 stdout,而不是將其傳送到 Kubernetes API 伺服器。kubectl set selector --local -f - -o yaml
指令會從 stdin 讀取組態,並將更新後的組態以 YAML 格式寫入 stdout。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
kubectl create service
指令會建立 Service 的組態,並將其儲存到/tmp/srv.yaml
。kubectl create --edit
指令會在建立物件之前,先開啟組態檔以供編輯。