插件高可用部署
应用场景
CCE提供了多种插件扩展集群云原生能力,涵盖了容器调度与弹性、云原生可观测、容器网络、容器存储、容器安全等方向,插件通过Helm模板方式部署,将插件中的工作负载部署至集群的工作节点。
随着插件使用的普及化,业务对插件的稳定性、可靠性保证已成为基本诉求。目前CCE服务默认的插件部署策略是工作节点之间配置了强反亲和,AZ之间配置了弱反亲和的调度策略。本文提供了CCE插件调度策略的优化实践,业务可以根据自身可靠性的要求优化插件的部署策略。
高可靠部署方案
插件一般由无状态工作负载、守护进程等组成,守护进程默认会在所有节点上部署,而无状态工作负载在高可用的情况下会设置多实例、设置AZ亲和策略以及指定节点调度来保证插件应用的高可靠性。
实例级别的高可用方案:
- 增加实例数量:采用多实例部署方式可以有效避免单点故障造成的整个服务的不可用。
节点级别的高可用方案:
以域名解析CoreDNS插件为例,默认部署2个实例,多可用区部署为优先模式,其调度策略为节点强反亲和、AZ弱反亲和,因此集群需要2个节点才能保证所有实例正常运行,且优先将插件的Deployment实例调度到不同可用区的节点上。
以下介绍进一步提升插件SLA的一种实践方案。
增加实例数量
通过调整CoreDNS的Pod副本数量,保证高性能和高可靠性。
- 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“插件中心”,在右侧找到CoreDNS域名解析插件,单击“编辑”。
- 增加副本数。
图1 修改实例数量
- 单击“安装”。
独占节点部署
调整CoreDNS的节点亲和策略,建议将CoreDNS独占Node节点,以避免业务应用与CoreDNS发生资源抢占。
以自定义亲和策略为例:
- 登录CCE控制台,进入集群,单击左侧导航栏的“节点管理”。
- 切换至“节点”页签,选择CoreDNS需要独占的节点,单击“标签与污点管理”。
添加以下标签:
- 标签键:node-role.kubernetes.io/coredns
- 标签值:true
添加以下污点:
- 污点键:node-role.kubernetes.io/coredns
- 污点值:true
- 污点效果:NoSchedule
图2 添加标签与污点
- 单击左侧导航栏的“插件中心”,选择“CoreDNS域名解析”插件,单击编辑。
- 在“节点亲和”中,选择“自定义亲和策略”,并添加上述节点标签。
在“容忍策略”中添加对上述污点的容忍。
图3 添加容忍策略
- 单击“确定”。
多可用区部署
默认的插件调度策略可以容忍单节点的故障,当业务对SLA有更高诉求,您可以在节点池界面创建不同的可用区规格节点,并且设置插件调度策略的多可用区部署为强制模式。
- 登录CCE控制台,单击集群名称进入集群。
- 创建不同可用区的节点。
重复以下步骤,选择创建不同可用区的节点。您也可以通过创建多个节点池,节点池中关联不同的可用区规格,扩容不同节点池的实例数来为集群创建不同AZ的节点。
- 在集群控制台左侧导航栏中选择“节点管理”,切换至“节点”页签并单击右上角的“创建节点”。
- 在节点配置步骤中,选择节点可用区。
图4 创建节点
- 根据提示填写其他必要参数后,单击“创建”。
- 在左侧导航栏中选择“插件中心”,在右侧找到CoreDNS域名解析插件,单击“编辑”。
- 设置插件的多可用区部署策略为“强制模式”,单击“安装”。
图5 更新多可用区部署模式为强制模式
- 在“工作负载”页签查看CoreDNS容器,切换至“kube-system”命名空间查看coredns实例的分布。
图6 查看CoreDNS容器的部署分布
- 插件的无状态工作负载已经分配到了两个可用区的节点上。
图7 CoreDNS容器分布