k8s的kubeadm的master更換ip


k8s的master更換ip后,通信問題出現了問題,我們只需要通過kubeadm init phase命令,重新生成config文件和簽名文件就可以了
一,切換到/etc/kubernetes/manifests, 將etcd.yaml kube-apiserver.yaml里的ip地址替換為新的ip
替換etcd.yml文件內的str1為str2
sed -i 's/str1/str2/g' /etc/kubernetes/manifests/etcd.yaml
/etc/kubernetes/manifests # vim etcd.yaml
/etc/kubernetes/manifests # vim kube-apiserver.yaml
二,生成新的config文件
/etc/kubernetes# mv admin.conf admin.conf.bak
/etc/kubernetes# kubeadm init phase kubeconfig admin --apiserver-advertise-address <新的ip>
三,刪除老證書,生成新證書
/etc/kubernetes# cd pki
/etc/kubernetes/pki# mv apiserver.key apiserver.key.bak
/etc/kubernetes/pki# mv apiserver.crt apiserver.crt.bak
/etc/kubernetes/pki# kubeadm init phase certs apiserver --apiserver-advertise-address <新的ip>
四,重啟docker
/etc/kubernetes# cd ..
/etc/kubernetes# service docker restart
/etc/kubernetes# service kubelet restart
五,將配置文件config輸出
/etc/kubernetes#kubectl get nodes --kubeconfig=admin.conf # 此時已經是通信成功了
/etc/kubernetes#sz admin.conf
六,將kubeconfig默認配置文件替換為admin.conf,這樣就可以直接使用kubectl get nodes
/etc/kubernetes# mv admin.conf ~/.kube/config
文件目錄參考
已搭建好的K8S集群遭遇服務器的IP變了,kubectl 完全連不上“你的.舊.IP.地址:6443”,這時候我們最希望的絕對不是重新再部署一次,我們要的只是修改配置,讓已有的環境在新IP下再次煥發生機。另外,為了避免此等悲劇成為常態,為服務器固定IP吧。

以下才是正文

修改/etc/kubernetes/文件夾里的*.conf文件,把這些文件中有舊IP的地方全都替換成你的新IP。
修改$HOME/.kube/config文件,操作同上。
進入$HOME/.kube/cache/discovery/,這里應該有個子文件夾名字是“你的.舊.IP.地址_6443”(如127.0.0.1_6443),把這個文件夾名字里的IP改成你新IP。
重新生成證書然后重啟即可。這步參考了https://github.com/kubernetes/kubeadm/issues/581
我們需要重新生成三套certs&keys(apiserver, apiserver-kubelet-client, and front-proxy-client certs and keys)以防萬一,先把舊證書備份吧。

$ sudo mv /etc/kubernetes/pki/apiserver.key /etc/kubernetes/pki/apiserver.key.old
$ sudo mv /etc/kubernetes/pki/apiserver.crt /etc/kubernetes/pki/apiserver.crt.old
$ sudo mv /etc/kubernetes/pki/apiserver-kubelet-client.crt /etc/kubernetes/pki/apiserver-kubelet-client.crt.old
$ sudo mv /etc/kubernetes/pki/apiserver-kubelet-client.key /etc/kubernetes/pki/apiserver-kubelet-client.key.old
$ sudo mv /etc/kubernetes/pki/front-proxy-client.crt /etc/kubernetes/pki/front-proxy-client.crt.old
$ sudo mv /etc/kubernetes/pki/front-proxy-client.key /etc/kubernetes/pki/front-proxy-client.key.old
然后重新生成它們:

$ sudo kubeadm alpha phase certs apiserver --apiserver-advertise-address
$ sudo kubeadm alpha phase certs apiserver-kubelet-client
$ sudo kubeadm alpha phase certs front-proxy-client
這里我遇到了個小坑,生成證書時候kubeadm試圖去訪問dl.k8s.io,然后很不幸的是被牆了(外企的小伙伴可能沒有這個問題)。解決方案如下:

vim config.yaml
新建一個配置文件config.yaml,然后在文件里寫上:

kind: MasterConfiguration
apiVersion: kubeadm.k8s.io/v1alpha1
kubernetesVersion: v1.10.5
api:
advertiseAddress:
然后再生成apiserver的證書和keys:

$ sudo kubeadm alpha phase certs apiserver --config config.yaml
其他兩套證書不需要advertiseAddress參數,所以修改一下config.yaml:

kind: MasterConfiguration
apiVersion: kubeadm.k8s.io/v1alpha1
kubernetesVersion: v1.10.5
生成證書:

$ sudo kubeadm alpha phase certs apiserver-kubelet-client --config config.yaml
$ sudo kubeadm alpha phase certs front-proxy-client --config config.yaml
重啟:

$ sudo /sbin/shutdown -r now
重啟之后檢查一下狀態,如果一切OK就成功了!

kubectl get nodes
kubectl get ep
kubectl get pods --all-namespaces

==================================
node方面需要修改kubelet的配置文件指向新的apiserver的地址,並重啟docker


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM