Kubernetes Autoscaler增加对百度云容器引擎CCE的支持

在众多企业的容器化应用和实践中,弹性伸缩一直是个很重要的话题。受益于容器本身轻量级、快速启动的特性,容器化应用的规模部署变得愈发灵活弹性。

 

那么容器集群的运维者就会问到:我应该保持多大的节点规模来满足应用随时变化的资源需求?能否让集群所占用的底层资源也随着应用规模的变化而灵活缩放呢? 

 

Cluster-Autoscaler(后文中将简称为CA) 就是Kubernetes中用于解决以上疑问的组件,它帮助用户实现了容器集群规模的动态伸缩,能够自动根据部署的应用所请求的资源量来维持集群大小,当集群资源过剩时自动释放部分资源,当资源不足时完成资源的申请并将其加入集群。CA一方面提高了底层资源的利用率,为企业节约成本。另一方面也大大降低了人力运维集群的负担。

 

百度云获得社区官方支持

 

CA组件虽然是Kubernetes社区的开源组件,但并不意味着将它部署在集群内就可以正常开始工作。因为CA的工作涉及到集群节点信息的查询、节点的创建和释放等, CA需要与底层资源平台提供的接口进行交互,而这些接口通常是由不同的云厂商提供的,因此将CA应用到不同云平台往往需要大量的改造工作。

 

在此之前,Kubernetes社区官方只支持部分云平台,本次加入对百度云容器引擎CCE的支持,使百度云成为国内第二个得到Kubernetes Autoscaler官方支持的云厂商。这意味着用户在使用百度云容器引擎CCE时,可以无缝体验CA组件带来的灵活和弹性,无需关心底层资源的差异性。

 

 

除了弹性伸缩以外,百度云容器团队一直以来都在积极参与开源社区的重要项目,从Kubernetes v0.8版本推出之际就开始进行生产级别的实践,是国内Kubernetes容器技术的最早践行者之一。

 

2018年百度云继续与开源社区保持良好的合作,为Kubernetes主库提交总共25个PullRequest,合入14个,主要集中在scheduler、auto-scaling等模块。同时成为Kubernetes子项目kube-batchd的Maintainer,并在LinuxCon和KubeCon上对paddle-k8s-operator和kube-batchd项目进行主题演讲。

 

百度云今年在开源领域发布了两个云提供商:cloud-provider-baiducloud与cluster-api-provider-baiducloud,为整合入Kubernetes主库进行准备,同时百度云CCE已经在2018年年初正式通过Kubernetes公有云统一化认证。

 

 

CCE自动扩缩容功能

 

基于Kubernetes CA组件,CCE为用户提供了便捷的自动扩缩容功能,使得该组件的使用更加便捷。用户可以在集群详情中找到自动扩缩容的开关,如下图所示:

 

 

如果需要使用自动扩缩容的能力只需要将开关打开,然后设置扩缩容的节点数范围即可。打开之后,CCE的自动扩缩容会启用集群中的CA组件,并依靠CA组件在资源不足或者过剩时自动创建和释放集群中的BCC节点。

 

 

所有打开了自动扩缩容功能的集群,CCE都将在集群名称右下角进行标识,以便用户区分。需要注意的是自动扩缩容可能会触发节点释放的操作,将会同步释放节点关联的后付费公网IP和云磁盘,因此在开启该功能之前,请务必阅读相关文档,以避免缩容造成的业务数据损失。

 

文档地址:

https://cloud.baidu.com/doc/CCE/GettingStarted/2D.5C.E8.87.AA.E5.8A.A8.E6.89.A9.E7.BC.A9.E5.AE.B9.html#.E3.17.37.D2.B6.9B.32.48.D0.5D.5F.C6.CD.2D.A0.B4

 

在现有功能基础上,CCE还会继续对自动扩缩容能力进行扩展,未来将支持更加丰富的扩缩容策略,用户可以灵活地自定义扩容时使用的节点配置,并在缩容时对可能有持久化存储的资源进行保护。

 

实现原理与技术细节

 

在开启CCE的自动扩缩容功能后,当pod由于资源不足而调度失败,即有pod一直处于Pending状态时,CA会采取扩容操作;当node的资源利用率较低时,且此node上存在的pod都能被重新调度到其他node上运行时,CA会采取缩容操作。如果你的集群同时也启用了HPA(Horizontal Pod Autoscaling,是k8s中pod的水平自动扩展),那么CA也能与HPA协同工作,例如:当CPU负载增加,HPA扩容pod,如果此pod因为资源不足无法被调度,则此时CA会扩容节点。当CPU负载减小,HPA减少pod,CA发现有节点资源利用率低甚至已经是空时,CA就会删除此节点。

 

Kubernetes的CA组件由以下几个模块组成:

 

  • CA autoscaler:核心模块,负责整体扩缩容功能

  • Estimator:负责评估计算扩容节点

  • Simulator:负责模拟调度,计算缩容节点

  • CA Cloud-Provider:与云交互进行节点的增删操作。

 

其中CA Cloud-Provider部分每个云厂商的实现都不一样,基于百度云的实现在这笔PR(https://github.com/kubernetes/autoscaler/pull/1536)中被合入了Kubernetes autoscaler开源库。

 

 

CA组件的整体架构如下图所示:

 

 

其中CA与百度云CCE相关的适配通过以下模块实现:

 

  • CCE Manager:CCE Cluster-Autoscaler的中控模块,初始化各项配置,开启定时器缓存扩缩容相关信息

  • ASG-Cache:缓存扩缩容各项配置

  • CloudProvider:能够获得集群内所有节点的相关信息,用户配置的扩缩容相关信息

  • NodeGroup:能够根据扩缩容的估算结果,安全的扩容集群或者缩容集群

  • Cloud-SDK:对BCE中BCC、CCE的OpenAPI的封装,用于下单扩容集群、删除空闲节点、查询集群节点信息等

收藏 评论(0)
分享到: