作者:庄宇
本文根据 2023 云栖大会现场分享实录整理
2 年前的云栖大会,我们发布分布式云容器平台 ACK One,随着 2 年的发展,很高兴看到 ACK One 在混合云,分布式云领域帮助到越来越多的客户,今天给大家汇报下 ACK One 2年来的发展,如何帮助客户解决分布式领域多云多集群管理的挑战。
首先我们会介绍下分布式云容器平台 ACK One 的背景与架构,之后详细介绍 ACK One 各个功能与应对的业务场景,包括注册集群、边缘集群、多集群舰队、全托管 Argo 工作流集群。
Part 1:分布式云容器平台 ACK One,解决企业多云多集群管理挑战
我看下 ACK One 这个产品出现的背景,Gartner 报告中预测到 2025 年,50% 的大型企业将通过分布式云实现业务转型,在 Forrester 报告中,未来 89% 的企业至少使用两个云,74% 的企业至少使用三个云。在 ACK 的用户中,我们也看到同样的趋势,越来越多的用户选择多云多集群架构,来应对业务发展带来的挑战。
可以说,分布式云已经成为新常态。同时 Gartner 报告中指出,安全,运维复杂性,财务复杂性是多云多集群架构的主要挑战。
为了应对分布式云带来的挑战,我们构建了分布式云容器平台 ACK One。
ACK One 提供多云多集群管理解决方案。ACK One 可以统一接入不同形态\不同位置的 K8s 集群,例如:公共云 ACK 集群,边缘集群,本地数据中心中的集群,和第三方公共云集群。接入后,ACK One 提供云上云下一致的运维体验包括:监控日志、成本分析、安全加固、备份容灾、微服务治理等。极氪汽车使用 ACK One 统一管理多个 K8s 集群,提升了安全水位和业务连续性,减少 25% 的资源用量,运维效率提高80%。
为了解决本地数据中心弹性不足,无法应对业务高峰的问题,ACK One 支持云上弹性,将云上无限算力接入到本地数据中心 K8s 集群中,并实现云上云下混合调度。智联招聘使用 ACK One 云上弹性能力,5 分钟实现业务数万核扩容,应对招聘季业务高峰。
同时,ACK One 支持多集群舰队管理,提供一个控制面管理多个 K8s 集群,提供统一应用分发、南北流量管理、统一运维管理等能力。
Part 2:ACK One 注册集群:接入和管理不同形态K8s集群
下图展示的是 ACK One 注册集群的架构,我们可以将三方公共云中的 K8s 集群和本地数据中心的自建 K8s 集群接入到 ACK One 注册集群中。
首先,您要有一个 K8s 集群,之后在 K8s 集群安装注册集群的 agent pod,Agent pod 会反向连接 ACK One 注册集群服务端并完成管控通道的建立,之后,ACK One 注册集群管控可以下发 K8s API 请求,并通过 Agent pod 的中转到自建 K8s 集群的 API Server 中。从而通过 ACK One 注册集群,可以获得云上云下一致的运维体验。
具体来说包括: ASM 服务网格,微服务引擎 MSE,Prometheus 监控,ARMS 应用性能监控,SLS 日志,安全,FinOps。以上所有云上 ACK 集群具备的能力,都可以通过注册集群在三方公共云 K8s 集群和自建 K8s 集群中落地实现。
另外,为了应对本地数据中心资源不足,无法应对业务流量增长的问题,ACK One 注册集群支持云上弹性,可以将云上的 ECS/ECI 计算资源,包括 CPU 和 GPU 资源,加入到自建 K8s 集群中,由自建 K8s 调度云上资源,应对业务流量增长。
可以说,您依然完全控制自建 K8s 集群,同时,获得了云上 ACK 集群才具有的强大扩展能力。
通过 ACK One 注册集群,可以让阿里云优势的软件和服务实现 Anywhere,不再仅服务于阿里云容器服务 ACK 集群,也可以扩展到本地数据中心自建 K8s 集群,第三方公共云 K8s 集群中。包括:ECS/ECI 等 IaaS 资源,可观测服务,服务治理,FinOps 成本管理,安全等。使用注册集群,您依然完全控制自建的 K8s 集群,但同时获得了阿里云云产品带来的扩展能力。
场景 1: 云上弹性,通过云上弹性,我们可以将云上的计算资源加入到本地数据中自建 K8s 集群中,应对业务流量的增长。同时,注册集群调度器支持对不同计算资源设置不同的调度优先级,例如:可以优先调度本地数据中心中的节点,当本地数据中心资源用尽后,调度使用云上的按量计费节点池 ECS,或者使用云上 Virtual Node 弹性容器实例 ECI 处理业务流量。在充分使用本地计算资源后,再使用云上资源,节省成本。
场景 2: 可观测性。通过注册集群,可以将 ACK 集群的可观测能力,包括监控/日志/事件/告警,下沉到自建 K8s 集成中,一套可观测方案,同时用于容器服务 ACK 集群,自建 K8s 集群,三方公共云 K8s 集群,实现云上云下一致的运维体验。
容器服务 ACK 集群具有强大的安全管理能力,包括配置巡检、运行时安全检查和策略管理。通过注册集群,可以将 ACK 集群的安全能力,下沉到自建 K8s 集群和三方公共云 K8s 集群中。通过一个安全大盘,查看管理所有集群的安全风险,提高安全水位。
在成本治理方面,容器服务 ACK 提供完整的方案,支持以集群、命名空间、节点池、应用多角度的成本洞察,基于洞察结果实施成本的治理,包括浪费发现、成本预测、预算告警等。通过注册集群,可以使用 ACK 集群的成本管理能力,分析和治理自建 K8s 集群和三方公共云 K8s 集群,降低成本。
场景 5: 应用与数据的备份恢复,通过注册集群,可以使用云上数据备份与恢复能力,备份自建 K8s 集群和第三方公共云 K8s 集群中的应用与数据,并在 ACK 集群中恢复 ,实现跨地域的应用与数据容灾。
场景 6: 混合云跨云数据访问。为了应对存算分离架构带来数据访问接口类型多和访问速度慢的问题,通过注册集群和 ACK Fluid 组件,可以通过标准 PV/PVC 接口实现云上计算实例访问云下自建存储资源,也可以通过 Fluid 分布式缓存加速云下计算资源访问云上 OSS 对象存储,缩短 GPU 等高成本计算资源的等待时间,提高了运行速度,降低计算成本。
阿里云提供强大的微服务治理能力,包括微服务引擎 MSE 和服务网格 ASM,通过注册集群的控制面连接,云上 MSE 和 ASM 可以管理三方公共云和本地数据中心 K8s 集群中的微服务。实现一套微服务方案,管理所有集群的微服务,降低运维复杂度,提高了稳定性。
Part 3:ACK Edge 边缘集群:接入和管理边缘计算资源
边缘集群 - 接入和管理边缘计算资源下面我们介绍一下边缘集群,边缘集群可以接入和管理边缘的计算资源,也就是机器和各种终端设备。您可以在云上创建边缘集群,并将边缘的机器和设备远程接入云上集群,实现通过标准 K8s 集群的方式调度使用这些机器和设备,从而省去在边缘自建集群的成本。
下面我们看下边缘集群的架构,上半部分是边缘集群 ACK Edge 的控制面,在阿里云上,复用 ACK Pro 的控制面(APIServer/ETCD 等),保证稳定性,集成开源 OpenYurt 提供边缘节点自治能力,最后融合了阿里云的日志监控安全能力。下半部分是边缘部分,可以接入管理数据中心或者机房中的机器,包括 CDN、IDC、工厂、园区、楼宇等。也可以接入各种终端设备,包括车载、交通设备等。
淘麦郎使用边缘集群 ACK Edge,提供验票服务,人均验票时间缩短 70%,成功服务了北京冬奥会和杭州亚运会等大型赛事;影石使用边缘集群 ACK Edge,管理工厂中的计算设备,从云端直接下发指令到达工厂,极大提高了生产效率。
OpenYurt 是业界首个非侵入的云边协同的云原生平台,在中间的架构图中可以看到,master 组件部署在云端,可以方便的管理分散的边缘机器和设备。图中蓝色框是原生 K8s 组件,橙色框中表示的是 OpenYurt 组件。OpenYurt 没有对 K8s 做任何修改,保证 OpenYurt 很容易集成与被集成 。OpenYurt 的核心能力主要 4 个方面,多地域应用管理,边缘自治,跨地域网络通信,以及云原生设备管理。
Part 4:ACK One 多集群舰队:统一管理多个 K8s 集群
之前讲到的注册集群和边缘集群解决了各种形态位置的集群和边缘计算资源接入到云上的问题。
下面我们介绍,当我们有多个 K8s 集群的时候,如何统一管理,就要 ACK One 多集群舰队。
首先我们看下多集群舰队的架构,多集群舰队集成使用开源 Open Cluster Management,统一管理多个 K8s 集群,可以是公共云的 ACK 集群,本地数据中心 K8s 集群。多集群舰队对用户提供统一的控制面,提供应用分发,流量控制,安全策略,全局监控等多集群管理能力 。
我们来看多集群的应用分发,多集群舰队托管了开源 ArgoCD 提供 GitOps 应用分发能力,开发团队可以通过在 Git 中定义应用部署 yaml 文件,实现应用的多集群部署。
使用 GitOps 具有强可靠性。Git 作为部署的唯一来源,提供了版本控制、回滚和审计能力。同时开发人员也不需要任何 K8s 集群的权限, 安全性高。最后,GitOps提供持续部署的能力,保证集群中应用的状态和 Git 仓库中定义的状态一致,避免误操作,保证稳定性。
ACK One 多集群 GitOps 在此基础上,提供了原生 ArgoCD 的 CLI 和 UI 体验,并提供专属的 ArgoCD 控制台域名,集成阿里云账号 SSO,支持多用户权限等。
基于 ACK One GitOps 实现多集群 CICD 流程。在流程图中,我们首先向业务代码仓库提交代码修改,之后由 ACR EE 或者全托管 Argo 工作流集群构建并推送镜像到 ACR EE,ACK One GtiOps 检查ACR EE中镜像版本的变更,并回写到应用部署仓库,也就是修改部署 yaml,ACK One GtiOps 自动向 Dev 集群部署新的镜像版本,在验证通过后,在维护窗口可以手工向生产集群部署。实现了从 CI 到多集群部署的完整 CICD 流程。
下面我们来看多集群南北流量管理,为了保证应用的容灾,我们一般会在不同可用区的 2 个集群部署相同的应用,并在前端部署负载均衡,传统的负载均衡一般会采用智能 DNS 的方案或者 4 层 LoadBalancer 方案,但 DNS 方案的问题在于客户端缓存,导致在问题发生时,切换不及时,造成业务损失。4 层 LoadBalancer 无法实现基于 7 层的路由转发,灵活性差。
为了解决这个问题,我们推出多集群网关,提供全局 Ingress,实现七层的负载均衡,多集群网关本身也支持跨可用区的高可用。因为是七层的网关,我们可以灵活的定制路由,实现基于权重、http header、自动 fallback 的路由策略。通过多集群网关,我们可以实现应用同城多可用区多活容灾。在应用完成多集群部署后,我们还需要对应用的状态进行监控,ACK One 舰队管理提供多集群全局监控功能,汇总多个集群的监控指标,提供多集群视角的全局监控大盘。在截图中可以看到,一个大盘可以查看集群 1 和集群 2 的监控指标。
Part 5:全托管 Argo 工作流集群全新发布
最后一部分,我来介绍下全托管 Argo 工作流集群。
随着科技的发展,仿真计算、科学计算等离线作业在企业中的应用越来越多,在云原生领域,如何编排以及高效、低成本运行这些离线作业,是必须回答的问题。
ACK One 推出全托管跨地域 Argo 工作流集群,托管 CNCF 毕业项目 Argo Workflow,使用弹性容器实例 ECI,以无服务器方式在多可用区/多地域调度运行工作流,支持大规模工作流运行的同时降低计算成本。
为了应对 AI 等数据密集性业务和存算分离架构,Argo 工作流集群支持分布式数据缓存,加速文件访问,减少运行时间,降低成本。
此外:全托管 Argo 工作流集群支持:
- 资源预测 – 通过负载感知自动调整资源规格
- 规模化计算 – 控制面进行了性能优化支持千级别并发工作流,数万 Pod 并行计算任务
- 事件驱动 - 支持 Git、阿里云 MNS、OSS 等事件源触发工作流自动运行
相比开源自建 Argo 工作流系统,利用 Serverless 技术,全托管 Argo 工作流集群可实现 30% 的资源成本节省;利用分布式数据缓存,数据读性能提高 15 倍;通过控制面优化和云上极致弹性,最大并行计算规模提升 10 倍。
泛生子使用全托管 Argo 工作流集群在 12 小时内完成处理数千例样本的处理,速度提升 50%,成本下降 30%。
看下分布式 Argo 工作流集群的架构,它托管开源 Argo workflow,提供开源原生的 CLI、UI、API、SDK 等接口,保证现有开源自建 Argo 工作流系统可无缝迁移。同时,可以使用工作流集群的 API SDK 接口,包装工作流集群,构建自己的工作流提交系统,以适应具体的业务场景。我们很多仿真和科学计算客户就是将工作流集群作为后端引擎使用。
工作流集群托管 Argo event 项目,支持事件驱动编程模型,支持 Git、阿里云 OSS、MNS、EventBridge 等事件源触发工作流自动运行,自动完成 CI、数据处理等离线任务。
分布式 Argo 工作流集群使用 Serverless 方式运行工作流,无需运维 worker 节点,利用云上极致算力资源,可实现同时运行数万 Pod 的大规模工作流, 同时提供监控日志等开箱即用的运维体验。
最后,我们简单总结下,分布式云面对的场景多种多样,挑战很多,为此,ACK One 提供注册集群能力,可以将非ACK集群接入ACK One,从而实现云上云下集群统一管理。ACK One 提供边缘集群,实现云上集群管理边缘机器与设备,同时实现边缘自治。
多集群舰队提供多集群 GitOps 和全局 Ingress 实现应用的同城多活容灾。全托管 Argo 工作流集群,实现工作流的编排,以 Serverless 方式运行工作流,降低成本,应对持续集成、科学计算、仿真计算、数据处理等场景。
大家可以根据具体业务场景选择相应的能力,最终实现简单的跨云协同,让业务管理更加高效。