晏子怡,腾讯云产品经理,目前负责TKE集群、网络及调度模块。
K8s 最优雅精妙的一个设计理念在于声明式 API 的运用,而 Deployment 又是其中的集大成者。
如果没有 Deployment ,我们需要管理上万的单独 Pod, 为每一个 Pod 设置合适的资源需求,容器镜像版本,Label,Taints 等属性。同时,我们还需要保证每一个业务对应的 Pod 数量在合适的值,来适应流量波动并达到负载均衡。而通过 Deployment 提供的 Pod 模板的能力, 我们可以编排 Pod:模板中的属性值代表我们的期望状态,Deployment 会自动维持管理的 Pod 在我们的期望状态,而这正是 K8s 的使用者真正关心的(我们并不关注从当前状态到理想状态是如何达成的)。
Deployment 提供了 Pod 模板的能力,那节点呢?是否我们也可以提供类似节点模板的能力让客户去管理他们成千上万的节点,无需一遍遍手动配置参数新建节点,反复封锁和驱逐来释放无用节点?基于声明式这一种云原生设计理念,TKE 推出了节点池,用户可以利用节点模板功能,统一管理节点,不需要一遍遍手动填写创建节点参数,也不需要人工计算可以容纳业务流量的节点数目。后续 TKE 会围绕节点池规划自动升级和自动修复功能,用户只需关注节点池内节点是否在期望 K8s 版本以及期望状态即可。
为了丰富声明式的使用方式,节点池也会规划通过 CRD 来管理节点池,服务偏好 K8s API 的客户。您也可以把节点池和其他云资源统一编排,TKE 与腾讯云 Terraform 团队合作,支持基于 IaC (Infrastructure-as-code) 的理念来编排节点池,该功能即将于 12月底上线。
有 TKE 重点客户反馈:由于业务增长,客户每天都需要扩百余台机器,通过节点池只需一键调整数量即可完成扩容,体验比单节点模式好太多(需要填很多参数,并且创建后不好管理)。此外,在内测阶段,云原生团队在与客户的交流过程中,总结了这几类典型问题及解决方案:
场景 | 如何用节点池解决问题 |
---|---|
集群中某些节点想使用自定义镜像,某些节点想使用公共镜像 | 通过节点池来管理,并设置不同的节点池维度操作系统 |
业务具有波峰波谷,需要频繁扩缩容节点 | 设置弹性扩缩容,按需使用资源,全自动运维 |
业务对成本非常敏感 | 创建包年包月节点池/竞价实例节点池,并设置全局扩容算法为 least-waste |
希望调度工作负载到特定机器上,比如 IO 敏感型业务调度到高 IO 型机器上 | 创建特定机型配置的节点池,同时设置 Label 或者 Taints, 为特定工作负载指定对应的亲和性规则 / 容忍,保证工作负载调度到期望节点池 |
工作负载对于特定机型没有要求,对扩容效率较敏感 | 创建特定规格的节点池,同时配置多机型/多子网,加强高可用 |
如果您集群中创建了伸缩组,节点池全量之后仍然可以继续使用这些伸缩组。但请注意,节点池全量后 TKE 不会对旧版伸缩组进行后续功能维护及迭代,请您尽快使用 TKE 提供的接口(API/控制台)将伸缩组转换成节点池(节点池覆盖伸缩组的所有功能)。
为了解决以上用户的痛点问题,节点池提供了以下的功能特性。
您可以为一个节点池配置集群 VPC 下的多个子网,达到跨可用区容灾的效果。另外您可为节点池配置多机型,降低由资源售罄导致扩容失败的风险。
节点池自动扩缩容依赖 Cluster Autoscaler 实现, 可与 HPA 无缝联动,实现从应用扩缩容到集群扩缩容的平滑过渡。
节点池提供两种扩缩容模式供您按需选择。除了默认的释放模式(扩容时创建节点,缩容时释放节点),节点池还支持与 CVM 关机不收费对接的关机模式(扩容时优先开机已关机节点,缩容时优先关机空闲节点),可以达到秒级热启动的效果,实现更高的扩缩容效率。
考虑到节点池日常运维的场景,我们也在可观测性方面提供了保障。您可追踪节点池关联的扩缩容活动 (活动相关的触发条件、时间、涉及实例、成功/失败原因),同时您还可以通过事件持久化能力查看 Cluster Autoscaler 相关的集群级别扩缩容记录。
更多细节请查看查看节点池伸缩记录:https://cloud.tencent.com/document/product/457/48538
通过查看伸缩记录,您可在短时间内定位并及时解决问题(例如因资源售罄导致的扩容失败,可以通过跨可用区部署 / 配置多机型来解决)。
节点池支持多种计费模式 (按量计费 / 包年包月 / 竞价实例),您可按需选择,节约成本。
后续节点池会规划围绕竞价实例的增强功能,助力您实现降本增效。
节点池提供多种扩缩容以及节点管理相关的灵活配置,您可以根据业务性质以及安全考虑自行搭配使用。
集群弹性扩容流程如下:
集群弹性缩容流程如下:
节点池底层依赖腾讯云的弹性伸缩产品,我们建议通过节点池控制台/API 来管理节点池,在弹性伸缩控制台操作导致的后果 TKE 无法保障,具体注意事项请参见如下表格:
参考资料
[1]
节点池概述: https://cloud.tencent.com/document/product/457/43719
[2]
创建节点池: https://cloud.tencent.com/document/product/457/43735
[3]
查看节点池: https://cloud.tencent.com/document/product/457/43736
[4]
调整节点池: https://cloud.tencent.com/document/product/457/43737
[5]
删除节点池: https://cloud.tencent.com/document/product/457/43738
[6]
扩缩容相关Q&A: https://cloud.tencent.com/document/product/457/32316
[7]
Cluster Autoscaler FAQ: https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md