You need to enable JavaScript to run this app.
导航
单集群资源联邦化
最近更新时间:2024.01.19 14:39:13首次发布时间:2023.11.06 21:28:01

分布式云原生平台可指定单集群中存量的应用进行联邦化,方便快速稳定接管存量单集群应用,本文以实际场景为例,从 0 到 1 为您详细介绍单集群资源联邦化的最佳实践。

场景介绍

分布式云原生平台提供产品化的单集群资源联邦化功能,可凭借多集群调度引擎对存量单集群资源的无缝接管能力,做到无需改造应用及不影响现有业务运行的情况下转变为多集群联邦应用,联邦化后的应用可以通过修改分发策略实现多集群应用分发,或跨集群应用迁移。

流程概述

alt

资源联邦化核心流程:

  1. 将待联邦化资源所在容器集群(以下称源集群)添加到联邦主控实例中,作为联邦集群成员集群。

  2. 指定源集群中一个或多个待联邦化的资源,支持指定 Kubernetes 原生和 CRD 资源。

  3. 平台自动将单集群资源转化为联邦资源定义,并关联默认部署策略将资源分发到源集群,对单集群资源进行接管。

  4. 已经联邦化的资源可更新部署策略、差异化策略,实现多集群的资源分发/资源迁移。

组网说明

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 为例)。

使用限制

Kubernetes 版本范围:v1.17 ~ v1.24。

操作步骤

本场景从 0 到 1 为您详细介绍单集群资源联邦化场景的操作步骤,可参考如下步骤依次执行。

步骤一:前往 ACK 创建单集群资源

参考 ACK 集群中创建资源的官方介绍,前往阿里云 ACK 进行资源创建。本场景使用的资源清单和 Yaml 定义如下:

资源类型资源名称说明
Deploymentfed-dp-01无状态负载。
Deploymentfed-dp-02无状态负载。
Servicefed-service-01与 fed-dp-01(Deployment)关联的 LB 类型 Service。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: fed-dp-02
  namespace: default
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: fed-dp-02
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: fed-dp-02
    spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: nginx
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /pp
          name: v1
          readOnly: true
        - mountPath: /qq
          name: v2
          readOnly: true
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes:
      - configMap:
          defaultMode: 420
          name: fed-cm-02
        name: v1
      - name: v2
        secret:
          defaultMode: 420
          secretName: fed-secret-01
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: fed-dp-01
  namespace: default
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: fed-dp-01
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: fed-dp-01
    spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: nginx
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /pp
          name: v1
          readOnly: true
        - mountPath: /aa
          name: v2
          readOnly: true
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes:
      - configMap:
          defaultMode: 420
          name: fed-cm-01
        name: v1
      - name: v2
        secret:
          defaultMode: 420
          secretName: fed-secret-01
---
apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s1.small
  name: fed-service-01
  namespace: default
spec:
  ports:
    - name: test
      nodePort: 31922
      port: 80
      protocol: TCP
      targetPort: 80
  selector:
    app: fed-dp-01
  sessionAffinity: None
  type: LoadBalancer

步骤二:将容器集群注册/纳管到 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. 创建差异化策略:进入联邦主控实例的差异化策略页面,通过 Yaml 创建一个适配火山引擎 VKE 资源的差异化策略。

以下示例为适配火山引擎 VKE LB 类型 Service 的差异化策略,可为调度到 VKE 集群的 LB Service 增加 Annotation(负载均衡名称、子网、公网访问等配置)。详细操作步骤和配置项说明参见:创建差异化策略(Yaml)

apiVersion: core.kubeadmiral.io/v1alpha1
kind: OverridePolicy
metadata:
  name: volc-service-override
  namespace: default
spec:
  overrideRules:
  - overriders:
      jsonpatch:
      - operator: add
        path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-name
        value: test-svc # 替换为您的负载均衡名称
      - operator: add
        path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-subnet-id
        value: subnet-rrfc0aqw0yrkv0x58dutf68 # 替换为您的子网 ID
      - 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-isp-type
        value: BGP
      - operator: add
        path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-eip-billing-type
        value: "2"
      - operator: add
        path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-bandwidth
        value: "25"
      - operator: add
        path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-ip-version
        value: ipv4
      - operator: add
        path: /metadata/annotations/service.beta.kubernetes.io~1volcengine-loadbalancer-spec
        value: small_1
    targetClusters:
      clusters:
      - ccimgr0kcotmqodvr4cv0 # 替换为您的成员集群 ID
  1. 添加成员集群:进入联邦主控实例的成员集群页面,将火山引擎 VKE 集群和纳管的外部 ACK 集群添加到联邦集群。

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

