Kubernetes作为容器编排领域的领导者,其默认调度器在处理小规模集群时表现出色。然而,随着业务量的增长和种类的多样化,默认调度策略的局限性逐渐显现。YY直播,作为一家大型直播平台,面临着类似的挑战。为了应对这些挑战,YY直播开发了一套容器云调度优化方案,本文将详细介绍这一方案。
YY直播容器云介绍: YY直播拥有自研的容器云管理平台,管理着分布在不同机房的10+自建集群。这些集群包含2000+节点和6w+Pod。为了实现Pod IP的三层互通和支持固定内外网IP,YY直播开发了自研CNI插件。此外,YY直播还采用了Victoria Metrics进行监控,以及阿里Logtail + Loki存储业务日志。
服务资源智能推荐: 为了解决业务方不清楚应该申请多少资源的问题,YY直播采用了VPA的滑动窗口算法。该算法通过监控数据,获取Workload过去一周的CPU和Memory历史用量,并根据这些数据推荐资源。算法考虑了数据的时效性,较新的数据采样点拥有更高的权重。CPU推荐值基于用户设置的目标百分位值计算,而Memory推荐值基于历史数据的最大值。
基于实际负载调度: Kubernetes的原生调度器在处理大规模集群时可能不够灵活。为了增强调度器的可扩展性,YY直播采用了调度框架,并在其中设置了多个扩展点。通过这些扩展点,YY直播实现了基于实际负载的调度。调度过程包括预选策略和优选策略,这些策略通过Prometheus获取的监控数据来筛选和打分节点。
运行中二次调度: 为了应对业务突发导致单节点负载过高的情况,YY直播实现了运行中二次调度。这一功能通过Deschedulse实现,它基于实际负载进行二次调度,驱逐指定的实例。Deschedulse的操作流程包括定时获取节点实际负载,判断实例启动时间,通过Annotations标识哪些实例可被驱逐,以及判断Ready实例数。
弹性调度: YY直播的弹性调度依赖于Virturl Kubelet和Open Kruise。Virturl Kubelet实现了秒级弹性扩容,而Open Kruise则提供了WorkloadSpread功能,将Workload的Pod按一定规则分布到不同类型的Node节点上,实现多区域部署和弹性部署。此外,YY直播还优先部署到自建机房,资源不足时部署到VK,以优化计算资源成本。
效果展示: 通过实施上述调度优化策略,YY直播在容器云平台上取得了显著的效果。优化后的资源使用率得到了提升,低空载率降低,集群调度更加均衡,有效避免了业务突发导致的服务中断。
结论: 容器云调度优化对于应对大规模、多样化业务的挑战至关重要。YY直播通过实施服务资源智能推荐、基于实际负载调度、运行中二次调度和弹性调度等策略,成功提升了容器云平台的效率和稳定性。随着技术的不断进步,未来容器云调度将面临更多的挑战和机遇。