iT邦幫忙

2022 iThome 鐵人賽

DAY 13
0

Day 13 Kubernetes - Cheatsheet 篇

本篇大綱

這邊筆者自己整理幾個比較常用到的 kubectl 命令,其實就是 Cheatsheet,Debug 的時候可以使用,但是官方版本內容真的有點多,這裡準備幾個大家比較常用的命令,這些命令可以自由變化搭配。

內文

列出所有 Pod 資訊

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 的 Describe

發現你的 Pod 一直卡在 Pending,就代表裡面有些條件不符合,所以 K8s 無法分配工作。

可能像是:

  • PVC 還正在 Pending
  • Request 資源已經超出每個 Node 上限
  • Pod 數量過多(節點建議上限為 110 個 Pod)
kubectl describe pod <POD_NAME> -n <NAMESPACE_NAME> # 列出該 Pod 的詳細資訊

列出 Pod 裡面的 log 資訊(發生 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 離開。

自行進入 Pod

裡面如果有些資訊想要查看,可以透過 exec 進入該 Pod,不過這裡有幾個前提:

  1. Pod 需要在 Running 的時候才能做
  2. 後面所執行的程式必須存在,否則無法進入。

第二點雖然大部分 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

建立臨時 Pod

有時候我們無法直接確認 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 流程給各位參考:

https://ithelp.ithome.com.tw/upload/images/20220928/20112934nHdCML2CDP.png

雖然這上面圖資訊很多,但簡單來說:

  • Pending:看 describe
  • Crashloopbackoff:看 logs
  • 沒有錯誤的一直 Restart:liveness 設定有問題
  • 沒有 Ready:readiness 設定有問題

這裡再附上 K8s 官方自己的 Cheatsheet,因為我覺得內容有點多就自己再整理一篇實務上比較常用的命令。

https://kubernetes.io/docs/reference/kubectl/cheatsheet/

本系列內容也會同步貼到我的 Blog https://blog.yangjerry.tw 歡迎來我的 Blog 點一下 RSS 追蹤,那我們就下一篇文章見啦!

Source


上一篇
Day 12 Kubernetes - 組建真正的服務吧(二)
下一篇
Day 14 Helm 簡介&安裝
系列文
關於我怎麼把一年內學到的新手 IT/SRE 濃縮到 30 天筆記這檔事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言