如果是个多节点的集群,更换一台 master 节点的 ip 有个更简单的办法,那就是先把这台机器下线,然后再扩容一台新的 master,安全无副作用,如果是单节点更换 ip 地址(如果旧 ip 不用回收,那么可以直接在网卡上再绑定一个 ip 地址,不用对 k8s 进行修改)

kubeadm之单节点master升级高可用master 有点类似

首先更换操作系统 ip 地址

准备

1
2
3
4
5
6
7
8
9
# 备份配置文件
cp -r /etc/kubernetes{,-bak}

# 查看证书绑定的ip或域名
for i in $(find /etc/kubernetes/pki -type f -name "*.crt");do echo ${i} && openssl x509 -in ${i} -text | grep 'DNS:';done

# 删除需要重新生成的证书
rm -rf /etc/kubernetes/pki/{apiserver*,front-proxy-client*}
rm -rf /etc/kubernetes/pki/etcd/{healthcheck*,peer*,server*}

重新签发证书

1
2
3
4
5
# 这里需要修改证书绑定的ip
kubeadm init phase certs all \
--apiserver-advertise-address 192.168.163.10 \
--apiserver-cert-extra-sans "192.168.163.10,192.168.163.11,192.168.163.12" \
--cert-dir "/etc/kubernetes/pki"

更新配置文件里的 ip 地址

1
2
3
grep -R 10.0.0.10 /etc/kubernetes/*

vim ~/.kube/config

这个时候 kubectl 可用了,修改 configmap

1
2
kubectl edit cm -n kube-system kubeadm-config
kubectl edit cm -n kube-system kube-proxy

然后删除 pod 重建

1
2
kubectl -n kube-system delete pod kube-apiserver-k8s kube-controller-manager-k8s kube-proxy-nhqvg kube-scheduler-k8s etcd-k8s coredns-558bd4d5db-c4xbw
kubectl -n kube-flannel delete pod kube-flannel-ds-8s6cn