字节跳动基于KubeAdmiral的多云分布式云原生实践之路 李汉波 云原生工程师 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 请替换您的照片 李汉波 云原生工程师 专注于云原生容器,多云领域 开源多云容器编排项目KubeAdmiral与Karmada社区Maintainer负责火山引擎分布式云原生系统的研发 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 01业务需求驱动分布式云架构建设 目录 字节跳动基于KubeAdmiral的 02集群联邦技术实践 从集群联邦到分布式云原生多云 03多集群管理实践 04分布式云原生的下一阶段 01业务需求驱动分布式云架构建设 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 分布式云原生行业现状 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 为什么需要分布式云原生统一管理 集 群规模及稳定 性 •单一集群规模受限 •单一大集群故障风险大 •单一云厂商锁定, 容灾难 0 1 多 云多集群运维成本高 0 2 •多云环境异构,云厂商资源 管理差异 •多云集群管理入口分散,缺乏统一运维方案 •多集群孤岛,无法统一调度,集群利用率低 •自建调度逻辑,成本高 多 云容灾困 难 •跨云迁移困难 •多云流量如何调度 •集群故障迁移困难 0 3 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 业务需求驱动分布式云架构建设 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 分布式云原生整体架构方案 公有云 私有云 边缘云 集群故障驱逐 数据备份恢复与迁移 多集群配额管控 跨集群调度策略 全域流量治理 多集群应用分发 多集群统一纳管(注册集群/联邦集群) 自动故障迁移 多集群统一观测 分布式云原生统一管理 02 字节跳动基于KubeAdmiral的集群联邦技术实践 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 字节跳动云原生发展历程 现有 500+ 2016 生产集群,基础设施深度云 原生化 TCE启动建设 TCE为内部应用提供快捷高效的应用部署方案 2017 微服务架构 完成核心业务微服务迁移,并在TCE之上构建服务框架、Mesh、监控告警等基础设施 2019 “推广搜”云原生 把“推广搜”的物理机服务与在线服务进行全面融合,实现统一容器化调度 2020 离在线调度融合、存储云原生 融合资源管理形态,简化供应链选型;优化运维效率,开启数据库、缓存等存储系统的云原生化改造 2021 云原生联邦演进 资源多云到应用多云,实现全场景应用编排和资源管理的标准化和统一化KubeFed—>KubeAdmiral 联邦集群管理节点数 210,000+ 最大集群节点数上万,实现大规模集 群落地 拥有 100,000+ 在线微服务,敏捷化构建能力持续增强 平均每日变更数高达 30,000 次,云原生为前线业务提供稳定性 保障 离线任务数 140M+ 通过云原生混部,大规模节省企业 资源成本 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 以KubeFed(Federationv2)为基础的集群联邦 KubeFedV2面临的问题 接入难度高 调度能力弱 状态聚合能力差 业务连续性 由于联邦层暴露的是“联邦化”的对象,而不是Kubernetes原生对象,上层服务往往需要针对联邦集群做特殊适配 只支持RSP静态副本调度,导致成员集群水位不均,对其他调度策略只能在程序中特殊处理,扩展性差 只支持把资源的status字段采集上来,无法自定义采集字段,也没有对状态进行多云多集群语义的转换与汇聚 扩缩容过程中,可能产生Rebalance,会影响业务稳定性;同时,故障迁移能力较弱 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 超大规模集群联邦KubeAdmiral https://github.com/kubewharf/kubeadmiral •兼容Kubernetes的标准API以及自定义CRD •调度器和调度算法可扩展,支持丰富的调度分发策略 •支持差异化覆写策略 •支持接管用户单集群已有资源,无损迁移 •提供状态采集框架,自定义状态采集字段 •更强大的故障自动迁移能力,涵盖集群故障迁移,应用故障迁移,污点迁移等场景 •支持联邦HPA,可以低成本接管单集群HPA(原生/自定义) GOPS全球运维大会暨XOps技术创新峰会2024·北京站 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 降低接入难度:支持原生API和CRD 引入FederatedController,负责将原生的资源转换为FederatedObject (sourceObj) Deployment (FederatedObj) Deployment FederatedController GOPS全球运维大会暨XOps技术创新峰会2024·北京站 增强状态聚合能力:自定义采集字段,汇聚status 通过引入StatusAggregator,负责将子集群资源的状态聚合到原生资源,针对不同的资源可以添加聚合Plugin (sourceObj)Deployment StatusAggregator FederatedController SyncController MemberClusterSourceObj SourceObj SourceObj SourceObj SourceObj FederatedObjec t PropogationPolicy GlobalScheduler GOPS全球运维大会暨XOps技术创新峰会2024·北京站 PropogationPolicy 提高调度扩展性:GlobalScheduler(1) (sourceObj)Deployment (FederatedObj) Deployment GlobalScheduler FederatedController 参考KubernetesSchedulingFramework,建设面向多样化FederatedObject的调度器:GlobalScheduler GOPS全球运维大会暨XOps技术创新峰会2024·北京站 提高调度扩展性:GlobalScheduler(2) FederatedObject Replica Selector Score Filter GlobalScheduler的Framework和Plugin: •Filter:根据子集群的状态、亲和性、资源、是否支持CRD等等过滤不符合条件的MemberCluster •Score:对符合条件的MembersCluster打分,例如资源、亲和性等 •Selector:最多分发到多少个集群 •Replica:面向类似Deployment提供的副本数调度 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 提高调度扩展性:GlobalScheduler(3) GlobalScheduler支持丰富的调度策略模板,用户可在应用中指定所需要的调度策略模板,也支持用户使用自定义的扩展调度器 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 提高调度扩展性:GlobalScheduler(4) GlobalScheduler支持通过http协议与外部插件交互,用户可以自行编写并部署定制化的调度逻辑: •SchedulerPluginWebhookConfiguration:配置schedulerplugin访问地址 •SchedulingProfile:配置schedulerplugin启用顺序 •PropagationPolicy:指定使用的schedulingprofile GOPS全球运维大会暨XOps技术创新峰会2024·北京站 动态调度:基于集群水位 KubeFedV2问题: •副本调度策略RSP只能为每个member集群设置静态权重 •静态权重很难做到集群部署率一致,在个别集群部署率很高时,很容易产生pending 基于集群水位的动态调度 •进行权重计算时,同时考虑集群的资源总量allocatable和当前可用资源量available 效果 •所有member集群的部署率都维持在95%以上,部分大规模member集群部署率可以达到98% 重调度:避免业务中断 KubeFedV2问题: 30个实例分布在AB2个member集群,集群权重1:1,现在用户增加一个集群C,同时缩容到15个实例: •用户预期:停止15个实例 •按权重调度:停止20个实例,启动5个实例,瞬时可用实例5+5+0(启动之前),低于15 集群ABC 实例数15150 集群ABC 缩容:30->15 瞬时实例数550 实例数555 30个实例分布在AB2个member集群,集群权重1:1,现在用户增加一个集群C,同时扩容到36个实例: •用户预期:启动6个实例 •按权重调度:启动12个实例,停止6个实例,瞬时可用实例12+12+0(启动之前),低于30 集群ABC 集群ABC 实例数15150 瞬时实例数12120 扩容:30->36 实例数121212 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 重调度:避免业务中断 当前方案:重调度策略增加avoidDisruption=true avoidDisruption在扩缩容时特殊处理,以避免正常运行的pod因为权重的变化被迁移 •先按权重算每个集群desired副本数,后结合当前副本数current计算最终分配副本数 •false:直接用desired作为最终结果,可能会引起集群间的迁移,但最终分布完全遵循权重 •true:避免反向的pod移动(如果是扩容,则没有集群会缩容,反之亦然),但最终分布不完全遵循权重 •副本数不变时,直接使用current(不进行重分布) 集群 A B C desired 5 5 5 final 7 8 0 集群 A B C desired 12 12 12 final 15 15 6 •缩容时,只缩容current>desired的集群 缩容:30->15 •扩容时,只扩容current<desired的集群 扩容:30->36 集群ABC 实例数 current 15150 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 字节内场实践-流量协调、自动容灾 字节内部容器间的调用全量切入到servicemesh体系,由其提供流量的代理和稳定性的保证 超时重试 服务限流 服务降级 负载均衡 流量切换 下游容器因为各种原因 产生性能抖动,框架自动重试 容器配置QPS上限,请求量过高时自动拒绝,实现进程自我保护 下游容器错误率升高后,自动减少请求量,必要时直接丢弃请求 根据下游错误率和延迟指标,自动实现多容器间的负载均衡 集群或机房整体不可用时,自动将整体流量切换到正常集群或机房 流量调度实现异常容器识别和规避 集群联邦实现多集群联合,突破单集群规模上限,在集群间实现容器的自动化迁移 入口统一 故障切换 资源均衡 业务无感知接入,仍然看到单集群视角,优化使用体验 集群或者机房故障时,联邦自动实现全量容器的整体迁移 自动在多个集群实现容器平衡调度,减少单集群故障影响面 集群联邦实现异常容器迁移和重建 03 从集群联邦到分布式云原生多云多集群管理实践 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 GOPS全球运维大会暨XOps技术创新峰会20