分布式云原生平台可指定单集群中存量的应用进行联邦化,方便快速稳定接管存量单集群应用,本文以实际场景为例,从 0 到 1 为您详细介绍单集群资源联邦化的最佳实践。
分布式云原生平台提供产品化的单集群资源联邦化功能,可凭借多集群调度引擎对存量单集群资源的无缝接管能力,做到无需改造应用及不影响现有业务运行的情况下转变为多集群联邦应用,联邦化后的应用可以通过修改分发策略实现多集群应用分发,或跨集群应用迁移。
资源联邦化核心流程:
将待联邦化资源所在容器集群(以下称源集群)添加到联邦主控实例中,作为联邦集群成员集群。
指定源集群中一个或多个待联邦化的资源,支持指定 Kubernetes 原生和 CRD 资源。
平台自动将单集群资源转化为联邦资源定义,并关联默认部署策略将资源分发到源集群,对单集群资源进行接管。
已经联邦化的资源可更新部署策略、差异化策略,实现多集群的资源分发/资源迁移。
集群 | 类型 | 地域 | VPC | Pod&Service CIDR |
---|---|---|---|---|
联邦主控实例 | 集群联邦的主控实例 | 华北 2 (北京) | 相同 VPC | — |
集群 A | 阿里云 ACK 集群 | 无特殊要求 | ||
集群 B | 火山引擎 VKE 集群 |
Kubernetes 版本范围:v1.17 ~ v1.24。
本场景从 0 到 1 为您详细介绍单集群资源联邦化场景的操作步骤,可参考如下步骤依次执行。
参考 ACK 集群中创建资源的官方介绍,前往阿里云 ACK 进行资源创建。本场景使用的资源清单和 Yaml 定义如下:
资源类型 | 资源名称 | 说明 |
---|---|---|
Deployment | fed-dp-01 | 无状态负载。 |
Deployment | fed-dp-02 | 无状态负载。 |
Service | fed-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
将容器集群注册/纳管到分布式云原生平台统一管理,后续可直接添加到联邦主控实例作为成员集群,用于联邦制资源分发。本场景使用的参数配置如下:
集群名称 | 云服务商 | 接入地域 | 注册方式 |
---|---|---|---|
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 负载均衡,即可通过公网连接管理主控实例。 |
以下示例为适配火山引擎 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
当关联状态切换为已关联
时,表示集群添加成功,详细操作步骤和配置项说明参见:添加成员集群。
在分布式云原生平台,将联邦成员集群 ACK 中的资源联邦化。
...
图标中的 资源联邦化。配置项 | 说明 |
---|---|
成员集群名称 | 待联邦化资源所属的成员集群名称展示。 |
成员集群 ID | 待联邦化资源所属的成员集群 ID 信息展示。 |
资源级别 | 通过资源级别筛选待联邦化的资源,包括:命名空间级、集群级。 |
命名空间 | 资源级别选择命名空间时需要配置,该命名空间表示成员集群中的命名空间,用于筛选待联邦化的资源。 说明
|
资源类型 | 当前联邦集群中支持分发的资源类型均可,本场景选择 Deployment,对应步骤一中创建的资源。 |
选择资源 | 添加待联邦化的资源,本场景选择步骤一中创建的 Deployment 资源。 |
分发策略配置步骤可配置 接管资源跟随调度,开启后工作负载挂载的卷(ConfigMap、Secret等)信息可自动识别后一并进行联邦化。
配置项 | 说明 |
---|---|
部署策略 | 资源联邦化过程将自动创建一个新的部署策略,并与已选部署资源关联。该策略中分发的目标成员集群为当前成员集群。 说明 资源联邦化完成后,可按需修改部署策略,以满足实际需求。 |
已选部署资源 | 已选需要部署的资源信息展示,若开启接管资源跟随调度,将同时展示关联资源信息。 |
资源联邦化操作提交成功后,会自动生成部署策略与联邦资源关联,该部署策略目标分发集群为联邦化资源源集群。
上述配置完成后,可通过修改部署策略来验证跨集群迁移和多集群分发功能,详细介绍如下。
将已经联邦化的 Service 资源关联火山引擎 VKE 集群适配的差异化策略,并将部署策略中分发的成员集群从 ACK 调整为 VKE 集群。
新增差异化策略
...
中的 新增差异化策略,完成后单击 确定。更新部署策略
可以看到资源已经从 ACK 集群迁移到 VKE 集群,且 VKE 集群中的 LB Service 资源已经进行差异化适配(新增 Annotation 配置)。
重复更新部署策略操作,同时指定 VKE 集群 和 ACK 集群,资源将会同时分发到两个成员集群中。