本文最后更新于0 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
控制节点操作(master)
设置环境变量
export old_master_ip="10.20.3.58"
export new_master_ip="10.20.3.67"
查看证书信息
for i in $(find /etc/kubernetes/pki -type f -name "*.crt");do echo ${i} && openssl x509 -in ${i} -text | grep 'DNS:';done
备份配置和证书
cp -r /etc/kubernetes{,-bak}
更改configmap 把旧IP替换成新的IP
通过脚本安装的1.24版本的集群不需要执行此步骤
kubectl -n kube-system edit cm kubeadm-config
kubectl -n kube-system edit cm kube-proxy
更改hosts
sed -i "s/$old_master_ip/$new_master_ip/g" /etc/hosts
更改kubeconfig
sed -i "s/$old_master_ip/$new_master_ip/g" /root/.kube/config
删除需要重新生成的证书
rm -rf /etc/kubernetes/pki/{apiserver*,front-proxy-client*,etcd/healthcheck*,etcd/peer*,etcd/server*}
重新签发证书
kubeadm init phase certs all \
--apiserver-advertise-address ${new_master_ip} \
--apiserver-cert-extra-sans ha.api.k8s.gm \
--apiserver-cert-extra-sans 172.27.0.10 \
--apiserver-cert-extra-sans 172.27.0.1 \
--apiserver-cert-extra-sans 127.0.0.1 \
--apiserver-cert-extra-sans kubernetes \
--apiserver-cert-extra-sans kubernetes.default \
--apiserver-cert-extra-sans kubernetes.default.svc \
--apiserver-cert-extra-sans kubernetes.default.svc.cluster.local
再次查看证书
for i in $(find /etc/kubernetes/pki -type f -name "*.crt");do echo ${i} && openssl x509 -in ${i} -text | grep 'DNS:';done
更改haproxy (如果有)
sed -i "s/$old_master_ip/$new_master_ip/g" /etc/haproxy/haproxy.cfg
systemctl restart haproxy && systemctl status haproxy
更改manifest
grep -rl $old_master_ip /etc/kubernetes | xargs sed -i "s/$old_master_ip/$new_master_ip/g"
重启服务
systemctl restart containerd
systemctl restart kubelet
工作节点操作
建议开多个终端进行操作,master节点一个终端,工作节点一个终端
设置环境变量
export old_ip="10.20.3.61"
export new_ip="10.20.3.68"
export old_master_ip="10.20.3.58"
export new_master_ip="10.20.3.67"
备份kubelet相关配置
cp /etc/kubernetes/kubelet.conf /etc/kubernetes/kubelet.conf.bak
cp -rf /var/lib/kubelet/ /var/lib/kubelet-bak
删除kubelet的客户端证书
rm -rf /var/lib/kubelet/pki/kubelet-client*
更改hosts
sed -i "s/$old_ip/$new_ip/g" /etc/hosts
更改haproxy (如果有)
sed -i "s/$old_master_ip/$new_master_ip/g" /etc/haproxy/haproxy.cfg
systemctl restart haproxy && systemctl status haproxy
准备kubeadm-config.yaml文件
此文件是用于执行kubeadm集群的初始化,如果还有该文件,则直接修改此文件中的IP地址,如果没有该文件则需要重新生成
情况一
如果是通过脚本部署的k8s集群,默认存放位置为: /application/k8s/kubeadm-config.yaml , 如果还能找到该文件,则需要更改里面的IP地址
sed -i "s/$old_master_ip/$new_master_ip/g" /application/k8s/kubeadm-config.yaml
情况二
如果已经找不到该文件了,则需要重新生成,生成之后再更改里面的内容,生成命令为
kubeadm config print init-defaults > kubeadm-config.yaml
修改里面的内容
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 10.20.3.67 # 更改成新的master节点的IP地址
bindPort: 6443 # 更改成apiserver的端口,默认就是6443
nodeRegistration:
criSocket: unix:///run/containerd/containerd.sock # 更改成containerd或者docker的sock路径
imagePullPolicy: IfNotPresent
name: node
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
### 这下面的可以删掉 ###
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.k8s.io
### 这上面的可以删掉 ###
kind: ClusterConfiguration
kubernetesVersion: 1.24.0
networking:
dnsDomain: cluster.local
podSubnet: "172.29.0.0/16" # 更改pod的网段,如果没有则增加此段配置
serviceSubnet: "172.27.0.0/16" # 更改service的网段,如果没有则增加此段配置
scheduler: {}
controlPlaneEndpoint: "ha.api.k8s.gm:16443" # 指定apiserver的地址,如果有代理,需要更改成代理的地址
在master节点重新生成节点的kubelet.conf文件
所有生成节点kubelet.conf的操作都在master节点进行
生成第一个工作节点的kubelet.conf文件,需要将第一个工作节点的主机名进行替换
kubeadm kubeconfig user \
--org system:nodes \
--client-name system:node:k8s-worker-3-61 \
--config kubeadm-config.yaml \
> kubelet.conf
将kubelet.conf拷贝至目标节点
生成成功后,将该文件拷贝至第一个工作节点上
scp kubelet.conf 10.20.3.68:/etc/kubernetes/kubelet.conf
重启kubelet
systemctl restart kubelet

