將第一台worker加入cluster之中:
首先要找到當初master機執行kubeadm init
最後顯示的可以讓worker加入的指令
找不到也沒關係,可以重新取得
該指令前面就寫了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確認
接著問題可能是,為什麼可以做到將worker機加入cluster中呢?
主要是跟master上與worker上防火牆有開的PORT有關
確認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,k8s不知道要看哪個log
所以挑應該是main porcess的:weave
kubectl logs {pod name} -n {nameSpace} -c {container名稱}
改換一個pod來看看:
後面也是:
在看另一個Pod log
由上面現象可以直接推斷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:
以上看起來weav-net就好了
但是對於Pod來說到底可否看到不同NODE間的網路
我們還不清楚
一樣先取得weav-net的pod:
接著執行一個後面章節才會詳述的複雜指令:
kubectl exec -n kube-system {pod name} -c {container name} -- {weave的啟動指令位置} --local status
只能來這找答案了...
首先分析看到相關錯誤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狀態:
worker上確認:
kubeadm version
service kubelet status
安裝測試應用程式:
- 嘗試用快速的建置方式建立Pod,理論會分配到兩個worker上
來到master機執行:
kubectl run {要給予的Pod名稱} --image={image名稱}
例如如下:
然後執行指令看看狀態(-w表示持續監視):
kubectl get pod
kubectl get pod -w
kubectl get pod -o wide
在做第二個!!
kubectl run test2 --image=nginx
過一陣子就變成都在Running!