ACK One:构建混合云同城容灾系统

作者:蔡靖

对于当前业务运行在 IDC 内的 Kubernetes 集群中,希望通过云计算为云下业务提供同城灾备的高可用冗余能力,可利用阿里云分布式云容器平台 ACK One [ 1] 来提供统一得流量、应用和集群管理,实现业务流量的多集群路由和灾难情况下的流量的自动平滑容灾。本文主要介绍通过 ACK One 快速构建混合云同城容灾系统。

搭建混合云容灾系统一般需要五个步骤:

  1. 使用 ACK One 注册集群管理 IDC / 第三方公共云 K8s 集群
  2. 实现云下网络与云上 VPC 的互联互通
  3. 创建 ACK One 舰队并关联集群
  4. 使用 ACK One GitOps 发布应用到多个集群(可选)
  5. 使用 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]

之后依据以下几步可以构建混合云同城容灾系统:

  1. 使用注册集群管理 IDC / 第三方公共云 K8s 集群
  2. 实现云下网络与云上 VPC 的互联互通
  3. 创建舰队并关联集群
  4. 使用 GitOps 发布应用到多个集群(可选)
  5. 使用多集群网关管理多集群流量

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]

  1. 在 ACK One Fleet 中开启多集群网关能力;
  2. 在 Fleet 中通过创建 MseIngressConfig 来创建网关,并添加 ACK 集群和注册集群到网关;
  3. 在 Fleet 中创建路由规则(Ingress)实现同城容灾。同城容灾对应的 Ingress 如下所示(namespace 与所发布的应用的 namespace 一致):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: web-demonamespace: web-demo
spec:ingressClassName: mserules:- host: example.comhttp:paths:- path: /svc1pathType: Exactbackend:service:name: service1port: 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/689544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习Android的第十六天

目录 Android 自定义 Adapter Adapter 接口 SpinnerAdapter ListAdapter BaseAdapter 自定义 BaseAdapter 参考文档 Android ListView 列表控件 ListView 的属性和方法 表头表尾分割线的设置 列表从底部开始显示 android:stackFromBottom 设置点击颜色 cacheColorH…

【Linux】28、命令行参数 语法格式

文章目录 一、没有括号二、[]三、{}四、<>五、...六、|七、() 命令行参数很复杂&#xff0c;通过 --help 会看到很多符号&#xff0c;比如 [] {} () <> | …&#xff0c;他们都是什么意思呢&#xff1f;一般格式如下&#xff1a; 命令<必选参数1|必选参数2>…

【自然语言处理】:实验4布置,预训练语言模型实现与应用

清华大学驭风计划 因为篇幅原因实验答案分开上传&#xff0c;自然语言处理专栏持续更新中&#xff0c;期待的小伙伴敬请关注 有任何疑问或者问题&#xff0c;也欢迎私信博主&#xff0c;大家可以相互讨论交流哟~~ 案例简介 2018年&#xff0c;Google提出了预训练语言模型BE…

jbpm4使用的一些问题 ,供挣扎于老项目的码农们参考

这里写自定义目录标题 springboot jbpm4.4mysql 双数据源问题疑问 springboot jbpm4.4mysql 双数据源问题 疑问 basic&#xff1a; 项目同时支持hibernatemybatis 可行 1.jbpm4是否只支持hibernate&#xff1f; 2使用时如何指定jbpm使用的数据源

基于PSO优化的GRU多输入时序回归预测(Matlab)粒子群优化门控循环单元神经网络时序回归预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分程序&#xff1a; 四、完整代码数据分享下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台…

扩展语音识别系统:增强功能与多语言支持

一、引言 在之前的博客中&#xff0c;我们成功构建了一个基于LibriSpeech数据集的英文语音识别系统。现在&#xff0c;我们将对系统进行扩展&#xff0c;增加一些增强功能&#xff0c;并尝试支持多语言识别。 二、增加增强功能 语音合成 --除了语音识别&#xff0c;我们还可以…

使用 ChatGPT系统学习一门知识的技巧

如何使用 ChatGPT 高效学习一门知识&#xff1f;我探索到一种比较高效的方式&#xff1a;首先让 ChatGPT 给你一个学习提纲&#xff0c;然后以此把提纲内容逐个发给 ChatGPT&#xff0c;进行详情学习。 下面以“学习八木天线”工作原理为例说明。 以八木天线为切入点&#xff0…

Hexo删除主题

