【阅读原文】戳:从单集群到多集群的快速无损转型:ACK One 多集群应用分发
概述
在云原生时代,随着业务的发展(如业务遍布全球、已达单一集群承载上限)、单地域资源不足(如 GPU),容灾需求的迫切、安全合规的要求等原因,越来越多的用户采用多 Kubernetes 集群来承载业务。分布式云容器平台 ACK One [1] 的多集群应用分发 [2] 可以按多样的策略(静态权重、动态资源调度、Gang 调度等),分发舰队中的 Kubernetes 资源到多集群中,并具有多地域多集群智能资源调度、重调度、故障迁移等能力。可以很容易地将您已有的单集群 CD 系统和 ACK One 的多集群应用分发 [2] 结合,最小化改造成本,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
云效 [3] 是阿里云提供的一站式 DevOps 平台,提供涵盖软件研发全生命周期的研发工具链和研发管理服务,可以通过流水线 Flow 实现将应用部署到 ACK 集群中。本文以云效为例,结合云效自身的 CD 能力 [4] 和 ACK One 的多集群应用分发 [2],说明如何快速从单集群 CD 系统转变为多集群 CD 系统。
ACK One 多集群应用分发
分布式云容器平台 ACK One [1] 是阿里云面向混合云、多集群、分布式计算、容灾等场景推出的企业级分布式云容器平台,提供多集群统一管理能力。通过 ACK One 注册集群 [5] 将您的其他公共云厂商和 IDC K8s 集群接入到阿里云容器服务 ACK 控制台,并由舰队对这些注册集群以及云上的 ACK、ACK Edge 集群进行多集群统一的应用分发、流量管理、可观测运维管理、安全管理等。
ACK One 多集群应用分发 [6] 是阿里云面向多集群和混合云场景提供的跨多集群统一管理应用资源的能力。当单一 ACK 集群无法满足 workload 的资源需求,比如单地域无法满足您的推理服务的 GPU 资源需求,可以通过 ACK One 多集群应用分发的资源调度能力,跨地域多集群弹性来寻找 GPU 资源,以满足推理服务的资源需求;当您需要同时向多个集群发布应用,或者考虑通过多地域多集群部署提升应用可靠性,也可以使用该能力来实现。该能力具有以下主要分发和调度能力:
1. 多地域多集群智能资源调度:跨地域跨集群寻找资源(多集群存量 Nodes 资源和弹性 ECS/Serverless 资源),最大限度避免缺货,提升资源利用率,提升业务效率。
2. 多集群 Gang 调度:通过预占或动态资源检测,实现 workload 的多集群 Gang 调度,确保任务下发到子集群后能够调度,提升任务调度效率。
3. 多种分发策略:复制,静态权重,动态权重等。
4. 重调度和故障迁移:Workload 在子集群中失败后,Global Scheduler 将回收该作业,并对其进行重调度或故障迁移,调度到其他符合条件且资源充足的集群。
具体流程如下:
1. 舰队上提交应用资源和分发策略 PropagationPolicy。
2. 舰队中的 Global Scheduler,根据分发策略,选择合适的集群,分发应用资源到多个 ACK 集群中。
3. 若应用运行失败,Global Scheduler 将回收作业,并对其进行重调度或故障迁移,调度到其他符合条件且资源充足的集群。
基于 ACK One 与云效构建多集群 CD
这里以云效 CD 为例,展示一个单集群 CD 系统,通过 ACK One 多集群应用分发改造成多集群 CD 系统,需要进行的操作。
结合 ACK One 多集群应用分发和云效,从单集群 CD,可以快速变成一个多集群 CD:
1. 无需修改原先发布的应用资源(如 Deployment)YAML;
2. 只需在原应用基础上增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy,如涉及);
3. 原单集群中的应用不受影响,不会发生服务中断或重启。
架构如上图所示,主要流程如下:
1. 创建 ACK One 舰队,并将多个集群关联到舰队;
2. 将分发策略(PropagationPolicy)、差异化策略(OverridePolicy)提交到 Codeup 代码仓库应用目录中,不改变原来的 YAML;
a. 如下图所示,下图为 ACK One demo仓库 [7];
b. 如果需要使用多集群资源调度相关能力,可以在分发策略(PropagationPolicy)中指定。
3. 修改已存在的单集群 CD 云效流水线,配置将应用和策略部署到 ACK One Fleet(舰队)中;
Kubernetes 发布 - Kubectl 发布中的集群配置文件,从单集群的 kubeconfig 改成舰队的 kubeconfig,集群 ID 可以填入舰队 ID。
4. 点击运行流水线后,应用资源和策略都会被部署到 ACK One 舰队,之后按照策略将应用分发到多集群中。同时接管单集群中已部署的该应用,不会引起原单集群中的 workload 发生服务中断或重启(如果 workload YAML 没有变更)。
运行云效流水线后,控制台展示如下,之后可去舰队查看资源是否部署,并且查看子集群分发状态。
总结
ACK One 多集群应用分发聚焦于提供更好的多集群统一应用管理能力,降低多集群应用管理成本,让您聚焦于业务本身,提供多地域多集群智能资源调度能力,最大限度供应充足资源,提升您的业务效率。同时,它也可以很容易地和您已有的单集群 CD 系统结合起来,您仅需做如下 2 点改动,即可将单集群 CD 快速无损地改造成多集群 CD 系统,以获得上述强大能力:
1. 在 Git/Codeup 仓库中的应用目录中,增加分发策略(PropagationPolicy)、差异化策略(OverridePolicy) YAML;
2. 修改单集群 kubeconfig 为舰队 kubeconfig。
既无需改变原先应用资源 YAML,也不会引起原集群中 Pod 重启。
更多内容可详见基于 ACK One 与云效快速构建多集群 CD [8] 和 ACK One 多集群应用分发 [7]。
欢迎加入 ACK One 客户交流钉钉群,与我们一同交流。(钉钉群号:35688562)
相关链接:
[1] 分布式云容器平台 ACK One
[2] 多集群应用分发
[3] 云效
https://help.aliyun.com/zh/yunxiao/product-overview/what-is-cloud-effect
[4] 云效自身的 CD 能力
https://help.aliyun.com/zh/yunxiao/user-guide/kubernetes-deployment/
[5] ACK One 注册集群
[6] ACK One 多集群应用分发
[7] ACK One demo 仓库
https://github.com/AliyunContainerService/gitops-demo/tree/main/manifests/directory/mc-app
[8] 基于 ACK One 与云效快速构建多集群 CD
我们是阿里巴巴云计算和大数据技术幕后的核心技术输出者。
获取关于我们的更多信息~