K8s · 維運與部署 · 第 38 課 · · 8min read

kubectl 指令大全:50 個必背指令分類整理

官方 cheat sheet 太雜,這篇按「查狀態 / 改設定 / 排錯 / 進階」四類整理 50 個最常用指令,新手到熟手都能直接抄。

#kubectl #cheatsheet #指令大全 #Kubernetes
章節目錄 · 8

為什麼還需要一份 cheatsheet?

官方的 kubectl cheat sheet 太雜——300 多個指令塞在同一頁,找不到重點。

實際上你 80% 時間只用其中 不到 50 個指令。這篇把它們分四類整理,讓你查得到、抄得快。

看完本系列前 37 篇,這份就是你工作中可以直接 Copy 的速查筆記。

---

A. 查狀態(最常用)

看清單

\\\bash
kubectl get pods # 預設 namespace
kubectl get pods -A # 所有 namespace
kubectl get pods -n prod # 指定 namespace
kubectl get pods -o wide # 含 IP / Node
kubectl get pods --show-labels # 含 label
kubectl get pods -l app=api # 用 label 篩
kubectl get pods --field-selector status.phase=Running
kubectl get all -n prod # 一眼看所有資源
\
\\

看詳情

\\\bash
kubectl describe pod my-pod # 包含 events,超好用
kubectl describe deployment my-app
kubectl describe node worker-1 # 看 Node 資源
\
\\

看 logs

\\\bash
kubectl logs my-pod # 單一 Pod
kubectl logs my-pod -c container-name # 多容器 Pod
kubectl logs -f my-pod # tail -f
kubectl logs my-pod --previous # 看上次崩潰前的 log
kubectl logs -l app=api --tail=100 # 用 label 抓多 Pod logs
kubectl logs my-pod --since=10m # 最近 10 分鐘
\
\\

看資源用量

\\\bash
kubectl top nodes
kubectl top pods
kubectl top pods -n prod --containers
\
\\

---

B. 改設定

套用 / 刪除

\\\bash
kubectl apply -f deployment.yaml # 建立或更新
kubectl apply -f ./manifests/ # 整個目錄
kubectl apply -k ./overlays/prod # kustomize
kubectl delete -f deployment.yaml
kubectl delete pod my-pod
kubectl delete namespace prod # 一行清光所有資源
\
\\

直接改

\\\bash
kubectl edit deployment my-app # 開編輯器即時改
kubectl scale deployment my-app --replicas=5
kubectl set image deployment/my-app api=my-api:2.0
kubectl rollout restart deployment my-app
\
\\

部署滾動

\\\bash
kubectl rollout status deployment/my-app
kubectl rollout history deployment/my-app
kubectl rollout undo deployment/my-app # 回上一版
kubectl rollout undo deployment/my-app --to-revision=2
kubectl rollout pause deployment/my-app
kubectl rollout resume deployment/my-app
\
\\

---

C. 排錯

進入 Pod

\\\bash
kubectl exec -it my-pod -- sh
kubectl exec -it my-pod -c sidecar -- bash
kubectl exec my-pod -- env # 跑單一指令
\
\\

本機連 Pod

\\\bash
kubectl port-forward pod/my-pod 8080:80
kubectl port-forward svc/my-svc 8080:80
kubectl port-forward deployment/my-app 8080:80
\
\\

檔案進出

\\\bash
kubectl cp my-pod:/etc/hosts ./hosts # Pod → 本機
kubectl cp ./config.yaml my-pod:/app/config.yaml # 本機 → Pod
\
\\

進階除錯

\\\bash
kubectl debug my-pod -it --image=busybox # 在 Pod 旁邊開 debug 容器
kubectl debug node/worker-1 -it --image=busybox # 進 Node debug
\
\\

---

D. 進階技巧

Dry-run / Diff

\\\bash
kubectl apply -f x.yaml --dry-run=client # 不真的執行,只看會做什麼
kubectl apply -f x.yaml --dry-run=server # 連 API server 驗證
kubectl diff -f x.yaml # 跟現狀差異
\
\\

快速產 YAML

\\\bash
# 產 Pod YAML 不真的建立
kubectl run nginx --image=nginx --dry-run=client -o yaml > pod.yaml

# 產 Deployment YAML
kubectl create deployment my-app --image=nginx --dry-run=client -o yaml > deploy.yaml

# 產 Service YAML
kubectl expose deployment my-app --port=80 --dry-run=client -o yaml
\
\\

Context / Namespace 切換

\\\bash
kubectl config get-contexts
kubectl config current-context
kubectl config use-context my-cluster
kubectl config set-context --current --namespace=prod # 切預設 namespace
\
\\

模擬身份(RBAC 除錯)

\\\bash
kubectl auth can-i create deployments # 我能建 Deployment 嗎
kubectl auth can-i delete pods --as=alice # alice 能刪 Pod 嗎
kubectl get pods --as=system:serviceaccount:default:viewer-sa
\
\\

JSON 路徑取值

\\\bash
# 取第一個 Pod 的名字
kubectl get pods -o jsonpath='{.items[0].metadata.name}'

# 取所有 Pod 的 IP
kubectl get pods -o jsonpath='{.items[*].status.podIP}'

# Service 的 ClusterIP
kubectl get svc my-svc -o jsonpath='{.spec.clusterIP}'
\
\\

Watch 模式

\\\bash
kubectl get pods -w
kubectl get hpa -w
kubectl rollout status deployment/my-app -w
\
\\

---

常用別名(建議加進 .zshrc)

\\\bash
alias k='kubectl'
alias kg='kubectl get'
alias kd='kubectl describe'
alias kl='kubectl logs -f'
alias ke='kubectl exec -it'
alias kctx='kubectl config use-context'
alias kns='kubectl config set-context --current --namespace'

# 看 Pod 在哪
alias kgp='kubectl get pods -o wide'

# 啟用 kubectl 自動補全(zsh)
source <(kubectl completion zsh)
\
\\

---

重點整理

  • 80% 時間只用這 50 個指令——背熟比什麼都重要
  • \describe\ 比 \get\ 更有用:看 events 才知道為什麼失敗
  • \logs --previous\ 是救命指令:看崩潰前的最後一刻
  • \--dry-run=client -o yaml\ 產 YAML 範本比手寫快 10 倍
  • 裝 \k9s\ / \kubectx\ / \kubens\ 這三個 CLI 工具,效率再翻倍

下一步

指令會了,但寫 YAML 的時候還是會卡住?下一篇給你 8 大資源的完整 YAML 模板:K8s YAML 範例大全

📅 下一篇K8s YAML 範例大全:8 大資源完整模板
8 個常用資源每個一份完整範本——複製貼上即用,不用從零開始想欄位。
📚 完整系列總覽K8s 系列教學首頁(共 40 課,按學習路徑順序排)