阿里云上万个 Kubernetes 集群大规模管理实践

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
应用实时监控服务-应用监控,每月50GB免费额度
注册配置 MSE Nacos/ZooKeeper,182元/月
简介: 阿里云容器服务从2015年上线后,一路伴随并支撑双十一发展。在2019年的双十一中,容器服务ACK除了支撑集团内部核心系统容器化上云和阿里云的云产品本身,也将阿里多年的大规模容器技术以产品化的能力输出给众多围绕双十一的生态公司和ISV公司。通过支撑来自全球各行各业的容器云,容器服务已经沉淀了支持单元化架构、全球化架构、柔性架构的云原生应用托管中台能力,管理了超过1W个以上的容器集群。本文会介绍下容器服务ACK在海量k8s集群管理上的实践经验。

原文作者:[](https://developer.aliyun.com/profile/3sx6y45vmkaq2)KB小秘书
原文链接:https://developer.aliyun.com/article/738572?spm=a2c6h.12873581.0.0.3a2b115ex69Iht&groupCode=cloudnative更多云原生技术资讯可关注阿里巴巴云原生技术圈
引言
什么是海量k8s集群管理。大家可能之前看过一些分享,介绍了阿里巴巴或蚂蚁金服内部如何管理单集群1W节点的最佳实践,管理大规模的节点是一个很有意思的挑战。不过这里讲的海量k8s集群管理,会侧重讲如何管理超过1W个以上不同规格的k8s集群。跟据我们和一些同行的沟通,往往一个企业内部只要管理几个到几十个k8s集群,那么我们为什么需要考虑管理如此庞大数量的k8s集群?首先,容器服务ACK是阿里云上的云产品,提供了Kubernetes as a Service的能力,面向全球客户,目前已经在全球20个地域支持。其次,得益于云原生时代的发展,越来越多的企业拥抱k8s,K8s已经逐渐成为云原生时代的基础设施,成为platform of platform。
31.png

32.png

首先我们一起来看下托管这些k8s集群的痛点:
1.集群种类不同:有标准的、无服务器的、AI的、裸金属的、边缘、Windows等k8s集群。不同种类的集群参数、组件和托管要求不一样,并且需要支撑更多面向垂直场景的k8s。
2.集群大小不一:每个集群规模大小不一,从几个节点到上万个节点,从几个service到几千个service等。需要能够支撑每年持续几倍集群数量的增长。
3.集群安全合规:分布在不同的地域和环境的k8s集群,需要遵循不同的合规性要求。比如欧洲的k8s集群需要遵循欧盟的GDPR法案,在中国的金融业和政务云需要有额外的等级保护等要求。
4.集群持续演进:需要能够持续的支持k8s的新版本新特性演进。。

设计目标:

1.支持单元化的分档管理、容量规划和水位管理
2.支持全球化的部署、发布、容灾和可观测性
3.支持柔性架构的可插拔、可定制、积木式的持续演进能力

1.支持单元化的分档管理、容量规划和水位管理

单元化:
一般讲到单元化,大家都会联想到单机房容量不够或二地三中心灾备等场景。那单元化和k8s管理有什么关系?对我们来说,一个地域(比如杭州)可能会管理几千个k8s,需要统一维护这些k8s的集群生命周期管理。作为一个k8s专业团队,一个朴素的想法就是通过多个k8s元集群来管理这些guest K8s master。而一个k8s元集群的边界就是一个单元。
曾经我们经常听说某某机房光纤被挖断,某某机房电力故障而导致服务中断,容器服务ACK在设计之初就支持了同城多活的架构形态,任何一个用户k8s集群的master组件都会自动地分散在多个机房,采用主主模式运行,不会因单机房问题而影响集群稳定性;另外一个层面,同时要保证master组件间的通信稳定性,容器服务ACK在打散master时调度策略上也会尽量保证master组件间通信延迟在毫秒级。
分档化:
大家都知道,k8s集群的master组件的负载主要与k8s集群的节点规模、worker侧的controller或workload等需要与kube-apiserver交互的组件数量和调用频率息息相关,对于上万个k8s集群,每个用户k8s集群的规模和业务形态都千差万别,我们无法用一套标准配置来去管理所有的用户k8s集群,同时从成本经济角度考虑,我们提供了一种更加灵活、更加智能的托管能力。考虑到不同资源类型会对master产生不同的负载压力,因此我们需要为每类资源设置不同的因子,最终可归纳出一个计算范式,通过此范式可计算出每个用户k8s集群master所适应的档位;同时我们也会基于已构建的k8s统一监控平台实时指标来不断地优化和调整这些因素值和范式,从而可实现智能平滑换挡的能力。
33.png

容量规划: 接下来我们看下k8s元集群的容量模型,单个元集群到底能托管多少个用户k8s集群的master? 首先要确认容器网络规划。这里我们选择了阿里云自研的高性能容器网络Terway, 一方面需要通过弹性网卡ENI打通用户VPC和托管master的网络,另一方面提供了高性能和丰富的安全策略。接下来我们需要结合VPC内的ip资源,做网段的规划,分别提供给node、pod和service。最后,我们会结合统计规律,结合成本、密度、性能、资源配额、档位配比等多种因素的综合考量,设计每个元集群单元中部署的不同档位的guest k8s的个数,并预留40%的水位。
34.png

35.png

容器服务已经在全球20个地域支持,我们提供了完全自动化的部署、发布、容灾和可观测性能力。这里重点介绍下全球化跨数据中心的可观测。

全球跨数据中心的可观测性

全球化布局的大型集群的可观测性,对于k8s集群的日常保障至关重要。如何在纷繁复杂的网络环境下高效、合理、安全、可扩展的采集各个数据中心中目标集群的实时状态指标,是可观测性设计的关键与核心。我们需要兼顾区域化数据中心、单元化集群范围内可观测性数据的收集,以及全局视图的可观测性和可视化。基于这种设计理念和客观需求,全球化可观测性必须使用多级联合方式,也就是边缘层的可观测性实现下沉到需要观测的集群内部,中间层的可观测性用于在若干区域内实现监控数据的汇聚,中心层可观测性进行汇聚、形成全局化视图以及告警。样设计的好处在于可以灵活的在每一级别层内进行扩展以及调整,适合于不断增长的集群规模,相应的其他级别只需调整参数,层次结构清晰;网络结构简单,可以实现内网数据穿透到公网并汇聚。
针对该全球化布局的大型集群的监控系统设计,对于保障集群的高效运转至关重要,我们的设计理念是在全球范围内将各个数据中心的数据实时收集并聚合,实现全局视图查看和数据可视化,以及故障定位、告警通知。进入云原生时代,Prometheus作为CNCF中第二个毕业的项目,天生适用于容器场景,Prometheus 与 Kubernetes 结合一起,实现服务发现和对动态调度服务的监控,在各种监控方案中具有很大的优势,实际上已经成为容器监控方案的标准,所以我们也选择了Prometheus作为方案的基础。
针对每个集群,需要采集的主要指标类别包括:

  • OS指标,例如节点资源(CPU, 内存,磁盘等)水位以及网络吞吐;
  • 元集群以及用户集群K8s master指标,例如kube-apiserver, kube-controller-manager, kube-scheduler等指标;
  • K8s组件(kubernetes-state-metrics,cadvisor)采集的关于K8s集群状态;
  • etcd指标,例如etcd写磁盘时间,DB size,Peer之间吞吐量等等。
    当全局数据聚合后,AlertManager对接中心Prometheus,驱动各种不同的告警通知行为,例如钉钉、邮件、短信等方式。

监控告警架构

为了合理的将监控压力负担分到到多个层次的Prometheus并实现全局聚合,我们使用了联邦Federation的功能。在联邦集群中,每个数据中心部署单独的Prometheus,用于采集当前数据中心监控数据,并由一个中心的Prometheus负责聚合多个数据中心的监控数据。基于Federation的功能,我们设计的全球监控架构图如下,包括监控体系、告警体系和展示体系三部分。
监控体系按照从元集群监控向中心监控汇聚的角度,呈现为树形结构,可以分为三层:

边缘Prometheus

为了有效监控元集群K8s和用户集群K8s的指标、避免网络配置的复杂性,将Prometheus下沉到每个元集群内,

级联Prometheus

级联Prometheus的作用在于汇聚多个区域的监控数据。级联Prometheus存在于每个大区域,例如中国区,欧洲美洲区,亚洲区。每个大区域内包含若干个具体的区域,例如北京,上海,东京等。随着每个大区域内集群规模的增长,大区域可以拆分成多个新的大区域,并始终维持每个大区域内有一个级联Prometheus,通过这种策略可以实现灵活的架构扩展和演进。

中心Prometheus

中心Prometheus用于连接所有的级联Prometheus,实现最终的数据聚合、全局视图和告警。为提高可靠性,中心Prometheus使用双活架构,也就是在不同可用区布置两个Prometheus中心节点,都连接相同的下一级Prometheus。
36.png

图2-1 基于Prometheus Federation的全球多级别监控架构

优化策略

监控数据流量与API server流量分离
API server的代理功能可以使得K8s集群外通过API server访问集群内的Pod、Node或者Service。
37.png

常用的透传K8s集群内Prometheus指标到集群外的方式是通过API server代理功能,优点是可以重用API server的6443端口对外开放数据,管理简便;缺点也明显,增加了API server的负载压力。如果使用API Server代理模式,考虑到客户集群以及节点都会随着售卖而不断扩大,对API server的压力也越来越大并增加了潜在的风险。对此,针对边缘Prometheus增加了LoadBalancer类型的service,监控流量完全走LoadBalancer,实现流量分离。即便监控的对象持续增加,也保证了API server不会因此增加Proxy功能的开销。
收集指定Metric
在中心Prometheus只收集需要使用的指标,一定不能全量抓取,否则会造成网络传输压力过大丢失数据。
Label管理
Label用于在级联Prometheus上标记region和元集群,所以在中心Prometheus汇聚是可以定位到元集群的颗粒度。
同时,尽量减少不必要的label,实现数据节省。

3.支持柔性架构的可插拔、可定制、积木式的持续演进能力

前面两部分简要描述了如何管理海量k8s集群的一些思考,然而光做到全球化、单元化的管理还远远不够。k8s能够成功,包含了声明式的定义、高度活跃的社区、良好的架构抽象等因素,k8s已经成为云原生时代的Linux。我们必须要考虑k8s版本的持续迭代和CVE漏洞的修复,必须要考虑k8s相关组件的持续更新,无论是CSI、CNI、Device Plugin还是Scheduler Plugin等等。为此我们提供了完整的集群和组件的持续升级、灰度、暂停等功能。
38.png

2019年6月,阿里巴巴将内部的云原生应用自动化引擎OpenKruise开源,这里我们重点介绍下其中的BroadcastJob功能,他非常适用于每台worker机器上的组件进行升级,或者对每台机器上的节点进行检测。(Broadcast Job 会在集群中每个node上面跑一个pod直至结束。类似于社区的DaemonSet, 区别在于DaemonSet始终保持一个pod长服务在每个node上跑,而BroadcastJob中最终这个pod会结束。)
39.png

此外,考虑不同k8s使用场景,我们提供了多种k8s的cluster profile,可以帮助用户提供更方便的集群选择。我们会结合大量集群的实践,持续提供更多更好的集群模板。
40.png

总结
随着云计算的发展,以Kubernetes为基础的云原生技术持续推动行业进行数字化转型。容器服务ACK提供了安全稳定、高性能的Kubernetes托管服务已经成为云上运行Kubernetes的最佳载体。在本次双11,容器服务 ACK 在各个场景为双十一作出贡献,支撑了阿里巴巴内部核心系统容器化上云,支撑了阿里云微服务引擎MSE、视频云、CDN等云产品,也支撑了双11 的生态公司和 ISV 公司,包括聚石塔电商云、菜鸟物流云、东南亚的支付系统等等。容器服务ACK会持续前行,持续提供更高更好的云原生容器网络、存储、调度和弹性能力,端到端的全链路安全能力,serverless 和 servicemesh 等能力。对于有兴趣的开发者,可以前往阿里云控制台 ,创建一个 Kubernetes 集群来体验。对于容器生态的合作伙伴,也欢迎加入阿里云的容器应用市场,和我们一起共创云原生时代。

阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术圈。”

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
5月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
175 9
|
5月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
23天前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
183 2
|
7月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
641 33
|
6月前
|
存储 负载均衡 测试技术
ACK Gateway with Inference Extension:优化多机分布式大模型推理服务实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with Inference Extension组件,在Kubernetes环境中为多机分布式部署的LLM推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
7月前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
369 19
|
7月前
|
人工智能 分布式计算 调度
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
|
7月前
|
存储 人工智能 Kubernetes
ACK Gateway with AI Extension:面向Kubernetes大模型推理的智能路由实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with AI Extension组件,在Kubernetes环境中为大语言模型(LLM)推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
7月前
|
存储 人工智能 物联网
ACK Gateway with AI Extension:大模型推理的模型灰度实践
本文介绍了如何使用 ACK Gateway with AI Extension 组件在云原生环境中实现大语言模型(LLM)推理服务的灰度发布和流量分发。该组件专为 LLM 推理场景设计,支持四层/七层流量路由,并提供基于模型服务器负载感知的智能负载均衡能力。通过自定义资源(CRD),如 InferencePool 和 InferenceModel,可以灵活配置推理服务的流量策略,包括模型灰度发布和流量镜像。
|
7月前
|
安全 持续交付 云计算
课时5:阿里云容器服务:最原生的集成Docker和云服务
阿里云容器服务以服务化形式构建容器基础设施,大幅提升开发效率,简化应用部署流程。通过Docker容器和DevOps工具(如Jenkins),实现自动化部署与迭代,优化企业内部复杂部署问题。该服务支持GPU调度、混合云架构无缝迁移,并与阿里云产品体系无缝集成,提供安全防护、网络负载均衡等多重功能支持。凭借微服务架构,帮助企业突破业务瓶颈,提高资源利用率,轻松应对海量流量。
242 0
课时5:阿里云容器服务:最原生的集成Docker和云服务