一、找到存放主题的目录 1、一般在入博客中的theme目录&#xff0c;这里以next主题为例。 在theme目录中&#xff0c;打开Git Bash Here&#xff1b; ls 列出主题目录 rm -rf 填需要删除的主题目录 2、另一种情况&#xff0c;以fluid主题为例&#xff1b;之前不知道是用那种…

文物保护系统守护历史岁月,成都青铜展科技闪耀

一、“吉金万里-中国西南青铜文明展”隆重开幕 1月27日&#xff0c;“吉金万里-中国西南青铜文明展”在成都金沙遗址博物馆向公众开放&#xff0c;奉上一场精彩的青铜文明“盛宴”。本次展览汇集了中国西南地区32家文博单位&#xff0c;以青铜器为代表的294件经典文物&#xf…

17.1 SpringMVC框架_SpringMVC入门与数据绑定(❤❤)

17.1 SpringMVC框架_SpringMVC入门与数据绑定 1. SpringMVC入门1.1 MVC介绍1.2 环境配置1. 依赖引入2. web配置文件:DispatchServlet配置3. applicationContext.xml配置4. 开发Controller控制器(❤❤)1.3 MVC处理流程图2. Spring MVC数据绑定2.1 URL Mapping2.2 URL Mapping三个…

java 环境相关

一、MAC上Java相关 1、安装路径 一般默认 安装在&#xff1a;/Library/Java/JavaVirtualMachines 有时也会在&#xff1a;/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home 可以通过输入&#xff1a;/usr/libexec/java_home&#xff0c;确认安装目录 wy…

OBD部署OceanBase集群-配置文件方式

前一篇文章介绍了OBD白屏可视化方式部署OceanBase集群 &#xff0c;其原理是把可视化设置生成为一个配置文件&#xff0c;然后使用OBD命令部署集群 本篇想使用命令行加配置文件方式&#xff0c;只部署OceanBase和ODProxy两个组件 服务器参数配置和 oceanbase-all-in-one-*.ta…

LeetCode 0589.N 叉树的前序遍历:深度优先搜索(DFS)

【LetMeFly】589.N 叉树的前序遍历&#xff1a;深度优先搜索(DFS) 力扣题目链接&#xff1a;https://leetcode.cn/problems/n-ary-tree-preorder-traversal/ 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表…

android aidl进程间通信封装通用实现-用法说明

该aar包的使用还是比较方便的 一先看客户端 1 初始化 JsonProtocolManager.getInstance().init(mContext, "com.autoaidl.jsonprotocol"); //客户端监听事件实现 JsonProtocolManager.getInstance().setJsonProtocolReceive(new IJsonReceive() {Overridepublic S…

261.【华为OD机试真题】跳马(广度优先搜索(BFS)-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目二.解题思路三.题解代码Python题解代码JAVA题解…

第13章 网络 Page818 UDP(和TCP的比较)

TCP核心类 asio::ip::tcp::socket;//网络套接字 asio::ip::tcp::endpoint;//边接端地址 asio::ip::tcp::resolver;//地址解析器 asio::ip::tcp::acceptor;//连接接受器 UPD核心类 asio::ip::udp::socket;//网络套接字 asio::ip::udp::endpoint;//边接端地址 asio::ip::udp::…

numpy随机选择函数

numpy随机选择函数 numpy.random.choise(a, sizeNone, replaceTrue, pNone) a : 一维列表或者整数&#xff0c; 表示抽取的列表。 size : 整数或者元组&#xff0c;抽取的矩阵形状 repalce : 是否放回&#xff0c; TRUE表示放回。FALSE表示不返回。 p : 随机选择的概率分布 im…

及其详细的Markdown基础-学习笔记(附有使用案例)

Markdown 基础语法 查看更多学习笔记&#xff1a;GitHub&#xff1a;LoveEmiliaForever 标题创建 标题语法格式 在文字前添加一至六个#即可创建标题 标题是有等级的&#xff0c;具体等级根据#个数决定 由于标题等级参与构建整篇文章的架构&#xff0c;编写时应该遵循如下规…

json字符串的处理

json字符串的处理 【1】解析json字符串&#xff08;1&#xff09;如果json格式字符串 &#xff0c;最外层 是 中括号&#xff0c;表示数组&#xff0c;就使用方法&#xff08;2&#xff09;如果json格式字符串&#xff0c;最外层是 大括号&#xff0c;表示对象&#xff0c;就是…

第九篇:node静态文件服务(中间件)

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! &#x1f4d8; 引言&#xff1a; 当今互联网时代&am…