全部速查表

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-eu
kubectl 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-eu
kubectl 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 dev
kubectl 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 Error
kubectl 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 wide
kubectl 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 -50
kubectl 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.yaml
kubectl diff -f <file>

預覽 `apply` 會造成的變更(需設定 KUBECTL_EXTERNAL_DIFF 或 diff 工具)。

-R;--server-side;--prune

kubectl diff -f overlays/prod | head -50
kubectl 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 --force
kubectl edit <type> <name>

在編輯器(預設 vi)中開啟線上物件。

-o yaml;--save-config;--windows-line-ending

KUBE_EDITOR="code --wait" kubectl edit deploy api -n shop
kubectl 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/api
kubectl 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-xn2kq
kubectl logs --previous

顯示容器上一次實例的日誌(崩潰/rollout 之後用)。

-c 容器;--tail N

kubectl logs -p api-7c5d-xn2kq -c api --tail 200 | grep panic
kubectl 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 8
kubectl 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.yaml
kubectl 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:443

Rollout 與 Scale

kubectl rollout status deploy/<name>

持續觀察滾動更新的進度直到完成(或逾時)。

--timeout 5m;--revision N

kubectl rollout status deploy/api -n shop --timeout 2m
kubectl 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=3
kubectl rollout restart deploy/<name>

透過修補 pod template 來重啟 Deployment(亦適用於 DaemonSet/StatefulSet)。

-n ns

kubectl rollout restart deploy api -n shop && kubectl get pods -l app=api -w
kubectl scale deploy/<n> --replicas=N

手動設定副本數量;不會變更 manifest。

--current-replicas 先檢查;--dry-run=client -o yaml

kubectl scale deploy/api -n shop --current-replicas 2 --replicas 6
kubectl 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 60
kubectl cordon / uncordon <node>

將節點標記為不可調度(cordon)/恢復為可調度(uncordon)。維護後請用 uncordon 解除。

--name 隱式即可,無需參數

kubectl cordon ip-10-0-1-7 && kubectl uncordon ip-10-0-1-7
kubectl 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 | head
kubectl 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=api
kubectl 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:deployer
kubectl 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 | pbcopy
kubectl 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+