最近更新时间:2024.01.19 14:39:14
首次发布时间:2023.11.06 21:28:01
分布式云原生平台支持通过多集群应用部署和故障迁移来提高业务的高可用性,本文以实际场景为例,从 0 到 1 为您详细介绍集群及应用故障迁移。
为了提高业务的高可用性,工作负载可能会被部署在多个集群中,当集群发生故障或应用在该集群中无法正常部署时,需要进行自动/手动故障迁移,进而保证用户业务的可用性与连续性。
集群故障迁移:当集群发生故障(不健康或失联),或是不希望在某个集群上继续运行工作负载(如集群下线、升级)时,通常会手动进行集群应用驱逐,被驱逐的工作负载将被调度至其他健康的集群中。
应用故障迁移:应用多集群分发场景下,当实例调度到目标成员集群后发生故障(无法调度),期望将故障副本自动重调度到其他健康集群中。
集群 | 类型 | 地域 | VPC | Pod&Service CIDR |
---|---|---|---|---|
联邦主控实例 | 集群联邦的主控实例 | 华北 2 (北京) | 相同 VPC | — |
集群 A | 阿里云 ACK 集群 | 无特殊要求 | ||
集群 B | 火山引擎 VKE 集群 |
本场景从 0 到 1 为您详细介绍集群及应用故障迁移场景的操作步骤,可参考如下步骤依次执行。
将容器集群注册/纳管到分布式云原生平台统一管理,后续可直接添加到联邦主控实例作为成员集群,用于联邦制资源分发。本场景使用的参数配置如下:
集群名称 | 云服务商 | 接入地域 | 注册方式 |
---|---|---|---|
aliyun | 阿里云 ACK | 华北 2 (北京) | 代理连接 |
volc-poc | 火山引擎 VKE | 华北 2 (北京) | 一键注册 |
本场景涉及的关键配置说明如下,其他按需配置即可,详细操作步骤和配置项说明参见:注册现有集群(代理连接)。
配置项 | 说明 |
---|---|
集群名称 | 可自定义集群名称(本场景命名为:aliyun),命名规范:长度 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 负载均衡,即可通过公网连接管理主控实例。 |
当关联状态切换为已关联
时,表示集群添加成功,详细操作步骤和配置项说明参见:添加成员集群。
app-migration
的部署策略,用于多集群资源的跨集群分发策略配置。本场景涉及的关键配置如下,其他参数按需配置即可。详细操作步骤和配置项说明参见:创建部署策略(控制台)。
配置项 | 说明 |
---|---|
副本模式调度 | 默认开启(本场景开启此配置,并选择静态集群权重),针对部分资源(例如:Deployment)启用权重分发副本调度模式,支持动态集群权重、静态集群权重。 |
集群选择方式 | 选择部署策略最终调度的成员集群。本场景使用 指定集群 方式选择已经注册的 2 个目标成员集群,并将权重设置为各 50%。 |
避免中断现有副本 | 默认开启(本场景关闭此配置)。开启后,因扩缩容、策略更新、副本不可调度迁移等原因导致副本重分配时,不会影响当前已调度的副本。 |
副本不可调度迁移 | 默认关闭(本场景开启此配置)。开启后,当副本在成员集群中处于不可调度状态超过一定时间,会自动迁移到其他健康成员集群中。
|
dp-override
的差异化策略,用于 Deployment(fed-dp)资源在多云集群中镜像地址差异化配置。以下示例为适配火山引擎 VKE、阿里云 ACK Deployment 的镜像地址差异化策略。详细操作步骤和配置项说明参见:创建差异化策略(Yaml)。
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" # 替换为您的镜像仓库地址
资源清单及 Yaml 定义如下:
资源类型 | 资源名称 | 说明 |
---|---|---|
Deployment | fed-dp | 无状态负载,8 个副本。 |
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: 8 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
资源创建成功后, 可在联邦主控实例详情中分别查看联邦 Deployment 资源。如下图所示,资源已经按照各 50% 副本的策略成功分发到多个集群中,并且已经生效差异化策略。
上述配置完成后,可通过添加集群污点或下线节点等方式,验证应用迁移或故障自动迁移场景,详细介绍如下。
...
图标中的 污点管理。可以看到联邦 Deployment 资源视图中,已经没有 ACK 集群的副本分发,并将 4 个副本迁移到了 VKE 集群中。
...
中的 下线,将节点下线(本场景下线所有节点),构造应用无法正常运行场景。如下图所示,联邦 Deployment 视图中已分发到 VKE 集群中的可用副本数为 0。
约 1 分钟后(根据部署策略配置),原 VKE 中 4 副本已经成功迁移到 ACK 集群中,实现了应用故障恢复迁移。
如下图所示,联邦 Deployment 视图中已经迁移到 ACK 集群中的 4 个副本迁回到 VKE 中,实现了故障恢复迁回。