You need to enable JavaScript to run this app.
导航

集群及应用故障迁移

最近更新时间2024.01.19 14:39:14

首次发布时间2023.11.06 21:28:01

分布式云原生平台支持通过多集群应用部署和故障迁移来提高业务的高可用性,本文以实际场景为例,从 0 到 1 为您详细介绍集群及应用故障迁移。

场景介绍

为了提高业务的高可用性,工作负载可能会被部署在多个集群中,当集群发生故障或应用在该集群中无法正常部署时,需要进行自动/手动故障迁移,进而保证用户业务的可用性与连续性。

  • 集群故障迁移:当集群发生故障(不健康或失联),或是不希望在某个集群上继续运行工作负载(如集群下线、升级)时,通常会手动进行集群应用驱逐,被驱逐的工作负载将被调度至其他健康的集群中。

  • 应用故障迁移:应用多集群分发场景下,当实例调度到目标成员集群后发生故障(无法调度),期望将故障副本自动重调度到其他健康集群中。

流程概述

alt

组网说明

alt

  1. 集群纳管:DCP 创建 1 个代理模式注册集群纳管集群 A;DCP 将已创建的 VKE 集群 B 一键注册纳管。
  2. 联邦集群:创建托管的联邦主控实例,并将以上集群 A、B 添加到主控实例中构建集群联邦。
集群类型地域VPCPod&Service CIDR
联邦主控实例集群联邦的主控实例华北 2 (北京)相同 VPC
集群 A阿里云 ACK 集群无特殊要求
集群 B火山引擎 VKE 集群

前提条件

  1. 已经注册火山引擎账号,并开通分布式云原生平台服务。
  2. 已经在火山引擎创建 1 个 VKE 集群,已经在第三方云平台创建 1 个第三方容器集群(本场景以阿里云 ACK 为例)。

操作步骤

本场景从 0 到 1 为您详细介绍集群及应用故障迁移场景的操作步骤,可参考如下步骤依次执行。

步骤一:将容器集群注册/纳管到 DCP

将容器集群注册/纳管到分布式云原生平台统一管理,后续可直接添加到联邦主控实例作为成员集群,用于联邦制资源分发。本场景使用的参数配置如下:

集群名称云服务商接入地域注册方式
aliyun阿里云 ACK华北 2 (北京)代理连接
volc-poc火山引擎 VKE华北 2 (北京)一键注册
  1. 一键注册火山引擎 VKE 集群:VKE 和 DCP 同属火山引擎,通过容器集群页面顶部的 注册接入,即可将 VKE 集群一键注册到分布式云原生平台,详细操作步骤和配置项说明参见:注册 VKE 集群

alt

  1. 通过代理模式注册 ACK 集群:通过容器集群页面 创建集群 > 注册集群,使用 代理连接 方式的两步操作,将 ACK 集群注册到分布式云原生平台。

alt

本场景涉及的关键配置说明如下,其他按需配置即可,详细操作步骤和配置项说明参见:注册现有集群(代理连接)

配置项说明
集群名称可自定义集群名称(本场景命名为:aliyun),命名规范:长度 2-64 个字符;支持英文字母、汉字、数字和中划线(-)。
云服务商分布式云原生适配的第三方平台集群(本场景选择阿里云 ACK),要求选择与待接入集群匹配的云服务商,否则可能导致部分功能不可用。
接入地域容器集群接入分布式云原生平台后所属的地域(本场景选择华北 2 (北京))。
私有网络待接入容器集群使用的私有网络。本场景 VKE 集群、ACK 集群和主控实例使用相同的 VPC。
API Server 公网访问默认关闭(本场景调整为:开启),若开启此配置,系统将自动创建 EIP 并关联主控实例 API Server 负载均衡,即可通过公网连接管理容器集群。

步骤二:搭建联邦集群基础环境

  1. 创建主控实例:进入联邦主控实例页面,创建主控实例,用于实现联邦集群管理、应用调度分发功能。

alt

本场景涉及的关键配置说明如下,其他按需配置即可,详细操作步骤和配置项说明参见:创建主控实例

配置项说明
实例名称自定义主控实例名称(本场景命名为:fed-poc),同一地域内不可重名。命名规则:长度 2~64 个字符,支持英文字母、汉字、数字和中划线(-)。
地域物理数据中心所在的地理区域(本场景选择华北 2 (北京)),资源创建后不支持更换地域。不同地域之间内网完全隔离,保证不同地域间最大程度的稳定性和容错性。
私有网络私有网络为云上资源构建隔离的、自主配置的虚拟网络环境,默认情况下,同一地域内同一私有网络下所有资源网络互通。本场景 VKE 集群、ACK 集群和主控实例使用相同的 VPC。

公网访问

默认关闭(本场景调整为:开启),若开启此配置,主控实例将支持通过公网访问并管理成员集群。

说明

开启后,若所选私有网络中已经创建 NAT 网关,将默认使用该网关;若所选私有网络中尚无 NAT 网关,将新建一个 NAT 网关并自动配置 SNAT 规则。

API Server 公网访问默认关闭(本场景调整为:开启),若开启此配置,系统将自动创建 EIP并关联主控实例 API Server 负载均衡,即可通过公网连接管理主控实例。
  1. 添加成员集群:进入联邦主控实例的成员集群页面,将火山引擎 VKE 集群和纳管的外部 ACK 集群添加到联邦集群。

