這邊筆者自己整理幾個比較常用到的 kubectl
命令,其實就是 Cheatsheet,Debug 的時候可以使用,但是官方版本內容真的有點多,這裡準備幾個大家比較常用的命令,這些命令可以自由變化搭配。
kubectl get pod # 沒有指定通常為 default Namespace,列出該 Namespace 所有 Pod
kubectl get pod -n <NAMESPACE_NAME> # 列出該 Namespace 所有 Pod
kubectl get pod -A # 列出所有 Namespace Pod
kubectl get pod -A -o wide # 所有 Namespace Pod 並且列出所在節點
發現你的 Pod 一直卡在 Pending,就代表裡面有些條件不符合,所以 K8s 無法分配工作。
可能像是:
kubectl describe pod <POD_NAME> -n <NAMESPACE_NAME> # 列出該 Pod 的詳細資訊
Crashloopbackoff
可以使用)發現你的 Pod 一直在 Crash,或者跳 HTTP 500,那就代表該 Application 有設定錯誤,要自行看 Log 解決。
kubectl logs -n <NAMESPACE_NAME> <POD_NAME> # 查看 Pod 裡面的 log
kubectl logs -n <NAMESPACE_NAME> <POD_NAME> -c <CONTAINER_NAME> # 如果有 Pod 裡面有多個 Container。
kubectl logs -n <NAMESPACE_NAME> <POD_NAME> -f # 持續查看 Pod 裡面的 log,直到 Crash 或 Ctrl+c 離開。
裡面如果有些資訊想要查看,可以透過 exec 進入該 Pod,不過這裡有幾個前提:
第二點雖然大部分 image 都會有 /bin/bash
,如果沒有的話可以試試 /bin/sh
,有些 image 會拔超乾淨到連 shell 都沒有,只能透過邪門歪道存取了,但這就不在這次討論範圍內啦!
kubectl exec -it <POD_NAME> -- /bin/bash # 進入該 Pod 使用裡面的 bash
kubectl exec -it <POD_NAME> -c <CONTAINER_NAME> -- /bin/bash # 進入該 Pod 某個 Container 使用裡面的 bash
有時候我們無法直接確認 K8s 內部 Service 有沒有設定好,我們可以建立臨時 Pod,安裝需要的工具來檢測是否服務正常。
kubectl run ubuntu --restart=Never --rm -it --image ubuntu:22.04 -- /bin/bash
kubectl get node # 列出所有節點
kubectl get node -o wide # 列出所有節點 & 網路 IP
kubectl cordon <NODE_NAME> # 該節點設定不可分配任何 Pod
kubectl uncordon <NODE_NAME> # 該節點設定可以分配任何 Pod
kubectl drain <NODE_NAME>
kubectl delete <NODE_NAME> # 雖然有 delete 節點,但我們還是透過 Kubespray 來做就好
這邊附上 Debug 流程給各位參考:
雖然這上面圖資訊很多,但簡單來說:
這裡再附上 K8s 官方自己的 Cheatsheet,因為我覺得內容有點多就自己再整理一篇實務上比較常用的命令。
https://kubernetes.io/docs/reference/kubectl/cheatsheet/
本系列內容也會同步貼到我的 Blog https://blog.yangjerry.tw 歡迎來我的 Blog 點一下 RSS 追蹤,那我們就下一篇文章見啦!