前言
云原生,被认为是释放云原生红利的最短路径,而以kubernetes 已成为云原生技术领域的事实标准。基于kubernetes构建的容器应用平台和过去基于虚机平台最大的不同,就是kubernetes屏蔽了底层环境的复杂和不一致,帮助研发通过应用的视角管理业务。 如何统一异构资源,高效地管理资源,利用云上弹性能力应对峰值流量与节省成本,每位kubernetes 运维人员都将面临的挑战。
ACK 团队推出节点池功能,通过节点池视角分组管理,帮助用户更加高效地管理Kubernetes 集群节点。
目录
节点池系列将分为几部分介绍ACK Kubernetes 节点池功能和特性
- 通过ACK 节点池高效管理Kubernetes节点——功能介绍
- 通过ACK 节点池高效管理Kubernetes节点——多场景支持:通过节点池管理边缘,混合云集群节点
- 通过ACK 节点池高效管理Kubernetes节点——降低成本:自动弹性伸缩与抢占实例
- 通过ACK 节点池高效管理Kubernetes节点——托管节点池:无人工介入的节点自愈恢复托管节点池——节点自愈恢复
- 通过ACK 节点池高效管理Kubernetes节点——托管节点池:设置维护窗口与自动升级
什么是节点池
节点池,顾名思义,通过池话的方式,一个节点池代表一组具有相同特性和配置的节点。 用户可以通过节点池为节点分组管理,批量操作,动态伸缩。
面临挑战
Kubernetes 本质是一个分布式操作系统,分布式环境本身充满了不确定性,在云上运维一个大规模kubernetes集群节点,会面临以下挑战:
- 管理成本:当Kubernetes 集群规模扩张,节点数随之增长,虽然有terraform 之类的工具可以帮助我们自动化管理,但是当面临成千上万的节点,点对点操作会给运维人员带来极大的运维和管理成本。
- 节点配置复杂度:随着越来越多种类业务逐步运行在kubernetes ,针对不同类型业务,节点的配置要求也不尽相同,一个节点涉及资源配置(节点规模,交换机,资源组等)和软件配置(kubelet 参数,自定义配置脚本,运行时等)有20多项,每一次扩容都面对复杂的表单,既不稳定也不高效。
- 运维效率:得利于容器的标准化环境和云上按需付费,近似无限的资源池相结合,通过弹性能力我们能够为业务按需扩容和缩容集群节点,降本成效。而弹性能力是否能够充分发挥作用,弹性效率是决定因素。
- 扩容成功率:当弹性成为常态,节点的运维操作(扩容,缩容,排水,升级)是否足够稳定,随着规模增加,任何单次操作的不稳定都会随着节点规模成指数增长。
设计目标
节点分组化管理运维,提高管理效率
节点管理的挑战,本质上是我们如何在有限范围内,应对被管理对象的多样性(节点配置不同)和数量(节点规模增长)变化带来的管理成本。 多样性的增长会给管理者带来复杂度的提升,而数量增长会加剧复杂度墒增,并影响管理者命令的执行效率。
“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决”,而节点池就是在集群和节点之间的抽象中间层。
通过创建多个节点池来描述集群内异构节点的多样性,在节点池分布中,可以清晰看到集群中有哪些类型的节点以及数量分布。管理员无需关心具体节点实例的配置,只需关注集群中有限的节点池,通过节点池的数量调整实现节点的增减。进行基本节点操作(扩缩容,升级,编辑,删除)时,基于节点池进行操作下发比直接下发节点更加方便。
除了基本操作,管理员可以根据业务需求划分为不同节点池,给不同节点池中的节点打上label和taint,部署应用时通过nodeSelector和toleration 实现应用指定节点池部署。
节点配置模板化,降低配置复杂度
随着云上容器化业务逐渐复杂,为了支撑好多种业务场景,节点配置也越来越多,在ACK中扩容一个节点包含20多个配置项。 由于节点池抽象描述了一组同构节点的配置。
节点池配置:
- 资源配置
- 付费类型
- 交换机
- 实例规格
- 数据盘
- 操作系统
- 登陆方式,密码 / 密钥对
- ...
- 软件配置
- 容器运行时
- Labels
- Taints
- 云监控插件安装
- 自定义kubelet 参数
- ....
将节点涉及的资源层和软件层配置通过节点池的元数据模板化,在创建节点池时填写相关的配置项,后续扩容节点时只需指定对应的节点池并输入扩容数量即可,无需重复填写对应的节点配置内容。
节点伸缩能力优化
此外相比过去直接操作节点,节点池对节点的伸缩操作做了许多优化。
- 集成云产品服务,ACK将节点伸缩创建集成了弹性伸缩服务(ESS)。
- 支持选择多种规格,当某规格库存不足创建失败时可自动重试其他规格。
- 支持多可用区,实现多可用区均衡分布
- 优化管控测的批量查询和操作效率,一个完整节点伸缩所耗时间压缩到3分钟。极速模式
- 配置模板化,减少了伸缩过程中对配置项逐一校验的时间开销
总结
ACK通过引入节点池,作为集群与节点之间的抽象,提供分组管理和运维的能力,通过节点池管理节点有以下优势:
- 分组管理,面对大规模集群节点时提高管理效率
- 配置模板化,无需每次扩容时重复填写配置
- 支持批量管理labels和taint,应用指定分组调度
- 集成ess 优化扩缩容的运行效率和成功率。
同时,除了云上ESS以外,通过节点池能够扩展更多场景的节点类型,例如云上自动弹性,边缘节点,混合云线下弹线上等等,会在接下来的系列中详细介绍。