当关联状态切换为已关联时,表示集群添加成功,详细操作步骤和配置项说明参见:添加成员集群

alt

alt

  1. 创建部署策略:进入联邦主控实例的部署策略页面,创建一个名称为app-migration的部署策略,用于多集群资源的跨集群分发策略配置。

alt

alt

本场景涉及的关键配置如下,其他参数按需配置即可。详细操作步骤和配置项说明参见:创建部署策略(控制台)

配置项说明
副本模式调度默认开启(本场景开启此配置,并选择静态集群权重),针对部分资源(例如:Deployment)启用权重分发副本调度模式,支持动态集群权重、静态集群权重。
集群选择方式选择部署策略最终调度的成员集群。本场景使用 指定集群 方式选择已经注册的 2 个目标成员集群,并将权重设置为各 50%
避免中断现有副本默认开启(本场景关闭此配置)。开启后,因扩缩容、策略更新、副本不可调度迁移等原因导致副本重分配时,不会影响当前已调度的副本。

副本不可调度迁移

默认关闭(本场景开启此配置)。开启后,当副本在成员集群中处于不可调度状态超过一定时间,会自动迁移到其他健康成员集群中。

  • 不可调度迁移时间:(本场景配置为 1 分钟)副本在成员集群中不可调度持续的时间阈值,取值范围:大于 1 的正整数,单位为分钟。

  • 故障恢复迁回:默认勾选(本场景开启此配置),副本迁移时会保留原集群不可调度的副本,当副本恢复后,迁移到其他集群的副本会被删除;若不勾选,副本迁移时原集群不可调度副本会被删除。

  1. 创建差异化策略:进入联邦主控实例的差异化策略页面,通过 Yaml 创建名称为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" # 替换为您的镜像仓库地址

步骤三:部署多集群应用

  1. 登录 分布式云原生控制台,在左侧导航栏选择 联邦主控实例,进入主控实例管理页面。
  2. 在主控实例列表,单击目标主控实例名称,进入主控实例配置页面。
  3. 在左侧导航栏选择 工作负载 > 无状态负载,进入无状态负载管理页面。
  4. 单击 使用 Yaml 创建资源,将准备好的 Yaml 内容粘贴到输入框,完成后单击 下一步:部署配置

资源清单及 Yaml 定义如下:

资源类型资源名称说明
Deploymentfed-dp无状态负载,8 个副本。
ConfigMapfed-cm被 fed-dp(Deployment)挂载的 ConfigMap。
Servicefed-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
  1. 在部署配置步骤中选择创建的部署策略,并为 Deployment 资源关联差异化策略,完成后单击 确定,即可开始创建无状态负载并实现多集群分发。

alt

资源创建成功后, 可在联邦主控实例详情中分别查看联邦 Deployment 资源。如下图所示,资源已经按照各 50% 副本的策略成功分发到多个集群中,并且已经生效差异化策略。

alt

alt

结果验证

上述配置完成后,可通过添加集群污点或下线节点等方式,验证应用迁移或故障自动迁移场景,详细介绍如下。

通过集群污点进行应用迁移验证

  • 添加污点:进入联邦主控实例成员集群菜单,选择 ACK 集群增加污点,并将「效果」配置为 NoExcute,表示立即驱逐资源。
  1. 登录 分布式云原生控制台,在左侧导航栏选择 联邦主控实例,进入主控实例管理页面。
  2. 在主控实例列表,单击目标主控实例名称,进入主控实例配置页面。
  3. 在左侧导航栏选择 成员集群,单击目标成员集群右侧操作列...图标中的 污点管理
  4. 通过键值对方式按需添加污点,完成后单击 确定

alt

可以看到联邦 Deployment 资源视图中,已经没有 ACK 集群的副本分发,并将 4 个副本迁移到了 VKE 集群中。

alt

  • 去除污点:将成员集群 ACK 集群的污点去除后,联邦 Deployment 资源按照部署策略权重重新将副本分发到两个集群中。

alt

应用副本故障自动迁移验证

  • 故障迁移:进入成员集群 VKE 集群中的节点模块,将所有节点进行下线操作,构造应用无法正常运行场景。
  1. 登录 分布式云原生控制台,在左侧导航栏选择 容器集群,进入主控实例管理页面。
  2. 单击目标容器集群名称,跳转到 VKE 集群管理页面。
  3. 在左侧导航栏选择 节点,进入节点管理页面。
  4. 单击目标节点右侧操作列...中的 下线,将节点下线(本场景下线所有节点),构造应用无法正常运行场景。

alt

如下图所示,联邦 Deployment 视图中已分发到 VKE 集群中的可用副本数为 0。

alt

约 1 分钟后(根据部署策略配置),原 VKE 中 4 副本已经成功迁移到 ACK 集群中,实现了应用故障恢复迁移。

alt

  • 故障恢复:将 VKE 集群中节点置为可调度,进行恢复操作。

alt

如下图所示,联邦 Deployment 视图中已经迁移到 ACK 集群中的 4 个副本迁回到 VKE 中,实现了故障恢复迁回。

alt