alt

alt

步骤四:ACK 集群资源联邦化

在分布式云原生平台,将联邦成员集群 ACK 中的资源联邦化。

  1. 登录 分布式云原生控制台,在左侧导航栏选择 联邦主控实例,进入主控实例管理页面。
  2. 在主控实例列表,单击目标主控实例名称,进入主控实例配置页面。
  3. 在左侧导航栏选择 成员集群,进入成员集群列表,单击目标成员集群(本场景为上述添加的 ACK 集群)右侧操作列...图标中的 资源联邦化
  4. 在弹出的资源联邦化界面,配置 目标资源选择 相关信息,完成后单击 下一步:发布策略配置

alt

配置项说明
成员集群名称待联邦化资源所属的成员集群名称展示。
成员集群 ID待联邦化资源所属的成员集群 ID 信息展示。
资源级别通过资源级别筛选待联邦化的资源,包括:命名空间级、集群级。

命名空间

资源级别选择命名空间时需要配置,该命名空间表示成员集群中的命名空间,用于筛选待联邦化的资源。

说明

  • 资源联邦化需要保证联邦集群中有同名命名空间,可前往 命名空间 创建。

  • 不支持使用系统命名空间,包括:kube-admiral-system、kube-node-lease、kube-public、kube-system。

资源类型当前联邦集群中支持分发的资源类型均可,本场景选择 Deployment,对应步骤一中创建的资源。
选择资源添加待联邦化的资源,本场景选择步骤一中创建的 Deployment 资源
  1. 配置 发布策略配置 相关信息,完成后单击 确定,开始执行资源联邦化。

alt

分发策略配置步骤可配置 接管资源跟随调度,开启后工作负载挂载的卷(ConfigMap、Secret等)信息可自动识别后一并进行联邦化。

配置项说明

部署策略

资源联邦化过程将自动创建一个新的部署策略,并与已选部署资源关联。该策略中分发的目标成员集群为当前成员集群。

说明

资源联邦化完成后,可按需修改部署策略,以满足实际需求。

已选部署资源已选需要部署的资源信息展示,若开启接管资源跟随调度,将同时展示关联资源信息。

资源联邦化操作提交成功后,会自动生成部署策略与联邦资源关联,该部署策略目标分发集群为联邦化资源源集群。

alt

alt

结果验证

上述配置完成后,可通过修改部署策略来验证跨集群迁移和多集群分发功能,详细介绍如下。

修改部署策略实现跨集群迁移

将已经联邦化的 Service 资源关联火山引擎 VKE 集群适配的差异化策略,并将部署策略中分发的成员集群从 ACK 调整为 VKE 集群。

  • 新增差异化策略

    1. 登录 分布式云原生控制台,在左侧导航栏选择 联邦主控实例,进入主控实例管理页面。
    2. 在主控实例列表,单击目标主控实例名称,进入主控实例配置页面。
    3. 在左侧导航栏选择 工作负载 > 无状态负载,进入无状态负载管理页面。
    4. 单击目标工作负载右侧操作列...中的 新增差异化策略,完成后单击 确定

    alt

  • 更新部署策略

    1. 登录 分布式云原生控制台,在左侧导航栏选择 联邦主控实例
    2. 单击目标主控实例名称,进入主控实例配置页面,在左侧导航栏选择 策略管理 > 部署策略
    3. 在部署策略列表,单击目标部署策略右侧操作列的 更新策略
    4. 完成部署策略更新后,单击 确定,保存配置并开始资源重新分发。

    alt

可以看到资源已经从 ACK 集群迁移到 VKE 集群,且 VKE 集群中的 LB Service 资源已经进行差异化适配(新增 Annotation 配置)。

alt

alt

修改部署策略实现多集群分发

重复更新部署策略操作,同时指定 VKE 集群 和 ACK 集群,资源将会同时分发到两个成员集群中。

alt