← 返回上一頁
Kubernetes

Kubectl 指令速查表:維運工程師的日常必備工具箱

本頁目錄

前言

如果說 Kubernetes 是雲原生時代的作業系統,那 kubectl 就是它的命令列介面。身為 K8s 維運工程師,每天都會與 kubectl 打交道。本文從維運實戰的角度出發,整理一份按照日常工作場景分類的 kubectl 指令速查表,方便你在不同情境下快速找到需要的指令。

環境準備:自動補全

在開始之前,強烈建議先啟用 kubectl 的自動補全功能,能大幅提升工作效率:

# Bash 環境(需先安裝 bash-completion)
source <(kubectl completion bash)

# Zsh 環境
source <(kubectl completion zsh)

場景一:叢集與上下文管理

# 查看目前的 kubeconfig 設定
kubectl config view

# 查看目前使用的上下文
kubectl config current-context

# 切換叢集上下文
kubectl config use-context my-cluster-name

# 設定預設的 namespace
kubectl config set-context --current --namespace=my-namespace

場景二:日常資源查看

# 列出所有 namespace 下的 Pod
kubectl get pods --all-namespaces

# 列出 Pod 並帶上更多資訊(IP、Node 等)
kubectl get pods -o wide

# 查看資源的詳細資訊
kubectl describe pods my-pod
kubectl describe nodes my-node

# 取得 Pod 的 YAML 定義
kubectl get pod my-pod -o yaml

# 按重啟次數排序 Pod
kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'

# 依標籤篩選 Pod
kubectl get pods --selector=app=cassandra

# 列出所有 Service,依名稱排序
kubectl get services --sort-by=.metadata.name

場景三:應用部署與更新

# 透過 YAML 檔案建立資源
kubectl apply -f ./my-manifest.yaml

# 使用整個目錄的設定檔
kubectl apply -f ./dir

# 更新 Deployment 的容器映像
kubectl set image deployment/nginx nginx=nginx:1.9.1

# 查看滾動更新狀態
kubectl rollout status deployment/frontend

# 查看部署歷史
kubectl rollout history deployment/nginx

# 回滾到上一個版本
kubectl rollout undo deployment nginx

# 回滾到特定版本
kubectl rollout undo deployment/nginx --to-revision=3

# 輪替重啟(不變更映像但重啟所有 Pod)
kubectl rollout restart deployment/frontend

場景四:除錯與故障排除

# 查看 Pod 日誌
kubectl logs my-pod

# 即時追蹤日誌(類似 tail -f)
kubectl logs -f my-pod

# 多容器 Pod 指定容器查看日誌
kubectl logs my-pod -c my-container

# 查看上一個實例的日誌(Pod 重啟後)
kubectl logs my-pod --previous

# 進入 Pod 的互動式終端
kubectl exec -it my-pod -- /bin/sh

# 在 Pod 中執行指令
kubectl exec my-pod -- ls /

# 本機連接埠轉發
kubectl port-forward my-pod 5000:6000

# 檔案複製
kubectl cp /tmp/foo my-pod:/tmp/bar
kubectl cp my-pod:/tmp/bar /tmp/foo

場景五:擴縮容與資源管理

# 手動擴縮容
kubectl scale deployment/nginx --replicas=3

# 停止所有 Pod(縮容到 0)
kubectl scale deployment/nginx --replicas=0

# 設定自動擴縮容
kubectl autoscale deployment foo --min=2 --max=10

# 設定資源限制
kubectl set resources deployment nginx -c=nginx \
  --limits=cpu=200m,memory=512Mi \
  --requests=cpu=100m,memory=256Mi

# 查看 Pod 的資源使用情況
kubectl top pod -n my-namespace

# 查看 Node 的資源使用情況
kubectl top node

場景六:節點維護

# 標記節點不可排程
kubectl cordon my-node

# 排空節點上的 Pod
kubectl drain my-node --ignore-daemonsets --delete-emptydir-data

# 恢復節點排程
kubectl uncordon my-node

# 設定汙點
kubectl taint nodes foo dedicated=special-user:NoSchedule

# 查看所有節點上的汙點
kubectl get nodes -o=custom-columns=\
NodeName:.metadata.name,\
TaintKey:.spec.taints[*].key,\
TaintValue:.spec.taints[*].value,\
TaintEffect:.spec.taints[*].effect

場景七:修補與進階操作

# 策略合併修補
kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}'

# JSON Patch 格式更新
kubectl patch pod valid-pod --type='json' \
  -p='[{"op":"replace","path":"/spec/containers/0/image","value":"new-image"}]'

# 比較即時狀態與清單檔案的差異
kubectl diff -f ./my-manifest.yaml

# 編輯線上資源
kubectl edit svc/my-service

常用輸出格式

參數 說明
-o yaml YAML 格式
-o json JSON 格式
-o wide 顯示額外欄位
-o name 僅顯示資源名稱
-o jsonpath='{...}' 自訂 JSONPath 查詢

小結

kubectl 指令非常多,但日常工作中真正高頻使用的其實就那幾十個。建議把自己最常用的指令設定成 shell alias,例如 alias k=kubectl、alias kgp='kubectl get pods' 等,配合自動補全功能,可以讓你的維運效率翻倍。遇到不確定的指令可以隨時用 kubectl explain 或 kubectl <command> --help 來查閱。

分享這篇
X LinkedIn Facebook Hacker News Reddit

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料。