通常狀況下,"kubeadm"部署集羣時指定"--apiserver-advertise-address=<public_ip>"參數,便可在其餘機器上,經過公網ip join到本機器,然而,阿里雲ecs裏沒配置公網ip,etcd會沒法啓動,致使初始化失敗。node
阿里雲ECS學生機、ECS對應的公網ip、kubeadm1.15.四、kubelet1.15.四、kubectl1.15.四、ubuntu18.04.三、linux4.15.0-66-generic、docker18.9.7linux
該實現須要在kubeadm初始化過程當中對etcd進行修改,而kubeadm初始化是阻塞的,所以,須要創建兩個ssh對話,即用ssh工具新建兩個標籤,一個用來初始化節點,另外一個在初始化過程當中修改配置文件。注意是初始化過程當中,每次運行kubeadm init,kubeadm都會生成etcd的配置文件,若是提早修改了配置文件,在運行kubeadm init時會把修改的結果覆蓋,那麼也就沒有做用了。
docker
輸入命令"kubeadm init --kubernetes-version=<your_versin> --apiserver-advertise-address=<public_ip>"
此時會卡在ubuntu
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s [kubelet-check] Initial timeout of 40s passed.
在輸入上述命令後,kubeadm即開始了master節點的初始化,可是因爲etcd配置文件不正確,因此etcd沒法啓動,要對該文件進行修改。
文件路徑"/etc/kubernetes/manifests/etcd.yaml"。api
此處"xxx"爲公網ip,要關注的是"--listen-client-urls"和"--listen-peer-urls"。須要把"--listen-client-urls"後面的公網ip刪除,把"--listen-peer-urls"改成本地的地址。bash
稍等片刻以後,master節點就初始化好了
拷貝"root"後面的鏈接token,在其餘服務器,如騰訊雲或阿里雲ecs上就能夠join這臺master。
此時再安裝好網絡插件便可
服務器
當指定"--apiserver-advertise-address"爲公網ip時,kubeadm會在"[kubelet-check] Initial timeout of 40s passed."後卡很長時間,而後提示說初始化失敗:
網絡
查看kubelet日誌,未發現有價值的錯誤提示。因而進行了第二次嘗試,並新建了一個ssh對話,用來查看在初始化的時候docker容器的狀態。ssh
查看kubeadm生成的etcd配置文件,"xxx"爲個人公網ip:
發現kubeadm自動把"--listen-peer-urls"改成了kubeadm初始化時指定的"--apiserver-advertise-address",即公網ip,並且"--listen-client-urls=",後面也加上了公網ip。這兩個參數大概意思是指定要監聽的ip地址,而阿里雲學生機ecs的網卡沒有配置公網ip,所以就沒法指定該ip,致使etcd沒法正常啓動。對其進行修改便可,經測試,worker node 能夠經過指定的公網ip join到master node,能夠完成項目部署。
工具