You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将Kubernetes非HA控制平面转为HA控制平面?主节点配置报错求助

哦,你踩了个典型的坑——kubeadm init是用来初始化全新集群的,你的现有master节点已经在运行控制平面组件了,当然会报端口占用、文件已存在的错误!不用慌,咱们一步步把现有单master集群切换到HA控制平面,用上你已经部署好的负载均衡器。

正确的操作步骤

1. 先备份关键配置(重中之重!)

在做任何修改前,先把集群的核心配置文件备份好,以防操作失误回滚:

sudo cp -r /etc/kubernetes /etc/kubernetes.bak
sudo cp ~/.kube/config ~/.kube/config.bak

2. 更新kubeadm集群配置

首先导出当前集群的kubeadm配置:

kubeadm config view > kubeadm-config.yaml

打开这个文件,找到clusterConfiguration节点,添加或修改controlPlaneEndpoint字段为你的负载均衡器地址(比如my-load-balancer:6443):

apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.20.1
controlPlaneEndpoint: "my-load-balancer:6443"
# 其他原有配置保持不变,不要乱改

然后用这个更新后的配置同步到集群:

sudo kubeadm init phase upload-config kubeadm --config kubeadm-config.yaml

3. 调整kube-apiserver静态Pod配置

编辑/etc/kubernetes/manifests/kube-apiserver.yaml,确保apiserver的启动参数适配负载均衡器:

  • 找到command里的--advertise-address,可以改成负载均衡器的IP(或者保留本地IP,后续确保kubeconfig指向LB即可)
  • 如果command里没有--control-plane-endpoint,手动添加这个参数,值设为你的LB地址

修改完成后,kubelet会自动重启kube-apiserver Pod,等待1-2分钟让组件重新启动完成。

4. 更新所有kubeconfig文件的server地址

集群里所有kubeconfig文件的server字段都需要从原来的master本地IP,改成负载均衡器地址,包括:

  • /etc/kubernetes/admin.conf
  • /etc/kubernetes/kubelet.conf
  • /etc/kubernetes/controller-manager.conf
  • /etc/kubernetes/scheduler.conf
  • 你本地用户目录下的~/.kube/config

举个例子,编辑admin.conf:

sudo nano /etc/kubernetes/admin.conf

找到类似这样的行:

server: https://192.168.1.100:6443

替换成:

server: https://my-load-balancer:6443

5. 加入新的Master节点

现在现有master已经适配LB了,生成加入新master的命令:

sudo kubeadm token create --print-join-command --certificate-key $(kubeadm init phase upload-certs --upload-certs | grep -v "certificate key")

把输出的命令复制到新的master节点上执行,记得要加上--control-plane参数(表示加入控制平面),示例命令如下:

sudo kubeadm join my-load-balancer:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789 \
    --control-plane --certificate-key abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789

6. 验证HA配置

等新master节点加入后,检查集群状态:

kubectl get nodes
kubectl get pods -n kube-system

确保所有master节点状态为Ready,kube-system下的控制平面组件都正常运行。再验证LB是否生效:

kubectl cluster-info

输出应该显示Kubernetes control plane is running at https://my-load-balancer:6443

额外注意事项

  • 确保负载均衡器已正确配置:把6443端口转发到所有master节点的6443端口,并且健康检查正常
  • 如果集群使用了kube-proxy等组件,可执行kubectl rollout restart daemonset kube-proxy -n kube-system让组件同步新的控制平面地址
  • 备份的配置文件建议保留一周以上,确保集群稳定后再清理

内容的提问来源于stack exchange,提问作者Ralph

火山引擎 最新活动