Kubernetes单节点IP地址变更完整操作指南
·
概述
本文详细记录Kubernetes集群节点IP地址从192.168.1.100变更为192.168.1.200的完整操作流程,适用于生产环境IP迁移场景。
一、环境备份
1.1 备份Kubernetes核心配置
# 备份主要配置文件 sudo cp -r /etc/kubernetes /etc/kubernetes.backup # 备份kubelet配置和相关证书 sudo cp -r /var/lib/kubelet /var/lib/kubelet.backup
二、准备配置文件
2.1 生成默认配置文件
# 获取标准初始化配置文件 kubeadm config print init-defaults > /root/kubeadm-init-config.yaml
2.2 修改配置文件
编辑 /root/kubeadm-init-config.yaml,更新以下关键字段:
apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration localAPIEndpoint: advertiseAddress: 192.168.1.200 # 修改为新的IP地址 bindPort: 6443
三、系统网络配置更新
3.1 更新主机名解析
# 备份hosts文件 cp /etc/hosts /etc/hosts.backup.$(date +%Y%m%d) # 更新IP地址映射 sed -i 's/192.168.1.100/192.168.1.200/g' /etc/hosts # 检查网络接口 ip addr show eth0 | grep inet
3.2 验证网络配置
# 验证hosts修改 grep "192.168.1.200" /etc/hosts # 测试网络连通性 ping -c 3 192.168.1.200
四、停止Kubernetes服务
4.1 优雅停止服务
echo "停止 K8S 服务..." systemctl stop kubelet # 等待所有容器停止 sleep 10 # 验证容器状态 docker ps | grep k8s || echo "所有 K8S 容器已停止"
五、清理旧配置
5.1 删除旧配置文件
# 清理kubernetes配置文件 rm -f /etc/kubernetes/*.conf rm -f /etc/kubernetes/manifests/*.yaml
六、重新生成Kubernetes配置
6.1 分阶段重新生成配置
echo "重新生成 K8S 配置..." # 1. 生成kubeconfig文件 kubeadm init phase kubeconfig all --config kubeadm-init-config.yaml # 验证生成的文件 ls -la /etc/kubernetes/*.conf # 2. 生成控制平面Pod配置 kubeadm init phase control-plane all --config kubeadm-init-config.yaml # 3. 生成etcd配置 kubeadm init phase etcd local --config kubeadm-init-config.yaml # 4. 生成插件配置 kubeadm init phase addon all --config kubeadm-init-config.yaml
七、证书重新生成
7.1 清理并重新生成证书
echo "重新生成证书..." # 删除旧证书 rm -rf /etc/kubernetes/pki/apiserver.* rm -rf /etc/kubernetes/pki/front-proxy-client* rm -rf /etc/kubernetes/pki/etcd/healthcheck-client* rm -rf /etc/kubernetes/pki/etcd/peer* rm -rf /etc/kubernetes/pki/etcd/server* # 重新生成所有证书 kubeadm init phase certs all --config kubeadm-init-config.yaml
7.2 验证新证书
# 验证证书包含新IP echo "验证证书包含新 IP..." openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout | grep "192.168.1.200" openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout | grep "k8s-master.example.com"
八、更新ConfigMap和外部配置
8.1 更新集群配置
echo "更新 K8S ConfigMap..." # 更新kubeadm-config kubectl get cm -n kube-system kubeadm-config -o yaml > kubeadm-config.yaml sed -i 's/192.168.1.100/192.168.1.200/g' kubeadm-config.yaml kubectl apply -f kubeadm-config.yaml # 更新kube-proxy配置 kubectl get cm -n kube-system kube-proxy -o yaml > kube-proxy.yaml sed -i 's/192.168.1.100/192.168.1.200/g' kube-proxy.yaml kubectl apply -f kube-proxy.yaml # 重启kube-proxy kubectl get pods -n kube-system -l k8s-app=kube-proxy -o name | xargs kubectl delete -n kube-system
九、集群状态验证
9.1 创建验证脚本
创建 verify-cluster.sh 脚本:
#!/bin/bash echo "=== 集群状态验证 ===" # 1. 检查kubelet状态 echo "1. Kubelet 状态:" systemctl status kubelet --no-pager -l # 2. 检查节点状态 echo "2. 节点状态:" kubectl get nodes -o wide # 3. 检查核心组件 echo "3. 核心组件状态:" kubectl get pods -n kube-system # 4. 检查组件健康 echo "4. 组件健康状态:" kubectl get componentstatuses # 5. 检查证书 echo "5. 证书验证:" kubeadm certs check-expiration # 6. 测试API访问 echo "6. API服务器测试:" kubectl cluster-info kubectl version --short # 7. 检查网络插件 echo "7. 网络插件:" kubectl get pods -n kube-system -l k8s-app=calico-node || \ kubectl get pods -n kube-system -l k8s-app=flannel || \ echo "检查网络插件状态" echo "=== 验证完成 ==="
9.2 执行验证
chmod +x verify-cluster.sh ./verify-cluster.sh
注意事项
-
操作顺序:严格按照步骤执行,避免跳过任何环节
-
备份重要性:操作前务必完成完整备份
-
时间窗口:建议在业务低峰期执行
-
网络连通性:确保新IP地址的网络配置正确
-
证书验证:证书更新后务必验证包含新IP
故障排查
如果遇到问题,可以:
-
检查
/var/log/messages和journalctl -u kubelet日志 -
验证网络连通性和DNS解析
-
确认防火墙规则是否允许新IP通信
总结
通过以上完整流程,可以安全地将Kubernetes集群节点的IP地址进行变更。每个步骤都包含验证环节,确保变更过程的可靠性和可追溯性。
更多推荐
所有评论(0)