在众多企业的容器化应用和实践中,弹性伸缩一直是个很重要的话题。受益于容器本身轻量级、快速启动的特性,容器化应用的规模部署变得愈发灵活弹性。
那么容器集群的运维者就会问到:我应该保持多大的节点规模来满足应用随时变化的资源需求?能否让集群所占用的底层资源也随着应用规模的变化而灵活缩放呢?
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和云磁盘,因此在开启该功能之前,请务必阅读相关文档,以避免缩容造成的业务数据损失。
在现有功能基础上,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中被合入了Kubernetes autoscaler开源库。
CA组件的整体架构如下图所示:
其中CA与百度云CCE相关的适配通过以下模块实现:
• CCE Manager:CCE Cluster-Autoscaler的中控模块,初始化各项配置,开启定时器缓存扩缩容相关信息
• ASG-Cache:缓存扩缩容各项配置
• CloudProvider:能够获得集群内所有节点的相关信息,用户配置的扩缩容相关信息
• NodeGroup:能够根据扩缩容的估算结果,安全的扩容集群或者缩容集群
• Cloud-SDK:对BCE中BCC、CCE的OpenAPI的封装,用于下单扩容集群、删除空闲节点、查询集群节点信息等
如果你也认为自动扩缩容的功能会为你的容器化架构带来帮助的话,请登录百度云CCE服务网站或关注百度云微信公众号了解更多。
免责声明:此文内容为第三方自媒体作者发布的观察或评论性文章,所有文字和图片版权归作者所有,且仅代表作者个人观点,与极客网无关。文章仅供读者参考,并请自行核实相关内容。投诉邮箱:editor@fromgeek.com。
免责声明:本网站内容主要来自原创、合作伙伴供稿和第三方自媒体作者投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。任何单位或个人认为本网站中的网页或链接内容可能涉嫌侵犯其知识产权或存在不实内容时,应及时向本网站提出书面权利通知或不实情况说明,并提供身份证明、权属证明及详细侵权或不实情况证明。本网站在收到上述法律文件后,将会依法尽快联系相关文章源头核实,沟通删除相关内容或断开相关链接。