kubectl 常用命令速查表
上下文、Pod、部署、回滾、Service 等九類命令,含可直接套用的示例
共 90 條命令
kubectl config get-contexts上下文與清單查詢列出所有集群上下文,切錯集群是常見事故
kubectl config get-contexts
kubectl config use-context prod上下文與清單查詢切換當前上下文,操作前先確認這一條
kubectl config use-context prod-cn
kubectl config current-context上下文與清單查詢查看當前在哪個集群,腳本里可做前置校驗
kubectl config current-context
kubectl config set-context --current --namespace=staging上下文與清單查詢把默認命名空間固定下來,省去每次 -n
kubectl config set-context --current --namespace=staging
kubectl get ns上下文與清單查詢列出命名空間
kubectl get ns
kubectl get all -n app上下文與清單查詢一次看某命名空間下的主要資源
kubectl get all -n app
kubectl get pods -o wide上下文與清單查詢多顯示 IP 與所在節點,排查調度與網絡必備
kubectl get pods -o wide -n app
kubectl get pods -A上下文與清單查詢查所有命名空間的 Pod
kubectl get pods -A --field-selector=status.phase!=Running
kubectl get pods -w上下文與清單查詢持續監聽列表變化,滾動更新時觀察用
kubectl get pods -w -n app
kubectl get pod web-0 -o yaml上下文與清單查詢導出某個資源的完整 YAML(含運行時狀態)
kubectl get pod web-0 -o yaml > pod-backup.yaml
kubectl get deploy web -o yaml --export上下文與清單查詢導出時去掉集群生成的字段,方便重新套用
kubectl get deploy web -o yaml -n app
kubectl explain deploy.spec.strategy上下文與清單查詢在終端查字段含義與取值範圍,不用翻文檔
kubectl explain deploy.spec.strategy --recursive
kubectl api-resources上下文與清單查詢列出集群支持的所有資源類型與簡寫
kubectl api-resources --namespaced=true
kubectl apply -f deploy.yaml上下文與清單查詢聲明式應用配置,重複執行安全
kubectl apply -f k8s/ -n app
kubectl delete -f deploy.yaml上下文與清單查詢按文件刪除資源
kubectl delete -f k8s/ -n app
kubectl create ns staging上下文與清單查詢創建命名空間
kubectl create ns staging
kubectl describe pod <pod>Pod 操作查看 Pod 詳情,末尾 Events 段是排障重點
kubectl describe pod web-0 -n app
kubectl logs <pod>Pod 操作查看容器日誌
kubectl logs web-0 -n app --tail=200
kubectl logs -f <pod> -c appPod 操作跟蹤指定容器日誌,多容器 Pod 必須帶 -c
kubectl logs -f web-0 -c app -n app
kubectl logs --previous <pod>Pod 操作看上一次崩潰前的日誌,CrashLoopBackOff 必用
kubectl logs web-0 --previous -n app
kubectl logs --since=10m <pod>Pod 操作只看最近一段時間的日誌
kubectl logs web-0 --since=10m --timestamps -n app
kubectl exec -it <pod> -- shPod 操作進入容器,多數精簡鏡像沒有 bash
kubectl exec -it web-0 -n app -- /bin/sh
kubectl exec <pod> -- envPod 操作查看容器內實際生效的環境變量
kubectl exec web-0 -n app -- printenv
kubectl cp ./local.txt <pod>:/tmp/Pod 操作在本地與 Pod 之間複製文件
kubectl cp ./dump.sql app/web-0:/tmp/dump.sql
kubectl port-forward <pod> 8080:80Pod 操作把 Pod 端口轉發到本地,調試未暴露的服務
kubectl port-forward pod/web-0 8080:80 -n app
kubectl run tmp --rm -it --image=busybox -- shPod 操作臨時排錯容器,退出即清理
kubectl run tmp --rm -it --image=busybox:1.36 --restart=Never -- sh
kubectl get pod <pod> -o jsonpath="{.status.podIP}"Pod 操作取 Pod IP,方便寫進腳本
kubectl get pod web-0 -o jsonpath="{.status.podIP}" -n appkubectl delete pod <pod>Pod 操作刪除 Pod,被控制器管理的會自動重建
kubectl delete pod web-0 -n app
kubectl delete pod <pod> --grace-period=0 --forcePod 操作強制刪除卡在 Terminating 的 Pod
kubectl delete pod web-0 --grace-period=0 --force -n app
kubectl get pod <pod> -o jsonpath="{.status.containerStatuses[*].restartCount}"Pod 操作看重啓次數,判斷是否在反覆崩潰
kubectl get pod web-0 -o jsonpath="{.status.containerStatuses[*].restartCount}" -n appkubectl get deploy部署與擴縮容列出 Deployment 及副本就緒情況
kubectl get deploy -n app -o wide
kubectl scale deploy/web --replicas=3部署與擴縮容調整副本數,擴容最直接的方式
kubectl scale deploy/web --replicas=3 -n app
kubectl set image deploy/web web=app:1.1部署與擴縮容滾動更新鏡像版本
kubectl set image deploy/web web=registry.example.com/app:1.1 -n app
kubectl edit deploy/web部署與擴縮容直接編輯線上配置,保存即生效
kubectl edit deploy/web -n app
kubectl patch deploy/web --type=merge -p "{\"spec\":{\"replicas\":2}}"部署與擴縮容用一行 JSON 改字段,腳本里比 edit 合適
kubectl patch deploy/web --type=merge -p "{\"spec\":{\"replicas\":2}}" -n appkubectl autoscale deploy/web --min=2 --max=10 --cpu-percent=70部署與擴縮容配置水平自動擴縮容
kubectl autoscale deploy/web --min=2 --max=10 --cpu-percent=70 -n app
kubectl get rs部署與擴縮容查看 ReplicaSet,歷史版本都留在這裡
kubectl get rs -n app
kubectl get deploy web -o jsonpath="{.spec.template.spec.containers[*].image}"部署與擴縮容確認線上實際跑的是哪個鏡像
kubectl get deploy web -o jsonpath="{.spec.template.spec.containers[*].image}" -n appkubectl annotate deploy/web note="release-1.1"部署與擴縮容打註釋,記錄發佈信息
kubectl annotate deploy/web note="release-1.1" --overwrite -n app
kubectl label deploy/web tier=web部署與擴縮容打標籤,供 Service 選擇器與選擇器查詢使用
kubectl label deploy/web tier=web --overwrite -n app
kubectl rollout status deploy/web發佈與回滾觀察滾動更新進度,發佈後必看
kubectl rollout status deploy/web -n app --timeout=120s
kubectl rollout history deploy/web發佈與回滾查看歷史版本與變更原因
kubectl rollout history deploy/web -n app
kubectl rollout undo deploy/web發佈與回滾回滾到上一個版本,出事後最快止血
kubectl rollout undo deploy/web -n app
kubectl rollout undo deploy/web --to-revision=2發佈與回滾回滾到指定版本,先看 history 再定
kubectl rollout undo deploy/web --to-revision=2 -n app
kubectl rollout restart deploy/web發佈與回滾原地重啓全部 Pod,配置變更後常用
kubectl rollout restart deploy/web -n app
kubectl rollout pause deploy/web發佈與回滾暫停發佈,配合 set image 可在觀察後再放行
kubectl rollout pause deploy/web -n app
kubectl rollout resume deploy/web發佈與回滾恢復被暫停的發佈
kubectl rollout resume deploy/web -n app
kubectl get svcService 與網絡列出 Service 及其 ClusterIP 與端口
kubectl get svc -n app -o wide
kubectl get endpoints webService 與網絡查看 Service 背後真實的 Pod IP,為空說明選擇器沒匹配上
kubectl get endpoints web -n app
kubectl describe svc webService 與網絡查看 Service 詳情,含選擇器與端口映射
kubectl describe svc web -n app
kubectl expose deploy/web --port=80 --target-port=8080Service 與網絡為 Deployment 快速建一個 Service
kubectl expose deploy/web --port=80 --target-port=8080 --type=ClusterIP -n app
kubectl port-forward svc/web 8080:80Service 與網絡轉發 Service 端口,不依賴 Ingress 就能本地驗證
kubectl port-forward svc/web 8080:80 -n app
kubectl get ingressService 與網絡列出 Ingress 與暴露的域名
kubectl get ingress -n app
kubectl describe ingress webService 與網絡查看 Ingress 規則與後端解析結果
kubectl describe ingress web -n app
kubectl get netpolService 與網絡列出網絡策略,Pod 之間不通先查它
kubectl get netpol -n app
kubectl get svc web -o jsonpath="{.spec.clusterIP}"Service 與網絡取 ClusterIP,寫進配置或腳本用
kubectl get svc web -o jsonpath="{.spec.clusterIP}" -n appkubectl get cm配置與密鑰列出 ConfigMap
kubectl get cm -n app
kubectl create cm app-config --from-file=app.yaml配置與密鑰從文件創建 ConfigMap
kubectl create cm app-config --from-file=config/app.yaml -n app
kubectl describe cm app-config配置與密鑰查看 ConfigMap 內容
kubectl describe cm app-config -n app
kubectl get secret配置與密鑰列出 Secret,值默認是 base64 不是加密
kubectl get secret -n app
kubectl create secret generic db --from-literal=password=changeit配置與密鑰從字面量創建 Secret
kubectl create secret generic db --from-literal=password=changeit -n app
kubectl get secret db -o jsonpath="{.data.password}" | base64 -d配置與密鑰解出 Secret 明文,排查配置不生效
kubectl get secret db -o jsonpath="{.data.password}" -n app | base64 -dkubectl get sa配置與密鑰列出 ServiceAccount,Pod 訪問 API 用的身份
kubectl get sa -n app
kubectl auth can-i get pods --as=system:serviceaccount:app:web配置與密鑰驗證某個身份有沒有權限,RBAC 排查用
kubectl auth can-i get pods --as=system:serviceaccount:app:web -n app
kubectl get nodes節點與調度列出節點與狀態
kubectl get nodes -o wide
kubectl describe node <node>節點與調度查看節點詳情,含已分配資源與污點
kubectl describe node node-1
kubectl top nodes節點與調度查看節點實際資源佔用,需裝 metrics-server
kubectl top nodes
kubectl top pods節點與調度查看 Pod 資源佔用,定位誰在喫內存
kubectl top pods -n app --sort-by=memory
kubectl cordon <node>節點與調度標記節點不可調度,但不影響已有 Pod
kubectl cordon node-1
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data節點與調度驅逐節點上的 Pod,維護前必做
kubectl drain node-1 --ignore-daemonsets --delete-emptydir-data
kubectl uncordon <node>節點與調度恢復節點可調度
kubectl uncordon node-1
kubectl taint nodes node-1 dedicated=gpu:NoSchedule節點與調度給節點加污點,只讓能容忍的 Pod 調度上去
kubectl taint nodes node-1 dedicated=gpu:NoSchedule
kubectl get events --sort-by=.lastTimestamp排障按時間倒序看事件,集群層面的問題都在這
kubectl get events --sort-by=.lastTimestamp -n app | tail -30
kubectl get events -w排障實時監聽事件流,復現問題時開着
kubectl get events -w -n app
kubectl get pod --field-selector=status.phase=Failed排障篩出所有失敗狀態的 Pod
kubectl get pod --field-selector=status.phase=Failed -A
kubectl get pod <pod> -o jsonpath="{.status.conditions[?(@.type==\"Ready\")].reason}"排障取未就緒原因,比翻 describe 快
kubectl get pod web-0 -o jsonpath="{.status.conditions[?(@.type==\"Ready\")].reason}" -n appkubectl debug -it <pod> --image=busybox --target=app排障給已有 Pod 注入臨時容器,共享進程命名空間
kubectl debug -it web-0 --image=busybox:1.36 --target=app -n app
kubectl debug node/<node> -it --image=busybox排障在節點上開排錯 Pod,能看宿主機文件系統
kubectl debug node/node-1 -it --image=busybox:1.36
kubectl logs <pod> --all-containers排障一次看 Pod 內所有容器日誌
kubectl logs web-0 --all-containers --prefix -n app
kubectl wait --for=condition=Ready pod/web-0 --timeout=60s排障等待 Pod 就緒,腳本里做同步點
kubectl wait --for=condition=Ready pod/web-0 --timeout=60s -n app
kubectl get pod web-0 -o json | jq .status排障配合 jq 精查狀態字段,比 jsonpath 好寫
kubectl get pod web-0 -o json -n app | jq .status
kubectl get pod web-0 -o yaml --show-managed-fields排障看字段到底被誰改的,排查配置被篡改
kubectl get pod web-0 -o yaml --show-managed-fields -n app
kubectl cluster-info集群與資源查看控制面地址與附加組件位置
kubectl cluster-info
kubectl version --short集群與資源查看客戶端與服務端版本,注意版本偏差
kubectl version --short
kubectl apply --dry-run=server -f deploy.yaml集群與資源服務端試跑,真校驗字段與准入策略但不落盤
kubectl apply --dry-run=server -f deploy.yaml -n app
kubectl diff -f deploy.yaml集群與資源預覽 apply 會改哪些字段,變更前先看
kubectl diff -f deploy.yaml -n app
kubectl get pv,pvc集群與資源查看存儲卷與聲明,Pending 多為存儲類問題
kubectl get pv,pvc -n app
kubectl get hpa集群與資源查看自動擴縮容狀態與當前指標
kubectl get hpa -n app
kubectl get crd集群與資源列出集群安裝的自定義資源定義
kubectl get crd | head -30
kubectl api-resources --verbs=list --namespaced -o name集群與資源列出支持列舉的命名空間級資源,備份腳本常用
kubectl api-resources --verbs=list --namespaced -o name
這個工具不好用,或者遇到 bug?
去回報