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

多主Kubernetes集群另类高可用方案的瓶颈、弊端及潜在问题问询

多主Kubernetes集群另类高可用方案的瓶颈、弊端及潜在问题问询

这个思路确实是现有限制下的一个权宜之计,但从Kubernetes集群长期稳定性和运维角度来看,存在不少容易被忽略的瓶颈、弊端和潜在bug,我帮你逐一拆解:

一、证书与身份验证的隐性隐患

kubeadm初始化集群时,会基于kubernetes.company.internal这个控制平面端点生成核心组件的证书,证书的SAN(主题备用名称)里只会包含该域名和初始master的IP。当你把其他节点的/etc/hosts改成指向自身IP后,这些节点上的kube-apiserver使用的证书其实并不包含自身节点的IP。

虽然你测试时组件通信正常(大概率是因为kubelet等组件通过域名访问apiserver,证书里包含该域名所以验证通过),但后续如果出现跨节点组件调用(比如某个节点的kube-controller-manager需要访问其他节点的apiserver)、或者需要调整集群配置时,极大概率会触发证书验证失败的问题,导致组件崩溃或无法正常通信。

二、故障转移的不完整性

你提到只移除了除初始master外其他节点的污点,这意味着初始master无法调度业务负载。当任意一个可调度的控制节点(Node-2/Node-3)故障时,其上面的业务负载无法自动调度到初始master上——因为污点存在,Kubernetes不会将Pod调度到带污点的节点。

虽然你说所有节点都有足够资源承接故障节点的负载,但这种手动设置污点的方式,把故障转移变成了需要人工介入的操作,完全失去了HA模式自动容错的意义,一旦运维响应不及时,就会导致业务中断。

三、配置维护的脆弱性

所有节点的/etc/hosts都是手动修改的,没有任何集中化的配置管理机制:

  • 一旦节点重启、或者有人误操作修改了/etc/hosts(比如改回初始master的IP),该节点上的组件会无法正常连接到自身的apiserver(或者当初始master故障时直接失去连接);
  • 后续如果有任何节点配置变更,都需要手动同步所有节点的/etc/hosts,运维成本高,且极易出现人为失误。

四、外部访问的单点风险

如果后续有外部客户端(比如运维的kubectl、CI/CD工具)需要访问集群,他们必须在本地/etc/hosts里把kubernetes.company.internal指向某个节点的IP。一旦该节点故障,外部客户端就会彻底失去集群访问能力,只能手动修改hosts切换到其他节点——这完全没有实现外部访问的高可用,本质还是单点依赖。

五、控制平面通信的一致性风险

每个节点把kubernetes.company.internal解析到自身IP,意味着控制平面组件(kube-apiserver、kube-controller-manager等)只会和本地的apiserver通信,而不会主动跨节点访问其他apiserver。

虽然当前etcd集群是正常的分布式状态,但如果某个节点的apiserver出现异常(比如进程卡死但etcd还正常),其他节点的组件无法感知到这个异常,也无法自动切换到其他健康的apiserver,可能导致该节点上的业务负载出现通信异常。

总结

这个方案在短期内、小范围测试场景下可能能正常运行,但从生产环境的稳定性、可维护性角度来看,存在太多隐性风险,不建议长期使用。如果客户坚持拒绝标准HA方案,或许可以尝试用DNS轮询(把kubernetes.company.internal解析到三个节点IP)的方式替代/etc/hosts,至少能解决部分单点和配置维护问题,但依然无法解决证书和故障转移的核心问题。

备注:内容来源于stack exchange,提问作者Zekeriya Akgül

火山引擎 最新活动