Kubernetes CKA課程筆記 48

Troubleshooting — kubelet與kubectl issue

ZONGRU Li
Nov 13, 2021

有時候開發者在自行佈署應用程式到K8s Cluster時回報有問題

有可能情況例如Control Plane NodeNode之間溝通異常

所以需要管理者協助排除:

有可能是Control Plane Node的元件問題,或是Node執行程式的問題

以下做幾個可能的範例:

Troubleshooting kubelet Issue:

<記得是kube let不是ctl !!>

比如說在Control Plane Node確認各個Node狀態得到如下結果:

發現有一台居然顯示NotReady狀態,所以身為管理者該如何Debug?

這通常發生在該Node上的kubelet有異常

所以通常要到該台Node上確認kubelet執行狀態

最前面架構與安裝有學到kubelet並不是以Pod形式運行,而是Linux Process

所以要以Linux Process的處理方式,首先進到worker1機台上:

  • 1.確認Process狀態,執行:

service kubelet status

  • 2.為了更進一步了解kubelet發生的狀況,在看看kubelet的log資訊,執行:

journalctl -u kubelet

  • 3.最後查找相關資訊得到目錄問題:
講師這畫面上還有噴一行紅色log很明顯提示找不到檔案的錯誤,但我的kubelet沒噴...
  • 確認kubelet的實際位置執行:

which kubelet

  • 上述/usr/bin/kubelet才是正確的kubelet二進位套件的執行位置
  • 至於kubelet是如何指定到/usr/local/bin/kubelet目錄的則是在下圖:
  • 所以找到:
  • cat內容看到:
  • 接著就是sudo vi 進去修改後儲存:
修正後儲存
  • 接著讓系統重新讀取設定,並將kubelet服務重啟載入設定,連續執行以下:

讀取設定與重啟

sudo systemctl daemon-reload

sudo systemctl restart kubelet

  • 然後確認狀態kubelet執行:

service kubelet status

  • 回到master機確認狀態:
確認正常,i.e. worker1的kubelet正常運作中!

Troubleshooting kubectl Connection Issue:

另一種狀況是突然地在執行kubectl指令時無效,例如:

  • 由前面學習知道,這些指令會送往API Server
  • API Server就是在master
  • 並且發動kubectl指令會去參考到~/.kube/config檔案內容
  • 也是我們第一個該Debug的檔案! 所以cat指令查看其內容:
  • 首先複製CA憑證內容,並將其base64解密看看,執行:

echo {內容}|base64 --decode

  • 並將內容與/etc/kubenetes/pki/ca.crt內容比對:
  • 以上確認了~/.kube/config內的ca憑證應該沒有問題!
  • 接著要看看API Server endpoint是否正確,可以執行:

kubectl config view

  • 簡單點直接看到AWS上的master機的私網IP位置:
複製去比對
  • 如上此時就找到該修正的地方 →API Serverurl
  • 所以進入到~/.kube/config修改
  • 修正儲存後再次嘗試執行kubectl指令:
都正常了!!

以上大略示範可能的狀況與Debug的方式

參考課程(reference)

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet