作者:蔡靖
对于当前业务运行在 IDC 内的 Kubernetes 集群中,希望通过云计算为云下业务提供同城灾备的高可用冗余能力,可利用阿里云分布式云容器平台 ACK One [ 1] 来提供统一得流量、应用和集群管理,实现业务流量的多集群路由和灾难情况下的流量的自动平滑容灾。本文主要介绍通过 ACK One 快速构建混合云同城容灾系统。
搭建混合云容灾系统一般需要五个步骤:
分布式云容器平台 ACK One(Distributed Cloud Container Platform for Kubernetes)是阿里云面向混合云、多集群、分布式计算、容灾等场景推出的企业级云原生平台。ACK One 可以连接并管理您任何地域、任何基础设施上的 Kubernetes 集群,并提供一致的管理和社区兼容的 API,支持对计算、网络、存储、安全、监控、日志、作业、应用、流量等进行统一运维管控。
ACK One 注册集群 [ 2] 可以帮助您将云下 Kubernetes 集群接入云端,快速搭建混合云集群,可以将本地数据中心 Kubernetes 集群或其他云厂商 Kubernetes 集群接入阿里云容器服务管理平台,进行统一管理。在混合云场景下,承担了至关重要的作用。
ACK One 舰队 [ 3] (Fleet)是 ACK One 管理多集群提供的统一入口,为开发者提供多集群 GitOps 应用分发、流量管理、统一运维等能力。其基于成熟的开源社区项目 Argo CD [ 4] 和 Open Cluster Management [ 5] 构建,保证了产品的开放性。每个舰队实例则由 ACK 托管,您可以省去大量的运维工作,专注应用开发。
ACK One 多集群网关 [ 6] (ACK One Multi-cluster Gateways)是 ACK One 为多云、多集群环境提供的云原生网关,统一管理一个地域的多个集群的七层南北流量。ACK One 通过托管 MSE Ingress [ 7] ,以 Ingress API 来定义流量路由规则,支持跨多集群的多种能力:HTTP Routing(包括基于 Header 将流量路由到指定集群)、traffic splitting、 health-based 自动平滑容灾、traffic mirroring、基于副本数负载均衡流量等。
ACK One GitOps [ 8] 是 ACK One 在 Fleet 实例中托管了 ArgoCD,同时集成 ACK One 的多集群、阿里云的 RAM SSO 等能力,实现多集群下简单、安全的多集群 GitOps 持续交付。
基于 ACK One 的注册集群、多集群舰队(GitOps 可选)、多集群网关构建的混合云场景的应用的同城多活容灾系统如上图所示:
首先需要对混合云网络进行规划:ACK One Fleet、ACK 集群、注册集群在相同 VPC 下,ACK 集群和注册集群在不同 AZ。舰队管理网络规划请参见舰队管理网络规划 [ 9] 。
之后依据以下几步可以构建混合云同城容灾系统:
本步骤需要将您的 IDC / 第三方公共云 K8s 集群注册到阿里云上。您需要在 ACK/ACK One 创建一个注册集群,并通过集群连接信息中提供的集群导入代理配置 yaml,将您云下 K8s 集群接入注册集群,请详见通过注册集群统一管理任意环境下的 Kubernetes 集群 [ 10] 。
如果您的云下集群还需要将工作负载弹性到云上,可以参见构建混合弹性容器集群(弹性 ECS) [1****1] 和构建混合弹性集群(ECI) [ 12] 。如需应对大量突发情况,可对 ECI 进行高可用配置,请参见创建多可用区的 ECI Pod [ 13] 。
IDC / 第三方公共云 K8s 集群成功接入后,注册集群的状态会变成 “运行中” 。
构建混合云同城容灾系统,需要通过多集群网关对云上云下的应用 Pod 进行统一流量管理,所以需要连通 IDC 网络与多集群网关所在 VPC(默认同 ACK One Fleet 相同 VPC)。将 IDC 网络与云上 VPC 网络连接的方案可参见 VPC 与本地 IDC 链接 [ 14] 。建议采用专线,连通云上云下网络,请详见混合网络概述 [ 15] ,主要流程步骤简介如下:
a. 将云下网络通过物理专线接入阿里云。阿里云提供的专线接入方案,请参见物理专线连接 [ 16] 。
b. 创建专线连接本地数据中心边缘网络设备与云上网关设备边界路由器。
c. 将云上边界路由器与云上专有网络 VPC 加入同一个云企业网。
d. 配置云上边界路由器和本地数据中心 BGP 网络。
e. 云上云下连通性测试。
f. 配置云下网络到云上云产品内网 IP 地址段的路由。
在 ACK One 控制台 [ 17] 创建舰队,并关联已成功导入的注册集群和您新建的 ACK 集群。如下所示:
本步骤主要是在您的 ACK 集群和云下集群部署您的应用,您可以选择使用 GitOps 来管理您的多集群应用,详细操作可参考使用 GitOps 部署 web-demo 应用到多个集群 [ 18] 。
发布成功后,可在 GitOps 控制台查看您的应用和资源的状态,确保两个集群中应用在相同 namespace(多集群网关要求 service 相同 name、相同 namespace)。以下是 web-demo 在 ACK 集群中的状态:
最后依据以下几步,使用多集群网关来管理多集群流量,实现应用同城容灾,请详见基于多集群网关实现同城容灾方案 [ 19] 。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: web-demo namespace: web-demo spec: ingressClassName: mse rules: - host: example.com http: paths: - path: /svc1 pathType: Exact backend: service: name: service1 port: number: 80 ACK One 提供了完整的多集群管理能力,从集群接入,到应用分发,再到流量管理,支持一站式的应用的管理。对于混合云场景,注册集群还支持以 Serverless 方式(如 ECI)按需调度云上算力,从而快速应对服务的大规模突发,并无需您运维节点,聚焦应用本身;GitOps 可方便管理云上云下集群应用,并可构建自动化的 CI/CD 流水线,便利应用升级运维;多集群网关则提供强大的流量管理能力,对南北向多集群流量进行统一管理,减少单独管理多个集群的成本,降低架构复杂性,提升流量管理效率。 欢迎加入 ACK One 客户交流钉钉群与我们进行交流。(钉钉群号:35688562) 相关链接: [1] 分布式云容器平台 ACK One https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/product-overview/ack-one-overview?spm=a2c4g.11186623.0.0.534659e41FBHfX [2] ACK One 注册集群 https://help.aliyun.com/zh/ack/overview-9?spm=a2c4g.11186623.0.0.2e9c6fdcz1OREh [3] ACK One 舰队 https://help.aliyun.com/zh/ack/fleet-management-overview?spm=a2c4g.11186623.0.0.42b359e4CgVm5w [4] Argo CD https://argoproj.github.io/cd/ [5] Open Cluster Management https://open-cluster-management.io/ [6] ACK One 多集群网关 https://help.aliyun.com/zh/ack/multi-cluster-gateway-overview [7] MSE Ingress https://help.aliyun.com/zh/mse/user-guide/overview-of-mse-ingress-gateways#task-2193958 [8] ACK One GitOps https://help.aliyun.com/zh/ack/gitops-overview?spm=a2c4g.11186623.0.0.1f6759e4A2m8gU [9] 舰队管理网络规划 https://help.aliyun.com/zh/ack/fleet-management-network-planning?spm=a2c4g.11186623.0.0.1b1e5f8bDveDi5 [10] 通过注册集群统一管理任意环境下的 Kubernetes 集群 https://help.aliyun.com/zh/ack/use-registered-clusters-to-centrally-manage-external-kubernetes-clusters?spm=a2c4g.11186623.0.0.6710398eTddS7f [11] 构建混合弹性容器集群(弹性 ECS) https://help.aliyun.com/zh/ack/build-a-hybrid-cloud-cluster-and-add-ecs-instances-to-the-cluster#task-2249354 [12] 构建混合弹性集群(ECI) https://help.aliyun.com/zh/ack/scale-out-elastic-container-instances#task-2489901 [13] 创建多可用区的 ECI Pod https://help.aliyun.com/zh/ack/serverless-kubernetes/user-guide/create-ecis-across-zones [14] VPC 与本地 IDC 链接 https://help.aliyun.com/zh/vpc/user-guide/network-connection-overview?spm=a2c4g.11186623.0.0.3a557755mYSyRf#section-fdz-nsk-w2b [15] 混合网络概述 https://help.aliyun.com/zh/ack/overview-of-hybrid-networks?spm=a2c4g.11186623.0.0.64fb2fdaU19Ju1 [16] 物理专线连接 https://help.aliyun.com/zh/express-connect/user-guide/physical-connection/ [17] ACK One 控制台 https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Fcs.console.aliyun.com%2Fone%3Fspm%3Da2c4g.11186623.0.0.234c3163R6h8Fu [18] 使用 GitOps 部署 web-demo 应用到多个集群 https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/use-cases/zone-disaster-recovery-based-on-multi-cluster-gateway?spm=a2c4g.11186623.0.0.2dc35f8b7vZoiw#34a9f1707ex8d [19] 基于多集群网关实现同城容灾方案 https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/use-cases/zone-disaster-recovery-based-on-multi-cluster-gateway?spm=a2c4g.11186623.0.0.2c573e36yWmacA
ACK One 提供了完整的多集群管理能力,从集群接入,到应用分发,再到流量管理,支持一站式的应用的管理。对于混合云场景,注册集群还支持以 Serverless 方式(如 ECI)按需调度云上算力,从而快速应对服务的大规模突发,并无需您运维节点,聚焦应用本身;GitOps 可方便管理云上云下集群应用,并可构建自动化的 CI/CD 流水线,便利应用升级运维;多集群网关则提供强大的流量管理能力,对南北向多集群流量进行统一管理,减少单独管理多个集群的成本,降低架构复杂性,提升流量管理效率。
欢迎加入 ACK One 客户交流钉钉群与我们进行交流。(钉钉群号:35688562)
相关链接:
[1] 分布式云容器平台 ACK One
https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/product-overview/ack-one-overview?spm=a2c4g.11186623.0.0.534659e41FBHfX
[2] ACK One 注册集群
https://help.aliyun.com/zh/ack/overview-9?spm=a2c4g.11186623.0.0.2e9c6fdcz1OREh
[3] ACK One 舰队
https://help.aliyun.com/zh/ack/fleet-management-overview?spm=a2c4g.11186623.0.0.42b359e4CgVm5w
[4] Argo CD
https://argoproj.github.io/cd/
[5] Open Cluster Management
https://open-cluster-management.io/
[6] ACK One 多集群网关
https://help.aliyun.com/zh/ack/multi-cluster-gateway-overview
[7] MSE Ingress
https://help.aliyun.com/zh/mse/user-guide/overview-of-mse-ingress-gateways#task-2193958
[8] ACK One GitOps
https://help.aliyun.com/zh/ack/gitops-overview?spm=a2c4g.11186623.0.0.1f6759e4A2m8gU
[9] 舰队管理网络规划
https://help.aliyun.com/zh/ack/fleet-management-network-planning?spm=a2c4g.11186623.0.0.1b1e5f8bDveDi5
[10] 通过注册集群统一管理任意环境下的 Kubernetes 集群
https://help.aliyun.com/zh/ack/use-registered-clusters-to-centrally-manage-external-kubernetes-clusters?spm=a2c4g.11186623.0.0.6710398eTddS7f
[11] 构建混合弹性容器集群(弹性 ECS)
https://help.aliyun.com/zh/ack/build-a-hybrid-cloud-cluster-and-add-ecs-instances-to-the-cluster#task-2249354
[12] 构建混合弹性集群(ECI)
https://help.aliyun.com/zh/ack/scale-out-elastic-container-instances#task-2489901
[13] 创建多可用区的 ECI Pod
https://help.aliyun.com/zh/ack/serverless-kubernetes/user-guide/create-ecis-across-zones
[14] VPC 与本地 IDC 链接
https://help.aliyun.com/zh/vpc/user-guide/network-connection-overview?spm=a2c4g.11186623.0.0.3a557755mYSyRf#section-fdz-nsk-w2b
[15] 混合网络概述
https://help.aliyun.com/zh/ack/overview-of-hybrid-networks?spm=a2c4g.11186623.0.0.64fb2fdaU19Ju1
[16] 物理专线连接
https://help.aliyun.com/zh/express-connect/user-guide/physical-connection/
[17] ACK One 控制台
https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Fcs.console.aliyun.com%2Fone%3Fspm%3Da2c4g.11186623.0.0.234c3163R6h8Fu
[18] 使用 GitOps 部署 web-demo 应用到多个集群
https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/use-cases/zone-disaster-recovery-based-on-multi-cluster-gateway?spm=a2c4g.11186623.0.0.2dc35f8b7vZoiw#34a9f1707ex8d
[19] 基于多集群网关实现同城容灾方案
https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/use-cases/zone-disaster-recovery-based-on-multi-cluster-gateway?spm=a2c4g.11186623.0.0.2c573e36yWmacA