# docker kubeadm 筆記 kubeadm 的前置功作 注意: master 和 worker 都要 做的 動作!!!!: master 的主機 cup 最少 要 2個 worker 的主機 cup 最少 要 1個 注意: master 和 worker 都要 做的 動作!!!! 照著輸入指令就行 ![](https://i.imgur.com/W5zFtT2.png) ![](https://i.imgur.com/hCYVnqI.png) ![](https://i.imgur.com/98yGKtI.png) ![](https://i.imgur.com/mheiBQW.png) ![](https://i.imgur.com/SOh4W3F.png) ![](https://i.imgur.com/RY40HPQ.png) # 2.master 要做的動作 (only master) ![](https://i.imgur.com/a9ewfB7.png) 等待一陣子就會 return 1 個 join 的 指示給你 EX: ![](https://i.imgur.com/PynUVw6.png) 這個指令可以在worker 的主機上用 (注意:是在worker 上執行,不是master!!!!) # 3.worker 要做的動作(only worker): 當 worker 裝好了 kubeadm 後 行用剛剛master return 的指令 加入 節點 ![](https://i.imgur.com/T3GhL77.png) 有時可能有bug出現, 就 輸入(kubeadm reset ,再加入就沒事) 然後 worker 可以先不用管了 # 4.在master 上查看 worker 是否成功加入: ![](https://i.imgur.com/Txv0nqc.png) kubectl get nodes node02 是master主機的名字 kubeadm init 後 生出來 的 master worker worker主機的名字 ,(成功加入) (這是master 的terminal ,名為node2 (改錯名字了,沒差)) ![](https://i.imgur.com/cBy2Upt.png) (這是worker 的terminal ,名為worker) ![](https://i.imgur.com/hEEomjR.png) # 5.在worker上一個新的docker container,新增1個pod 我利用上次 作業 放到 docker hub的 docker image ![](https://i.imgur.com/HYJBqW9.png) 我們可以 寫1個 .yaml 檔(注意 yaml 縮排跟語法比python 還煩) ![](https://i.imgur.com/lDD3WnN.png) 之後 建起來 ![](https://i.imgur.com/1WCvZCK.png) 再 查起來 kubectl get pods 確定 node 是worker , status 是runing ,成功 ![](https://i.imgur.com/zp1Zu5b.png) 在worker 的主機 上查看 是否有 docker images 成功build了 ericacer/1052048-demo ![](https://i.imgur.com/Or8qdfd.png) 再 把其放到 localhost:8080上測試 ![](https://i.imgur.com/Lf0eJlc.png) 這邊再開1個 master 的terminal 來curl 看看 ![](https://i.imgur.com/gnJ533l.png) 成功~ PS:UI 是長這樣的 (上次作業的圖,這次是用localhost來測試,所以沒辦法在server OS 上 顯示localhost:8080 介面) ![](https://i.imgur.com/lSyZxNI.png) # 6.設定可以讓worker上的某個container死掉後可以自動再啟動 我們可以 在寫 .yaml 時加 上 livenessProbe: httpGet: path: / port: webapp-port initialDelaySeconds: 15 periodSeconds: 15 timeoutSeconds: 30 successThreshold: 1 failureThreshold: 3 ![](https://i.imgur.com/arhTm0x.png) 加上後: ![](https://i.imgur.com/23how5h.png) ![](https://i.imgur.com/EcG0NJ8.png) 可以看到Liveness那行,清楚看到目前 health check 的設定狀態。當 container 無法正常回應 health check 時,Kubernetes 就會視為該 container 失去功能並重啟。 # 7.途中遇到的問題與解決方法: **A.** 當你使用kubectl 指令時 會有很多奇奇怪怪的bug出現 例如: kubectl get node 時會出現報錯 如: The connection to the server localhost:8080 was refused - did you specify the right host or port? OR Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of “crypto/rsa: verification error” while trying to verify candidate authority certificate “kubernetes”) 解決方法 有3種: 1.kubeadm init 後 必順輸入以下, 且要先 remove 之 前的那個檔 ,sudo rm -rf $HOME/ .kube ![](https://i.imgur.com/VdGTsfK.png) 2.再不行 就給個path ![](https://i.imgur.com/PwNjRkF.png) 3.還是不行時 就暴力解決吧! 因為kubectl 的指令需要訪問admin.conf,所 以你要在你打指令的目錄也copy一個 admin.conf,這樣就解決很多 問題了 **B.** kubectl get pods 查看state時 若過了很久還不是runing 的 state時 可以利用 kubectl describe pod 1052048-demo 查BUG ![](https://i.imgur.com/p9YZgwg.png) 報錯就在最後一行 這邊的BUG 說你的worker 上沒有 這個檔 ![](https://i.imgur.com/YXfDvTW.png) 有時安裝不完整或 重裝後沒 完整的init就出現這問題 ,google 找subnet.env就有了, copy到worker 那邊就OK. 完!~