腾讯会议,一款联合国都Pick的线上会议解决方案,提供完美会议品质和灵活协作空间,广泛应用在政府、医疗、教育、企业等各个行业。大家从文章8天扩容100万核,腾讯会议是如何做到的?都知道腾讯会议背后的计算资源已过百万核,如此体量的业务,如何通过云原生技术提升研发和运维效率,是一个非常有价值的课题。这里我将为大家揭秘腾讯自研上云容器平台TKEx在支持腾讯会议全量云原生化上云背后的技术。
TKEx平台是以腾讯云容器服务(Tencent Kubernetes Engine, TKE)为底座,服务于腾讯自研业务的容器平台。腾讯自研业务类型众多、规模超大,云原生上云面临的挑战可想而知。TKEx平台在腾讯自研业务上云的过程中沉淀的最佳实践和解决方案,我们将会在TKE中提供给客户。
腾讯会议业务特性
在Kubernetes中,我们习惯把应用分为无状态和有状态两类,有状态应用主要指实例标识、网络、存储的有状态。腾讯会议的一些服务有如下特性:
- 使用IPC共享内存,里面存放的有状态数据从MB到GB大小不等。
- 升级时IPC数据不能丢失;
- 升级时只能允许ms级的抖动,用户无感知;
- 部分服务最多的实例数过万,要求高效完成一次版本升级;
- 全球多地域部署,要求部署高效;
- 部分服务要求每个实例都分配EIP;
这对Kubernetes管理这种有状态服务提出了更高能力和性能要求。TKEx平台抽象出业务特性背后的产品需求,在灰度发布、多集群工作负载管理、计算资源管理运营、Node稳定性等方面进行了增强和优化,沉淀出了通用的音视频业务容器编排能力。
StatefulSetPlus强大的灰度发布能力
StatefulSetPlus是我们2018年研发并投入生产的首批Operator之一,核心特性包括:
- 兼容StatefulSet所有特性,比如按序滚动更新。
- 支持分批灰度更新和回滚,单批次内的Pods可并发更新、可串行更新。
- 支持各个批次手动待升级勾选Pods。
- 支持用户配置各个批次待升级Pods的比例进行灰度。
- 支持分批回滚和一键失败回滚。
- 发布过程可暂停。
- 支持单个StatefulSetPlus对象管理上万个Pods。
- 支持ConfigMap的分批灰度发布。
- 对接了TKE IPAMD,实现了Pod固定IP。
- 支持HPA和原地VPA。
- 升级过程中的扩容使用LastGoodVersion。
- 支持Node核心状态自检,Node异常时Pod能自动漂移。
- 支持容器原地升级。
- 支持升级失败Pods的容忍率控制,大规模升级过程中升级失败Pods占比小于x%时可继续升级。
这里主要介绍为腾讯会议上TKE新增的两个发布能力增强:大规模自动分批灰度发布和ConfigMap分批灰度发布。
支持单个StatefulSetPlus上万Pods的自动分批发布能力
TKEx平台在原来StatefulSetPlus手动分批发布能力基础上,这次又开发了自动分批发布的特性,解决像腾讯会议这种大体量业务灰度发布的痛点。用户只要在发布时配置各个批次更新副本的百分比,比如第一批40%,第二批60%。StatefulSetPlus-Operator会根据Readiness探针完成情况,自动进行下一批次的更新,其原理如下。
StatefulSetPlus核心Field说明如下:
- batchDeployConfig:
- batchNum:分几批升级
- batchAuto:是否自动分批发布,true表示自动分批发布
- batchIntervalMinutes:两次分批发布之间的间隔分钟数
- podsNumToUpdate:各批次发布的pod数量,如果不设置则将pod平均到每批次发布
StatefulSetPlus对发布过程进行了精细化的监控,提供staus.batchDeployStatus
查询发布详细状态,这使得通过CI Pipeline发布变得更显示和可控。
- batchDeployStatus:
- action:当前操作,
Next
表示进行下一批发布,WaitToConfirm
表示等待确认该批次发布是否成功,Completed
表示所有批次均已确认发布成功。 - batchDeadlineTime:本批次发布的Deadline,如果超过该时间,本批次的Pod仍然未Running & Ready,那么本批次发布失败&#
- action:当前操作,