Kubectl

最後更新: 2025-10-02 07:12:04 +0800 +0800
原文以英文撰寫。您正在閱讀AI翻譯版本。

kubectl 是 Kubernetes 命令列用戶端。它會從 kubeconfig 讀取連線與認證資訊、選取內容與命名空間,並向 API 伺服器傳送請求。請將 kubeconfig 檔案視為敏感資料,因為其中可能包含 bearer token、用戶端憑證與私密金鑰。

選取組態與內容 #

kubectl 會先使用明確指定的 --kubeconfig 檔案,接著使用 KUBECONFIG 所指定的檔案,最後使用 $HOME/.kube/config。在變更任何內容之前,請先檢查作用中的目標:

sh
kubectl config current-context
kubectl config view --minify
kubectl config view --minify -o jsonpath='{..namespace}'; echo

對於不得依賴環境狀態的指令碼,請使用 --context 與 --namespace。相較於在機器之間複製長期有效的管理員認證,請優先使用短期有效的 exec 認證或 OIDC 驗證。

建立、套用、修補與取代 #

這些指令具有不同的擁有權與更新語意:

  • kubectl create -f object.yaml 會建立物件;若物件已存在則失敗。
  • kubectl apply -f object.yaml 會執行宣告式套用。伺服器端套用會追蹤欄位擁有權,通常更適合多方寫入者的宣告式工作流程。
  • kubectl patch 會變更現有物件的選定欄位,通常用於處理作業例外。
  • kubectl replace -f object.yaml 會取代物件規格,且要求物件必須已存在;它不是例行更新的安全捷徑。
  • kubectl delete 會移除物件,且可能觸發相依物件的連鎖刪除。

在套用之前,先預覽宣告式變更:

sh
kubectl diff -f manifests/
kubectl apply --server-side --dry-run=server -f manifests/
kubectl apply --server-side -f manifests/

在未理解欄位擁有權的情況下,請避免在相同欄位上混用用戶端套用、伺服器端套用、命令式修補,以及多個控制器。衝突通常是另一個參與者擁有該欄位的有用證據。

檢查與疑難排解 #

請從物件的期望狀態、目前狀態、事件與控制器記錄開始:

sh
kubectl get deployment web -n app -o wide
kubectl describe deployment web -n app
kubectl get events -n app --sort-by=.lastTimestamp
kubectl logs deployment/web -n app --all-containers=true
kubectl rollout status deployment/web -n app

請使用標籤選取工作負載,而不要依賴產生的名稱。kubectl exec 與 kubectl port-forward 是很有價值的診斷工具,但正式環境的修正應編碼在宣告式組態中。Krew 可以安裝第三方外掛;安裝前請檢閱外掛的原始碼與所需權限。

評論

在 GitHub 上閱讀或評論(發表評論需要登入)