分布式云原生平台可以帮助用户进行两地三中心的混合/多云 Kubernetes 集群,本文为您介绍如何使用分布式云原生平台构建应用两地三中心容灾方案的详细使用方法。
分布式云原生平台可以帮用户进行两地三中心的混合/多云 Kubernetes 集群统一管理、运维,以及多集群应用的跨集群部署、升级、差异化配置及故障迁移等。并且能够配合火山引擎云调度 GTM 实现应用在发生故障时在多个集群间的自动切流,最大限度的提升业务的可用性及连续性。
说明
关于数据层面的数据复制与同步方案,可联系火山引擎了解更多产品及解决方案。
集群 | 类型 | 地域 | VPC | Pod&Service CIDR |
---|---|---|---|---|
联邦主控实例 | 集群联邦的主控实例 | 北京 | VPC1 | — |
集群 A | 火山引擎 VKE 集群 | 无特殊要求 | ||
集群 B | 火山引擎 VKE 集群 | |||
集群 C | 阿里云 ACK 集群 | 杭州 | VPC2 | 无特殊要求 |
随着移动互联网的深入发展,用户增长达到一定规模后,不少企业都会面高并发业务和面临海量数据的挑战,传统的单机房在机器容量上存在瓶颈。在一些极端场景下,有可能所有服务器都出现故障,例如机房断电、机房火灾、地震等这些不可抗拒因素会导致系统所有服务器都故障从而导致业务整体瘫痪,而且即使有其他地区的备份,把备份业务系统全部恢复到能够正常提供业务,花费的时间也比较长。为了满足中心业务连续性,增强抗风险能力,多活作为一种可靠的高可用部署架构,成为各大互联网、金融行业公司的首要选择。
常见的多活方案有同城双活、两地三中心、三地五中心、异地多活等多种技术方案,不同多活方案技术要求、建设成本、运维成本都不一样,本场景以构建应用两地三中心容灾方案进行说明
两地三中心容灾是一种高可用性的架构设计,它通过在两个地理位置(如城市)上部署三个数据中心来实现容灾,即:生产中心、同城容灾中心、异地容灾中心。在一个城市部署 2 套环境做为生产中心和同城容灾中心,同时处理业务并通过高速链路实现数据同步,可切换运行。在另一城市部署 1 套环境做为异地容灾中心,用做数据备份。当生产中心和同城容灾中心同时故障时,异地容灾中心可切换处理业务。
本场景从 0 到 1 为您详细介绍构建应用两地三中心容灾的操作步骤,可参考如下步骤依次执行。
将容器集群注册/纳管到分布式云原生平台统一管理,后续可直接添加到联邦主控实例作为成员集群,用于联邦制资源分发。本场景使用的参数配置如下:
集群名称 | 云服务商 | 注册地域 | 注册方式 |
---|---|---|---|
aliyun-hangzhou | 阿里云 ACK | 华北 2 (北京) | 代理连接 |
volc-beijing-1 | 火山引擎 VKE | 华北 2 (北京) | 一键注册 |
volc-beijing-2 | 火山引擎 VKE | 华北 2 (北京) | 一键注册 |
本场景涉及的关键配置说明如下,其他按需配置即可,详细操作步骤和配置项说明参见:注册现有集群(代理连接)。
配置项 | 说明 |
---|---|
集群名称 | 可自定义集群名称(本场景命名为:aliyun-hangzhou),命名规范:长度 2-64 个字符;支持英文字母、汉字、数字和中划线(-)。 |
云服务商 | 分布式云原生适配的第三方平台集群(本场景选择阿里云 ACK),要求选择与待接入集群匹配的云服务商,否则可能导致部分功能不可用。 |
接入地域 | 容器集群接入分布式云原生平台后所属的地域(本场景选择华北 2 (北京))。 |
私有网络 | 待接入容器集群使用的私有网络。本场景 VKE 集群、ACK 集群和主控实例使用相同的 VPC。 |
API Server 公网访问 | 默认关闭(本场景调整为:开启),若开启此配置,系统将自动创建 EIP 并关联主控实例 API Server 负载均衡,即可通过公网连接管理容器集群。 |
本场景涉及的关键配置说明如下,其他按需配置即可,详细操作步骤和配置项说明参见:创建主控实例。
配置项 | 说明 |
---|---|
实例名称 | 自定义主控实例名称(本场景命名为:fed-poc),同一地域内不可重名。命名规则:长度 2~64 个字符,支持英文字母、汉字、数字和中划线(-)。 |
地域 | 物理数据中心所在的地理区域(本场景选择华北 2 (北京)),资源创建后不支持更换地域。不同地域之间内网完全隔离,保证不同地域间最大程度的稳定性和容错性。 |
私有网络 | 私有网络为云上资源构建隔离的、自主配置的虚拟网络环境,默认情况下,同一地域内同一私有网络下所有资源网络互通。本场景 VKE 集群、ACK 集群和主控实例使用相同的 VPC。 |
公网访问 | 默认关闭(本场景调整为:开启),若开启此配置,主控实例将支持通过公网访问并管理成员集群。 说明 开启后,若所选私有网络中已经创建 NAT 网关,将默认使用该网关;若所选私有网络中尚无 NAT 网关,将新建一个 NAT 网关并自动配置 SNAT 规则。 |
API Server 公网访问 | 默认关闭(本场景调整为:开启),若开启此配置,系统将自动创建 EIP并关联主控实例 API Server 负载均衡,即可通过公网连接管理主控实例。 |
当关联状态切换为已关联
时,表示集群添加成功,详细操作步骤和配置项说明参见:添加成员集群。
本场景涉及的关键配置如下,其他参数按需配置即可。详细操作步骤和配置项说明参见:创建部署策略(控制台)。
配置项 | 说明 |
---|---|
副本模式调度 | 默认开启(本场景关闭此配置,使用复制分发模式)。针对部分资源(例如:Deployment)启用权重分发副本调度模式,支持动态集群权重、静态集群权重。 |
集群选择方式 | 选择部署策略最终调度的成员集群。本场景使用 指定集群 方式选择已经注册的 3 个目标成员集群。 |
策略类型 | 资源名称 | 说明 |
---|---|---|
差异化策略 | dp-override | 用于 Deployment(fed-dp)资源在多云集群中镜像地址差异化配置。 |
差异化策略 | service-override | 用于 LB 类型 Service(fed-service)资源在多云集群中 LB 规格差异化配置。 |
apiVersion: core.kubeadmiral.io/v1alpha1 kind: OverridePolicy metadata: name: dp-override namespace: default spec: overrideRules: - targetClusters: #clusters: #- ClusterID-01 # 替换为您的成员集群 ID,与 clusterSelector 取交集 clusterSelector: cluster.dcp.volcengine.com/cluster-provider: Vke # 表示匹配云服务商为火山引擎VKE集群 overriders: jsonpatch: - path: "/spec/template/spec/containers/0/image" operator: replace value: "nginx" # 替换为您的镜像仓库地址 - targetClusters: #clusters: #- ClusterID-01 # 替换为您的成员集群 ID,与 clusterSelector 取交集 clusterSelector: cluster.dcp.volcengine.com/cluster-provider: Ack # 表示匹配云服务商为阿里云ACK集群 overriders: jsonpatch: - path: "/spec/template/spec/containers/0/image" operator: replace value: "nginx" # 替换为您的镜像仓库地址
apiVersion: core.kubeadmiral.io/v1alpha1 kind: OverridePolicy metadata: name: service-override namespace: default spec: overrideRules: - overriders: jsonpatch: - operator: add path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-address-type value: PUBLIC - operator: add path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-spec value: small_1 targetClusters: #clusters: #- ClusterID-01 # 替换为您的成员集群 ID,与 clusterSelector 取交集 clusterSelector: cluster.dcp.volcengine.com/cluster-provider: Vke # 表示匹配云服务商为火山引擎VKE集群 - overriders: jsonpatch: - operator: add path: /metadata/annotations/service.beta.kubernetes.io~1alibaba-cloud-loadbalancer-spec value: slb.s1.small targetClusters: #clusters: #- ClusterID-01 # 替换为您的成员集群 ID,与 clusterSelector 取交集 clusterSelector: cluster.dcp.volcengine.com/cluster-provider: Ack # 表示匹配云服务商为阿里云ACK集群
资源清单及 Yaml 定义如下:
资源类型 | 资源名称 | 说明 |
---|---|---|
Deployment | fed-dp | 无状态负载。 |
ConfigMap | fed-cm | 被 fed-dp(Deployment)挂载的 ConfigMap。 |
Service | fed-service | 与 fed-dp(Deployment)关联的 LB 类型 Service。 |
apiVersion: apps/v1 kind: Deployment metadata: name: fed-dp namespace: default spec: progressDeadlineSeconds: 600 replicas: 2 revisionHistoryLimit: 10 selector: matchLabels: app: fed-dp strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: creationTimestamp: null labels: app: fed-dp spec: containers: - image: nginx imagePullPolicy: Always name: nginx resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /v1 name: v1 readOnly: true dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 volumes: - configMap: defaultMode: 420 name: fed-cm name: v1 --- apiVersion: v1 data: k1: v1 kind: ConfigMap metadata: name: fed-cm namespace: default --- apiVersion: v1 kind: Service metadata: name: fed-service namespace: default spec: ports: - name: test port: 80 protocol: TCP targetPort: 80 selector: app: fed-dp sessionAffinity: None type: LoadBalancer
资源创建成功后, 可在联邦主控实例详情中分别查看联邦 Deployment、Service 资源,已经成功分发到多个集群中,并且差异化策略已生效,LB Service 根据差异化 annotation 生成了对应的公网访问地址。
说明
此步骤需要记录 LB Service 公网访问入口,将在后续的全局流量策略配置中用到。
说明
以下对本场景使用到的关键参数进行介绍,其他参数按需配置即可,详细介绍参见:配置 GTM 实例。
执行以下命令,根据域名 app.volcdemo.cn 多次解析的 IP 地址可见,正常情况下,所有流量都由北京 Region 的 2 个 VKE 集群上的应用承载,每个集群各处理 50% 流量。
for i in `seq 100`; do dig @ns1.volcdns.com app.volcdemo.cn +short; done | sort | uniq -c 46 XXX.XXX.35.152 54 XXX.XXX.69.29
下线 volc-beijing-1 集群中的节点,此时,联邦集群中查看分发到该集群中可用副本为 0,且在 GTM 实例策略管理模块可以看到 volc-beijing-1 集群中的 LB Service 地址已经不健康。
执行以下命令,根据域名 app.volcdemo.cn 多次解析的 IP 地址可见,北京 Region 其中一个集群(volc-beijing-1)应用异常情况,所有流量都由北京 Region 的另外一个集群(volc-beijing-2)应用承载。
for i in `seq 100`; do dig @ns1.volcdns.com app.volcdemo.cn +short; done | sort | uniq -c 100 XXX.XXX.69.29
下线 volc-beijing-2 集群中的节点,此时,联邦集群中查看分发到该集群中可用副本为 0,且在 GTM 实例策略管理模块可以看到 volc-beijing-2 集群中的 LB Service 地址也已经不健康。
执行以下命令,根据域名 app.volcdemo.cn 多次解析的 IP 地址可见,北京 Region 所有集群应用都异常情况下,所有流量都由杭州 Region 的集群(aliyun-hangzhou)应用承载。
for i in `seq 100`; do dig @ns1.volcdns.com app.volcdemo.cn +short; done | sort | uniq -c 100 XXX.XXX.19.34