ACK One:构建混合云同城容灾系统
作者:蔡靖
对于当前业务运行在 IDC 内的 Kubernetes 集群中,希望通过云计算为云下业务提供同城灾备的高可用冗余能力,可利用阿里云分布式云容器平台 ACK One [ 1] 来提供统一得流量、应用和集群管理,实现业务流量的多集群路由和灾难情况下的流量的自动平滑容灾。本文主要介绍通过 ACK One 快速构建混合云同城容灾系统。
搭建混合云容灾系统一般需要五个步骤:
- 使用 ACK One 注册集群管理 IDC / 第三方公共云 K8s 集群
- 实现云下网络与云上 VPC 的互联互通
- 创建 ACK One 舰队并关联集群
- 使用 ACK One GitOps 发布应用到多个集群(可选)
- 使用 ACK One 多集群网关管理多集群流量
分布式云容器平台 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 可选)、多集群网关构建的混合云场景的应用的同城多活容灾系统如上图所示:
- 阿里云上资源都在 1 个 VPC 中(如图中 VPC 1),在 AZ1 创建 ACK 集群,在 AZ2 中创建注册集群;
- 将 IDC 或第三方公共云 K8s 集群,通过注册集群注册到阿里云;并使用专线打通 IDC 与云上 VPC 的网络,实现云上云下网络互通互联;
- 关联 ACK 集群和注册集群到同 VPC(VPC 1)下的 ACK One Fleet 实例,并通过 ACK One GitOps 向 ACK 集群和注册集群发布应用;
- 在 ACK One Fleet 中,通过 MseIngressConfig 创建 MSE 网关,并添加集群到网关,然后通过在 Fleet 中创建 Ingress 设置流量路由规则,来管理南北向流量(包括实现同城容灾)。
- 本文章针对应用的多集群部署和业务流量的高可用方案,不涉及数据库和中间件,相关方案请参考阿里云数据库与中间件文档,例如:数据库同步同步方案:https://help.aliyun.com/zh/rds/apsaradb-rds-for-mysql/overview-of-data-synchronization
构建混合云同城容灾系统
首先需要对混合云网络进行规划:ACK One Fleet、ACK 集群、注册集群在相同 VPC 下,ACK 集群和注册集群在不同 AZ。舰队管理网络规划请参见舰队管理网络规划 [ 9] 。
之后依据以下几步可以构建混合云同城容灾系统:
- 使用注册集群管理 IDC / 第三方公共云 K8s 集群
- 实现云下网络与云上 VPC 的互联互通
- 创建舰队并关联集群
- 使用 GitOps 发布应用到多个集群(可选)
- 使用多集群网关管理多集群流量
1. 使用注册集群管理 IDC / 第三方公共云 K8s 集群
本步骤需要将您的 IDC / 第三方公共云 K8s 集群注册到阿里云上。您需要在 ACK/ACK One 创建一个注册集群,并通过集群连接信息中提供的集群导入代理配置 yaml,将您云下 K8s 集群接入注册集群,请详见通过注册集群统一管理任意环境下的 Kubernetes 集群 [ 10] 。
如果您的云下集群还需要将工作负载弹性到云上,可以参见构建混合弹性容器集群(弹性 ECS) [1****1] 和构建混合弹性集群(ECI) [ 12] 。如需应对大量突发情况,可对 ECI 进行高可用配置,请参见创建多可用区的 ECI Pod [ 13] 。
IDC / 第三方公共云 K8s 集群成功接入后,注册集群的状态会变成 “运行中” 。
2. 实现云下网络与云上 VPC 的互联互通
构建混合云同城容灾系统,需要通过多集群网关对云上云下的应用 Pod 进行统一流量管理,所以需要连通 IDC 网络与多集群网关所在 VPC(默认同 ACK One Fleet 相同 VPC)。将 IDC 网络与云上 VPC 网络连接的方案可参见 VPC 与本地 IDC 链接 [ 14] 。建议采用专线,连通云上云下网络,请详见混合网络概述 [ 15] ,主要流程步骤简介如下:
a. 将云下网络通过物理专线接入阿里云。阿里云提供的专线接入方案,请参见物理专线连接 [ 16] 。
b. 创建专线连接本地数据中心边缘网络设备与云上网关设备边界路由器。
c. 将云上边界路由器与云上专有网络 VPC 加入同一个云企业网。
d. 配置云上边界路由器和本地数据中心 BGP 网络。
e. 云上云下连通性测试。
f. 配置云下网络到云上云产品内网 IP 地址段的路由。
3. 创建舰队并关联集群
在 ACK One 控制台 [ 17] 创建舰队,并关联已成功导入的注册集群和您新建的 ACK 集群。如下所示:
4. 使用 GitOps 发布应用到多个集群(可选)
本步骤主要是在您的 ACK 集群和云下集群部署您的应用,您可以选择使用 GitOps 来管理您的多集群应用,详细操作可参考使用 GitOps 部署 web-demo 应用到多个集群 [ 18] 。
发布成功后,可在 GitOps 控制台查看您的应用和资源的状态,确保两个集群中应用在相同 namespace(多集群网关要求 service 相同 name、相同 namespace)。以下是 web-demo 在 ACK 集群中的状态:
5. 使用多集群网关管理多集群流量
最后依据以下几步,使用多集群网关来管理多集群流量,实现应用同城容灾,请详见基于多集群网关实现同城容灾方案 [ 19] 。
- 在 ACK One Fleet 中开启多集群网关能力;
- 在 Fleet 中通过创建 MseIngressConfig 来创建网关,并添加 ACK 集群和注册集群到网关;
- 在 Fleet 中创建路由规则(Ingress)实现同城容灾。同城容灾对应的 Ingress 如下所示(namespace 与所发布的应用的 namespace 一致):
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
[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] 舰队管理网络规划
[10] 通过注册集群统一管理任意环境下的 Kubernetes 集群
[11] 构建混合弹性容器集群(弹性 ECS)
[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 链接
[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 控制台
[18] 使用 GitOps 部署 web-demo 应用到多个集群
[19] 基于多集群网关实现同城容灾方案

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
基于OpenTelemetry实现Java微服务调用链跟踪
本文分享自华为云社区《基于OpenTelemetry实现Java微服务调用链跟踪》,作者: 可以交个朋友。 一 背景 随着业务的发展,所有的系统都会走向微服务化体系,微服务进行拆分后,服务的依赖关系变得复杂,如果出现了错误和异常,定位的过程将会变得复杂,一个请求可能需要调用很多个服务,所以微服务架构中,分布式链路跟踪的实现至关重要,去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而达到每个请求的步骤清晰可见。如何快速查询整个请求链路上的信息并呈现出来是解决排查问题复杂度的根本方法。 二 简介 Java 是世界上最流行的编程语言之一,很多大小项目都是通过Java进行微服务的开发来实现。 本篇博客将以springboot微服务为例,通过使用opentelemetry-java SDK 进行自动埋点以代码无侵入的方式实现微服务的分布式跟踪能力。 三 实践演示 demo项目一共3个service:foo-svc、bar-svc 、loo-svc 。 项目源码可前往:https://github.com/HFfleming/springboot-trace-demo/tree/auto...
- 下一篇
揭开华为云ADN提高网络质量的秘密
本文分享自华为云社区《揭开华为云ADN提高网络质量的秘密》,作者:HuaweiCloudDeveloper。 互联网的QoS故障与解决思路 互联网自1968年起源以来,已经发展了半个多世纪。互联网仅从中文字面意思,可以简单理解为相互链接的网络。实际上互联网是由全球各国各地区的本地局域网建设者(可称为运营商);把一个个局域网相互链接起来,使得信息可以在一个个局域网之间流动的大型网络。据不完全统计,全球已经有750+的运营商。各个运营商的网络,从早期的ATM网络逐渐演进到IP网络;各个运营商之间网络连通性和质量也参差不齐。这也就导致终端用户通过互联网访问数据的时候,存在着众多的不可控因素,比如时延、丢包等等。 随着以上问题的日益突出,运营商虽然通过各类BGP协议,OSPF等协议,以邻居式发现和链路cost进行路由转发来优化自身网络和网络间的质量;但是随着各运营商的经济投入不等和全球互联网应用业务流量的大幅增长,导致全球流量呈现不同的潮汐变化,尤其在长距离传输方面出现明显的潮汐式丢包。 实际传统互联网在全局网络路径拥塞发生丢包、时延等Qos故障时,不容易感知到,导致业务流量难以做合理的调配来...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16