---
# System prepended metadata

title: docker kubeadm 筆記

---

# 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.


完!~







         
    
    
          
          






























