【阅读原文】戳:ACK One舰队管理:企业级多集群管理解决方案
K8s多集群发展概述
随着企业业务发展,使用K8s多集群的必要性逐步凸显:
• 容灾、多活、高可用、低延迟:在多地域、多可用区部署业务,故障后迁移流量,提升业务可用性;在多个集群中部署业务分摊流量;多地域部署,就近访问降低延迟。
• 多云、混合云:云上统一管理IDC集群,大促等流量突发时使用云上弹性资源;跨多个云厂商,统一管理、避免厂商绑定。
• 业务和故障隔离:相比于基于命名空间的多租架构,使用多集群隔离不同属性业务,具有更好的隔离性和性能(如使用多集群划分dev、staging、production环境),同时也缩小了故障影响范围。
• 安全合规、单K8s集群节点和Pod有上限等。
针对以上多集群用例,诸多多集群或舰队管理方案应运而生,致力于高效、统一地管理多集群。多集群管理方案的发展,始自Kubernetes 1.5、1.6版本时,Kubernetes社区提出的KubeFed[1]项目。但 Federation v1由于API的扩展性差、管理复杂和成熟度不足等问题,已被社区归档,也并未被广泛使用。之后Federation v2做了大量改进设计,采用CRD机制扩展API,也被较为广泛认可和使用,但最终仍因一些设计缺陷无法被更为广泛地采用:
不兼容Kubernetes原生API,使用一套新的Fedrated API大幅增加使用者的学习成本。
缺乏扩展性,无法通过其僵化本质进行扩展,满足不同场景用例。
如今开源社区被广泛采用的多集群管理方案主要有Open Cluster Management(OCM)[2]、Karmada[3],同时各云厂商也都相继推出自己的多集群/舰队管理方案,如ACK One舰队管理[4]。
ACK One舰队统一管理多个K8s集群
分布式云容器平台ACK One[5]是阿里云面向混合云、多集群、分布式计算、容灾等场景推出的企业级分布式云容器平台。通过ACK One 注册集群[6]将您的其他公共云厂商和IDC K8s集群接入到阿里云容器服务ACK控制台,并由ACK One舰队对这些注册集群以及云上的ACK、ACK Edge集群进行统一管理,实现多集群统一的应用分发,流量管理,运维管理,安全管理等。
ACK One舰队管理是基于开源社区的Open Cluster Management(OCM)构建的统一管理多集群的解决方案。舰队实例由ACK托管,可帮您省去大量的运维工作,从而专注于业务开发。
ACK One舰队包含以下核心能力:
1. ACK One GitOps[7]:托管ArgoCD实现的多集群应用的持续部署。
2. 多集群网关[8]:多集群Ingress,统一管理多集群的南北向流量,实现跨可用区高可用、标签路由等。
3. 多集群Service[9]:实现K8s社区标准的多集群服务API[10],跨集群服务发现。
4. 全局监控[11]:Prometheus全局聚合实例,统一多集群监控视图。
5. 服务网格:集成ASM,管理多集群服务间的东西向流量。
6. 统一的权限管理:统一管理RAM用户或角色的多集群的RBAC权限。
7. 多集群作业调度与分发[12]:支持Spark、TansorFlw和K8s Job/CronJob的优先级队列和多租调度。
ACK One GitOps
CNCF于2023年底发布的一项评估GitOps使用趋势的微观调查结果[13],其数据显示GitOps已经成为大多数开发者实现快速、一致、安全交付的首要选择。
ACK One GitOps基于CNCF毕业项目Argo CD构建,提供了面向多云、多集群、混合云的多集群应用GitOps持续交付能力。通过全托管Argo CD[14],集成ACK One的多集群、阿里云的RAM SSO等能力,为您提供开箱即用的ArgoCD能力,和完整、安全的多集群应用GitOps CD体验,快速、一致、安全地实现混合云、多集群下的应用持续部署。
1. 开发者通过ArgoCD UI/CLI/Go SDK创建 Application或者ApplicationSet,部署应用。
2. 开发者更新新镜像到镜像仓库,Image Updater检测到镜像更新后,将新tag更新到Git仓库的yaml中。
3. ArgoCD定时同步Git仓库的应用状态到云上、云下集群(GitOps中Secret管理基于KMS实现)。
4. 应用同步过程中状态变化实时钉钉通知。
ACK One GitOps具有如下优势:
• 托管开源ArgoCD,开箱即用,免运维,提供ArgoCD原生CLI和UI体验。
• 专属ArgoCD控制台域名,集成阿里云RAM用户/角色SSO登录,支持ArgoCD多租权限管理。
• 混合云、多集群分发,ACK One关联子集群自动加入ArgoCD,成为应用分发GitOps的目标集群。
• 支持ArgoCD ApplicationSet控制台,提升多集群应用分发体验。
• 更安全地发布多集群应用:支持GitOps中的 Secret管理,和ServiceAccount级别权限访问子集群。
客户案例 1:
多团队协同的混合云多集群应用的持续部署
当前有多个ACK One客户使用GitOps来构建跨多团队协同的、混合云多集群的应用持续部署,ACK One舰队管理混合云云上、云下数十个集群,并使用 GitOps实现数千应用的快速部署。ACK One会自动将关联子集群加入ArgoCD,成为应用分发的目标集群,简化了多集群应用分发流程。
GitOps涉及的多租权限管理主要有:为RAM用户和 RAM角色授予ArgoCD RBAC的权限[15],和通过 ArgoCD Projects管理RAM用户和RAM角色对目标集群、仓库、应用(Application)的RBAC权限。
跨多团队协同的、混合云多集群的应用持续部署案例的构建步骤为以下4步:
1. 通过ACK One注册集群将IDC集群注册到阿里云上。
2. ACK One舰队通过关联集群,统一管理云上多地域的ACK集群和云下IDC集群。
3. 通过ACK One GitOps快速部署应用到云上、云下集群。
4. 在ArgoCD UI上为不同RAM用户或角色配置不同的应用级别的权限控制,然后使用RAM用户或角色 SSO到ArgoCD UI验证其自身权限。详情可参考GitOps用户管理[16]。
客户案例 2:
构建Git事件驱动的自动化CI/CD Pipeline
ACK One Serverless Argo工作流集群[17](Argo Workflows)是ACK One全托管的Argo Workflows,并提升了其性能、稳定性、可观测、运维能力等。阿里云事件总线EventBridge[18]是阿里云提供的无服务器事件总线服务,在可用性、易用性、安全性等多方面具有显著优势。
ACK One GitOps结合此二者(EventBridge+Argo Workflows+Argo CD),可以简单快速、高效、低成本地交付您的应用,为您实现代码提交即交付的自动化CI/CD系统。CI Pipeline的构建请详见基于 EventBridge的事件驱动CI Pipeline[19]。
1. 用户向Git仓库提交代码(push commit)。
2. EventBridge根据配置的规则,Git事件触发其向ACK One工作流集群提交CI 工作流。
3. 基于ACK One工作流集群的CI工作流[20]来构建Docker Image,并推送至镜像仓库(ACR EE)中。
4. 通过GitOps自动同步相应镜像变化至ACK集群。
多集群网关
ACK One多集群网关是ACK One为多云、多集群环境提供的云原生网关,统一管理一个地域的多个集群的七层南北流量。ACK One通过托管MSE Ingress,以Ingress API来定义流量路由规则,支持跨多集群的多种能力:HTTP Routing、traffic splitting、health-based自动平滑容灾、traffic mirroring、基于副本数负载均衡流量等。您可以使用多集群网关构建同城容灾、标签路由、权重路由等能力。
多集群网关具有以下优势:
• 地域级别的多集群Global Ingress,统一管理多集群南北7层流量。
• 简化多集群流量管理:在舰队实例中统一完成多集群Ingress规则设置,无需单独操作每个子集群。且兼容Nginx Ingress。
• 多集群网关自身是跨AZ高可用的。
• 毫秒级Fallback:某集群后端故障时,多集群网关平滑迁移流量到其他后端。
• 网关托管,免运维。
客户案例:
多集群、混合云同城容灾
搭建混合云容灾系统需要以下5步,详细请参考基于 ACK One构建混合云同城容灾系统[21]:
1. 使用ACK One注册集群管理IDC/第三方公共云K8s集群。
2. 实现云下网络与云上VPC的互联互通。
3. 创建ACK One舰队并关联集群。
4. 使用ACK One GitOps发布应用到多个集群(可选)。
5. 使用ACK One多集群网关管理多集群流量。
多集群Service
ACK One舰队管理通过实现K8s社区标准的多集群服务API的多集群Service实现跨集群的服务发现,可以在以下场景帮助您:
1. 高可用性:多个集群运行同一个核心Service。
2. 有状态Service和无状态Service:隔离部署,有状态服务读写分离。
3. 共享Service:多集群共享的Service,例如监控/密钥服务。
4. 迁移:一个Service部署到2个集群,逐步迁移。如云下迁移到云上。
以下是ACK One多集群Service的架构:
1. 图中链路1为管控链路,Fleet实例管理关联集群Kubernetes服务的导出与导入。
• 通过在集群ACK Cluster 1上创建服务导出 ServiceExport对象,ACK Cluster 1成为服务提供者,将服务Service 1设置为允许集群外访问。
• 通过在集群ACK Cluster 2上创建服务导入 ServiceImport对象,ACK Cluster 2成为服务消费者,访问服务提供者导出的服务。
2. 图中链路2为数据链路,在ACK Cluster 1导出 Service 1服务,ACK Cluster 2导入Service 1服务后,ACK Cluster 2可以访问ACK Cluster 1的 Service 1服务。实现跨集群的Kubernetes服务访问。
下图是为了实现Cluster 2上的Client Pod跨集群访问Cluster 1上service1服务,多集群Service原理如下:
1. ACK One舰队实例中有个名为Multi-cluster Service Controller的组件,其负责监听用户创建的ServiceExport(导出服务)和ServiceImport(导入服务)。
2. 导出服务时获取service1的后端,在导入服务时将这些后端创建于EndpointSlice中,与ServiceImport进行关联。
3. 并在导入服务时,创建amcs-为前缀的Service amcs-service1,与EndpointSlice关联。
4. 最终Cluster 2中的Client Pod可以通过两种域名跨集群访问Cluster 1中的service1:
a.service1.provider-ns.svc.clusterset.local:
Client Pod通过该域名访问需要在CoreDNS中开启多集群插件,其后Client Pod解析该域名会返回 ServiceImport的IP,最终可以通过与其关联的 EndpointSlice中的IPs访问到Cluster1的Pods。
b.amcs-service1.provider-ns.svc.cluster.local:
Client Pod通过该域名访问,K8s集群中正常的 Service域名解析,通过关联的EndpointSlice中的 IPs访问到Cluster1的Pods。
客户案例:
Headless多集群Service跨集群访问有状态服务指定实例
如对于MySQL服务,可以使用该能力可以实现 MySQL主从集群的读写分离,以提升性能和吞吐量,并提升系统的可靠性和容错性。
通过Headless多集群Service跨集群访问有状态服务的指定实例[22]主要步骤如下:
1. ACK One舰队实例管理关联集群(ACK Cluster 1、ACK Cluster 2)中MySQL服务的导出与导入。
2. ACK Cluster 1作为服务提供者集群,在ACK Cluster 1上创建MySQL服务,和ServiceExport对象以导出服务。
3. ACK Cluster 2作为服务消费者集群,在ACK Cluster 2上创建ServiceImport对象以导入服务。
4. 在Cluster 2中,Client Pod可通过指定Pod实例名的域名跨集群访问Cluster 1中的MySQL服务的某个Pod实例,如通过以下两个域名都是访问到mysql-0:
a.mysql-0.mysql.provider-ns.svc.clusterset.local
b.mysql-0.amcs-mysql.provider-ns.svc.cluster.local
全局监控
ACK One舰队管理的全局可观测,包含全局监控、全局FinOps,另外包含全局事件中心等在建能力。
ACK One舰队管理统一管理各种K8s集群,屏蔽管控差异,再结合阿里云可观测监控Prometheus版的聚合实例聚合各集群的指标,为您提供全局统一的监控视图,助力您的业务稳定运行。
总结
ACK One舰队管理是阿里云为您提供的强大的多集群管理方案,功能众多:GitOps应用分发、多集群网关、多集群Service、全局可观测、服务网格、统一权限管理和多集群作业调度与分发,方便您轻松应对混合云、多集群、容灾等场景的问题,简化多集群管理。托管的舰队实例(K8s集群)、托管的ArgoCD等也最小化您的运维工作,让您更加专注于业务开发。
欢迎加入ACK One客户交流钉钉与我们一同交流。(钉钉群号:35688562)
相关链接:
[1] KubeFed
https://github.com/kubernetes-sigs/kubefed
[2] Open Cluster Management(OCM)
https://open-cluster-management.io/
[3] Karmada
[4] ACK One舰队管理
[5] 分布式云容器平台ACK One
[6] ACK One注册集群
[7] ACK One GitOps
[8] 多集群网关
[9] 多集群Service
[10] 多集群服务API
https://multicluster.sigs.k8s.io/concepts/multicluster-services-api/
[11] 全局监控
[12] 多集群作业调度与分发
[13] 微观调查结果
[14] Argo CD
https://argoproj.github.io/cd/
[15] ArgoCD RBAC的权限
[16] GitOps用户管理
[17] ACK One Serverless Argo工作流集群
[18] 事件总线EventBridge
https://help.aliyun.com/zh/eventbridge/product-overview/what-is-eventbridge
[19] 基于EventBridge的事件驱动CI Pipeline
[20] ACK One工作流集群的CI工作流
[21] 基于ACK One构建混合云同城容灾系统
[22] 通过Headless多集群Service跨集群访问有状态服务的指定实例
我们是阿里巴巴云计算和大数据技术幕后的核心技术输出者。
获取关于我们的更多信息~