概述

本文详细记录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

注意事项

  1. 操作顺序:严格按照步骤执行,避免跳过任何环节

  2. 备份重要性:操作前务必完成完整备份

  3. 时间窗口:建议在业务低峰期执行

  4. 网络连通性:确保新IP地址的网络配置正确

  5. 证书验证:证书更新后务必验证包含新IP

故障排查

如果遇到问题,可以:

  • 检查/var/log/messagesjournalctl -u kubelet日志

  • 验证网络连通性和DNS解析

  • 确认防火墙规则是否允许新IP通信

总结

通过以上完整流程,可以安全地将Kubernetes集群节点的IP地址进行变更。每个步骤都包含验证环节,确保变更过程的可靠性和可追溯性。

更多推荐