最近更新时间:2024-09-10 16:07:38
2023年11月30日之前创建的KCE集群,coredns deployment的污点容忍策略,配置了“容忍一切污点”。如下:
tolerations:
- operator: Exists
引入该配置的目的,是为了解决客户给KCE集群中的节点打上自定义的污点,导致新建或者重建coredns pod无法调度的问题,但是,该配置会导致如下问题:
在coredns所在的节点不健康时(如挂掉或其他原因导致NotReady),coredns的pod不会发生漂移
手动删除coredns pod重建,新建的pod仍有可能调度到NotReady的节点上
KCE集群默认的coredns副本数为2,且coredns多个副本会调度到不同的节点上。在默认配置(即coredns副本数为2)的场景下,如果其中一个coredns pod所在的节点故障(另一个节点正常),会导致只有一个coredns pod提供服务,coredns服务的可用性降低,如果2个coredns所在的节点全部故障,会导致集群全部域名解析失败。
如果用户修改了coredns副本数为N,当一个coredns所在节点故障时,集群中coredns可用性降低1/N。当N个coredns所在节点全部故障时,导致集群全部域名解析请求失败。
修改coredns deployment的yaml,去掉"容忍一切污点"的配置(删除- operator: Exists这一行)
修改coredns deployment的yaml,去掉"容忍一切污点"的配置(删除- operator: Exists这一行)
增加对master节点的污点容忍(注意,如果master节点上还有其他污点,也需要增加相应的容忍,否则coredns pod无法调度):
- effect: NoSchedule
key: dedicated
operator: Equal
value: master
升级过程中,由于yaml发生变化,会导致coredns pod重建,可能会遇到五分钟内全集群范围内的解析超时或失败的情况。这是linux内核ipvs模块的缺陷导致,详见:https://github.com/torvalds/linux/commit/35dfb013149f74c2be1ff9c78f14e6a3cd1539d1
去掉“容忍一切污点”的配置以后:
在独立部署集群中,客户后续给master新增污点,需要同步修改coredns deployment的污点容忍,加入对新增污点的容忍,否则可能导致coredns节点故障时新的coredns pod无法调度
在托管集群中,客户后续给node新增污点,需要同步修改coredns deployment的污点容忍,加入对新增污点的容忍,否则可能导致coredns节点故障时新的coredns pod无法调度
增加coredns副本数,减轻coredns单个节点故障时,集群中域名解析失败的概率。参考:CoreDNS配置建议
纯净模式