Kubernetes CKA課程筆記 23

加入worker node*2到cluster中(weave db issue Troubleshooting)

ZONGRU Li
11 min readOct 17, 2021

首先一樣提醒worker機要執行關閉swap,執行:

sudo swapoff -a

我為了省錢有將兩台worker做”停止執行個體

先啟動開始燒$

確認關閉swap:

將第一台worker加入cluster之中:

首先要找到當初master機執行kubeadm init

最後顯示的可以讓worker加入的指令

詳第16篇

找不到也沒關係,可以重新取得

該指令前面就寫了master在哪,所以是給worker上執行的

並帶有一堆加密token

回到master嘗試取回這段指令,先執行:

kubeadm --help

查看各式指令

往下拉很多

再次改執行:

kubeadm token --help

再次改執行:

kubeadm token create --help

然後找到我們需要得指令:

最終取回提供給worker需要得指令:

接著來到worker1

記得前面加sudo執行上述指令

步驟不多,很快就完成如下:

preflight階段:執行join前pre-flight確認

kubelet-start階段:撰寫kubelet設定,憑證,最後重啟kubelet

理論上這樣worker1就算加進Cluster內了!!

理論上該schedul的pod應該就會自動在worker上運行

回到master確認:

kubectl get node

更詳細:

kubectl get node -o wide

執行全nameSpace範圍的pod詳細檢查:

kubectl get pod -A -o wide

也就是現在kube-proxy與weave-net的pod有跑在worker1上

前一篇畫面圖有看到weave-net是以DaemonSet運行(每一個Node一個pod)

另外kube-proxy也是DaemonSet運行的Pod!

同理加入worker2:

用同一個token指令,所以直接沿用worker1的指令加入:

一樣正常跑完!

在worker2中確認一下kubelet服務,執行:

service kubelet status

正常運作中

回master機上確認:

pod確認

worker2也有這兩個DaemonSet帶起的pod了!!

接著問題可能是,為什麼可以做到將worker機加入cluster中呢?

主要是跟master上與worker上防火牆有開的PORT有關

master的防火設定
worker1的

確認Weave-Network:

在21篇筆記中有講到WeaveNet機制是讓Node上WeaveNet Pod直接互相溝通

如上我們master & worker*2都有weave-net pod在運作

那我們怎麼知道他們之間有正常(跨Node)溝通?

所以要Check!

在master機上執行:

kubectl get pod -A |grep weave-net

先不管哪個weave-net是跑在哪一台,之後三個都要看一遍

執行查看log指令,格式如下:

kubectl logs {pod name} -n {nameSpace}

得到錯誤回應,因為它裡面居然有兩個container(後面有印出來)

裡面有兩個container,k8s不知道要看哪個log

所以挑應該是main porcess的:weave

kubectl logs {pod name} -n {nameSpace} -c {container名稱}

好像沒啥錯誤,我好像挑到master的...

改換一個pod來看看:

連另一台work與master在6783 PORT都不通

後面也是:

在看另一個Pod log

一樣嘗試連到master(6783 PORT) timeout

由上面現象可以直接推斷weave-net在不同Node之間需要開通6783 PORT!!!

而我們當初所建立的防火牆規則僅僅是依據k8s安裝

並沒有考慮到CNI Plugin : weav-net的需要

所以現在要做的事情很簡單:加!!

worker那邊的防火牆規則同理

接著再次確認(後面-f可以監聽):

kubectl logs {pod name} -n {nameSpace} -c {container名稱} -f

另一台的

確認都有連上

下面這個應該是master上的weav-net pod的log:

有連上兩台worker1 & 2

以上看起來weav-net就好了

但是對於Pod來說到底可否看到不同NODE間的網路

我們還不清楚

一樣先取得weav-net的pod:

接著執行一個後面章節才會詳述的複雜指令:

kubectl exec -n kube-system {pod name} -c {container name} -- {weave的啟動指令位置} --local status

只能來這找答案了...

link

首先分析看到相關錯誤log

"IP allocation was seeded by different peers"的錯誤

找到這篇:

https://stackoverflow.com/questions/61124363/inter-node-pod-to-pod-communication-is-not-possible-why

看起來是weave的db可能會出問題,位置在worker1的:

/var/lib/weave/weave-netdata.db

我先執行worker1上述檔案移除:

然後用AWS介面將worker1重啟

執行worker1的"停止執行個體"

順便看看master機上的各個狀態:

可能還沒刷新

過幾秒後在看:

執行看worker1上的weave的指令會卡住:

確定AWS work1停止

重啟worker1

等幾分後起好了

確認一下worker1裡面服務狀態

從master看:

確認worker1剛剛移除的weave檔有長出來:

看看worker1上的weave pod的weave的container log:

正常了!!

再來

kubectl logs {worker1上的weave pod name} -n kube-system -c weave -f

kubectl logs weave-net-64j6z -n kube-system -c weave -f

沒有看到"IP allocation was seeded by different peers"的錯誤了 YA~超爽!

把三台的status看個遍:

kubectl exec -n kube-system {pod name} -c {container name} -- {weave的啟動指令位置} --local status

真爽(也實驗到worker機台關閉,之後上完課可能都要關worker省錢)

但是還是在看一遍所有pod狀態:

172.31.33.65是剛剛關掉的worker1

worker上確認:

kubeadm version

service kubelet status

安裝測試應用程式:

  • 嘗試用快速的建置方式建立Pod,理論會分配到兩個worker上

來到master機執行:

kubectl run {要給予的Pod名稱} --image={image名稱}

例如如下:

所以我有image!?或是kubectl會幫我抓?我還沒搞懂這段

然後執行指令看看狀態(-w表示持續監視):

kubectl get pod

kubectl get pod -w

這個會是在Default namespace

kubectl get pod -o wide

看起來長在worker1上

在做第二個!!

kubectl run test2 --image=nginx

第二個正準備長在worker2上!!!

過一陣子就變成都在Running!

參考課程(reference)

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

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

No responses yet