kubectl 命令速查
kubectl(Kubernetes 命令列工具)快速參考:context、get/describe、apply、logs/exec、rollout、scaling 及除錯——附常用參數與實作範例。
40 條命令
叢集與 Context
kubectl version輸出用戶端與伺服端的版本資訊(用於排查版本落差)。
--client 只列用戶端;-o yaml/json
kubectl version -o yaml | yq '.clientVersion.minor' kubectl cluster-info顯示叢集主節點與服務資訊。
--context ctx;--output json|yaml
kubectl cluster-info --context prod-eukubectl config get-contexts列出 kubeconfig 中所有 context。
--minify;-o name|json|yaml
kubectl config get-contexts -o name | xargs -I{} echo {}kubectl config use-context <name>切換當前 context。
kubectl config use-context prod-eukubectl config current-context / set-context <name>讀取或重新命名/更新 context(設定 namespace、cluster、user)。
--current 輸出當前;set-context --namespace N --cluster C --user U
kubectl config set-context dev-team-a --namespace shop --cluster dev --user devkubectl config set <name> <value>變更當前 context 的預設 namespace,後續指令就不必再加 -n。
kubectl config set-context --current --namespace=argocd && kubectl get pods取得與檢視
kubectl get all列出 pods、services、deployments、replicasets、statefulsets 等。
-A 所有 namespace;-n ns;-l label=key=value 標籤選擇;-o wide|yaml|json|name|custom-columns;--sort-by
kubectl get all -A -o wide | grep -i Errorkubectl get pods / svc / deploy / ds / sts列出特定資源類型(最常用的資源)。
-A;-l app=api;-o wide(顯示 node、ip);--field-selector;--sort-by .metadata.creationTimestamp
kubectl get pod -n kube-system -l k8s-app=metrics-server -o widekubectl get -o yaml|json將物件完整輸出為 YAML/JSON 供檢視或匯出。
-o yaml;--export 去除叢集端欄位後儲存
kubectl get deploy api -n shop -o yaml | grep -E 'image|replicas|envFrom'kubectl describe <type> <name>顯示物件的低階細節、事件、容器狀態與生命週期——最適合用來除錯。
-n ns;-A 所有 ns;--show-events=true
kubectl describe pod api-7c5d-xn2kq -n shop | tail -50kubectl explain <resource[.field]>直接從 API 伺服器取得資源/欄位的結構描述說明。
kubectl explain pod.spec.containers.resources.limits套用與管理
kubectl apply -f <file|dir|url>宣告式地套用或更新 manifest,使叢集狀態與檔案一致。
-f 檔案|目錄|URL;-R 遞迴處理目錄;--prune;--force-conflicts 伺服端 apply;--server-side
kubectl apply -k overlays/prod && kubectl apply -f https://.../manifests.yamlkubectl diff -f <file>預覽 `apply` 會造成的變更(需設定 KUBECTL_EXTERNAL_DIFF 或 diff 工具)。
-R;--server-side;--prune
kubectl diff -f overlays/prod | head -50kubectl create|delete -f <file>命令式地依 manifest 一次性建立或刪除。
create -f;delete -f;delete pod foo;delete svc,deploy -l app=foo(複合)
kubectl delete -f bad-app.yaml --grace-period=0 --forcekubectl edit <type> <name>在編輯器(預設 vi)中開啟線上物件。
-o yaml;--save-config;--windows-line-ending
KUBE_EDITOR="code --wait" kubectl edit deploy api -n shopkubectl patch <type> <name> --patch '<json>'對線上物件套用 strategic-merge 或 JSON patch。
--type strategic|merge|json;--patch-file file.json
kubectl patch deploy api -n shop --type merge -p '{"spec":{"replicas":6}}'kubectl set image <type> <name> container=image觸發 rollout 以使用新映像;同類的還有 set image env / resources。
set image env / resources / serviceaccount / subject / selector
kubectl set image deploy/api api=ghcr.io/team/api:1.4.2 && kubectl rollout status deploy/apikubectl label / annotate <type> <name>為線上物件新增或更新標籤/註解。
key=value 新增;key- 移除(以 - 結尾);--overwrite
kubectl label pod -n shop -l app=api release=v1.4.2 --overwrite日誌與 Exec
kubectl logs <pod>輸出 pod 的日誌(搭配 -c 可指定特定容器)。
-f 持續追蹤;--tail N;--since R|D|T;--timestamps;-c 容器;--all-containers;-p 上一次實例
kubectl logs -n shop -f --tail 100 --timestamps api-7c5d-xn2kqkubectl logs --previous顯示容器上一次實例的日誌(崩潰/rollout 之後用)。
-c 容器;--tail N
kubectl logs -p api-7c5d-xn2kq -c api --tail 200 | grep panickubectl logs -l <label> --all-containers彙總所有符合標籤的 pod 日誌——適合用於 Deployment。
-l app=api;--all-containers=true;-f;--max-log-requests N
kubectl logs -n shop -l app=worker --all-containers -f --max-log-requests 8kubectl exec -it <pod> -- <cmd>在 pod 內執行命令,可互動式進入(bash/sh)。
-it;-c 容器;-n ns;-- /bin/sh
kubectl exec -n shop -it api-7c5d-xn2kq -- /bin/sh -c 'printenv | grep DATABASE'kubectl cp <pod>:<src> <dest>在 pod 內外複製檔案/資料夾(透過 exec 以 tar 傳輸)。
-c 容器;-n ns
kubectl cp shop/api-7c5d-xn2kq:app/config.yaml ./config.yamlkubectl port-forward <pod> <local>:remote>將本地埠轉發到 pod(或 svc、deploy)。
pod/<name> <l>:r;svc/<name> <l>:r;--address 127.0.0.1
kubectl port-forward svc/argocd-server -n argocd 8443:443Rollout 與 Scale
kubectl rollout status deploy/<name>持續觀察滾動更新的進度直到完成(或逾時)。
--timeout 5m;--revision N
kubectl rollout status deploy/api -n shop --timeout 2mkubectl rollout history / undo檢視 rollout 歷史/回滾到先前的版本。
history --revision N;undo --to-revision N;--dry-run=client
kubectl rollout history deploy/api -n shop && kubectl rollout undo deploy/api --to-revision=3kubectl rollout restart deploy/<name>透過修補 pod template 來重啟 Deployment(亦適用於 DaemonSet/StatefulSet)。
-n ns
kubectl rollout restart deploy api -n shop && kubectl get pods -l app=api -wkubectl scale deploy/<n> --replicas=N手動設定副本數量;不會變更 manifest。
--current-replicas 先檢查;--dry-run=client -o yaml
kubectl scale deploy/api -n shop --current-replicas 2 --replicas 6kubectl autoscale deploy/<n> --min=2 --max=10 --cpu-percent=80建立指定上下界的 HPA(亦可用 `kubectl create hpa`)。
--max --min --cpu-percent;--dry-run=client -o yaml
kubectl autoscale deploy/api -n shop --min=3 --max=15 --cpu-percent=70節點與 Pod 生命週期
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data維護前安全地將 pod 從節點上驅逐(例如升級作業)。
--grace-period N;--force;--skip-errors;--dry-run;--delete-emptydir-data
kubectl drain ip-10-0-1-7 --ignore-daemonsets --delete-emptydir-data --grace-period 60kubectl cordon / uncordon <node>將節點標記為不可調度(cordon)/恢復為可調度(uncordon)。維護後請用 uncordon 解除。
--name 隱式即可,無需參數
kubectl cordon ip-10-0-1-7 && kubectl uncordon ip-10-0-1-7kubectl delete pod <pod>刪除一個 pod——對 Deployment 而言控制器會自動新建(可用來強制重啟單一實例)。
--grace-period=0 --force;-n ns;--now
kubectl delete pod -n shop api-7c5d-xn2kq --grace-period=0 --force除錯
kubectl top node / pod顯示即時 CPU/記憶體用量(需安裝 metrics-server)。
--sort-by cpu|memory;--containers;-A;-l
kubectl top node && kubectl top pod -A --sort-by=memory | headkubectl debug <pod>附加一個帶有額外除錯工具的 debug 容器(kubectl-debug/Ephemeral Containers)。
--image <img>;--target-container;--share-processes;--profile
kubectl debug -it api-7c5d-xn2kq --image=nicolaka/netshoot --target-container=apikubectl get events --sort-by=.lastTimestamp持續監看叢集事件,找出排程/映像拉取/探針失敗的原因。
--field-selector involvedObject.name=podX;-A;-w;--watch-only-events
kubectl get events -n shop --sort-by=.lastTimestamp -w | grep -v 'Normal'kubectl auth can-i <verb> <resource>檢查當前使用者能做什麼——用於 RBAC 除錯很方便。
--as user;--as-group;-n ns;--all-namespaces
kubectl auth can-i create pods -n prod --as system:serviceaccount:team-a:deployerkubectl wait --for=condition=Ready阻塞直到資源達到指定條件(適合用在 CI/腳本中)。
--for condition=Ready|Available;--timeout 60s;--all --selector
kubectl wait -n shop --for=condition=Available deploy/api --timeout 120s資源與 Manifest
kubectl create cm|secret ... --from-file|--from-literal命令式建立 ConfigMap/Secret(Secret 用 `kubectl create secret generic ...`)。
--from-file;--from-literal=KEY=val;--dry-run=client -o yaml
kubectl -n shop create secret generic api-creds --from-literal=API_KEY=$(cat key.txt)kubectl create token <serviceaccount>為 ServiceAccount 產生短期 token(推薦取代靜態 Secret)。
--duration 24h
kubectl -n shop create token deployer --duration=12h | pbcopykubectl get secret <name> -o jsonpath='{.data.K}' | base64 -d解碼 base64 編碼的 Secret 鍵值以供臨時檢視。
kubectl -n shop get secret api-creds -o jsonpath='{.data.API_KEY}' | base64 -d速查頁版本 1.0.0
適用於 kubectl 1.28+