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

Helm 应用多集群部署

最近更新时间2023.11.15 14:00:04

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

分布式云原生平台支持 Helm 应用的多集群分发功能,本文为您介绍两种常用的 Helm 应用多集群分发方式。

方式一

场景介绍

alt

说明

Helm Chart 定义与安装的操作与单集群场景并无差异,为了实现多集群场景分发,需要进行以下配置:

  1. Helm 客户端会通过联邦主控实例暴露 KubeConfig 与 API Server 交互,进行 Helm Install 操作与普通 Kubernetes 集群操作一致。
  2. (可选) Chart 模板中待分发的资源定义需要关联部署策略和差异化策略。
  3. Chart 中资源关联的部署策略/差异化策略可在 Chart 模板中定义,也可以是联邦主控实例中已有资源。
优势劣势
  • 整体实现方案简单,兼容原生使用姿势。

  • 部署策略、差异化策略可以在 Helm 中定义并关联资源,分发场景十分灵活。

  • 成员集群中分发资源被修改后,会被及时覆盖。

  • 可对 deployment 关联部署策略,支持权重模式调度。

  • 已有 chart 需增加部署策略资源和资源关联策略内容。

  • 社区提供 Helm 的模板没法开箱即用。

  • 分发到的成员集群无法查看 Helm Release 实例。

  • 无法实现不同成员集群中的 values.yaml 参数覆盖(但可针对具体资源关联差异化策略)。

  • 支持 hook 机制,但 hook 涉及 Job 需要关联部署策略。

  • 暂时不支持产品化界面管理。

前提条件

  1. 已经创建联邦集群,并已添加成员集群构建可调度资源池。

  2. 已经获取联邦集群主控实例的 KubeConfig,且对应主控实例的 RBAC 权限可以创建 Chart 模板中的资源。

  3. 已安装 Helm 客户端(以 Helm 3 为例),可通过 Helm installuninstallupgrade 等命令与联邦主控实例 API Server 交互,进行 Helm 应用资源管理。

操作步骤

  1. 新建 Chart 模板 / 已有 Chart 模板资源定义。

可在全新的 Chart 模板中定义以下资源,或者基于现有的针对单集群的 Chart 模板进行调整(增加部署策略、差异化策略资源)。

templates 中资源包括: deployment、configmap、Ingress、service、propagationpolicy、overridepolicy

./
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── configmap.yaml
│   ├── ingress.yaml
│   ├── service.yaml
│   ├── propagationpolicy.yaml
│   ├── overridepolicy.yaml
│   ├── _helpers.tpl
│   ├── NOTES.txt
└── values.yaml
  1. 资源关联分发策略配置。
  • 场景一:Chart 模板中资源引用新建分发策略

    Chart 模板中 需要 定义部署策略和差异化策略,待分发的资源(例如:Deployment)资源定义中需要增加“通过 label 指定分发策略名称”。

  • 场景二:Chart 模板中资源引用已有分发策略

    Chart 模板中 无需 定义部署策略和差异化策略,待分发的资源(例如:Deployment)资源定义中需要增加“通过 label 指定分发策略名称”。

说明

建议使用跟随调度能力提升分发体验:
对于 ConfigMap、Secret、ServiceAccount、Service、Ingress 等资源,虽然可以单独指定部署策略,但为了配置简单和运维方便,建议使用跟随调度机制进行配置。

  1. 获取联邦主控实例 KubeConfig。

在分布式云原生平台的联邦主控实例详情页,获取该用户对应权限的 KubeConfig。

alt

  1. Helm 客户端进行 Chart 安装。

Helm 客户端使用以上配置的 Chart 模板以及联邦主控实例的 KubeConfig 进行 Chart 安装(Helm Install),需要说明可支持 value.yaml 安装参数覆盖。

  1. 分发到成员集群中资源修改/删除。

针对通过 Helm 应用分发到多个成员集群中的资源,可在成员集群中对该资源进行修改或删除操作,平台会自动安装 Chart 模板中的定义,进行资源覆盖/恢复。

  1. Helm 客户端进行已安装实例的管理。

对安装 Helm Release 实例进行 Upgrade、Rollback、Uninstall 操作,实现联邦主控实例中 Helm 应用的升级、回滚、卸载,同步更新成员集群中的资源。

示例如下:

alt

alt

alt

方式二

场景介绍

  1. 成员集群中安装 flux 进行实际的 Helm 应用部署。

  2. 联邦集群中安装 flux 的 CRD 资源,包括:HelmRepository、HelmRelease。

  3. 通过联邦 flux 资源关联部署策略,实现多集群 Helm 应用分发。

操作步骤

  1. 成员集群安装 flux,详细介绍参见:官方文档

  2. 参考以下文件中的 flux CRD 定义,在联邦集群中添加并开启 flux CRD 资源多集群分发能力。

HelmRelease.yaml
51.31KB
HelmRepository.yaml
26.30KB

alt

  1. 在联邦集群中创建资源并关联部署策略,将应用分发到目标成员集群中。Yaml 示例和部署配置示例如下:
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
metadata:
  name: bitnami
spec:
  interval: 1m
  url: https://charts.bitnami.com/bitnami
---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: my-nginx
spec:
  interval: 5m
  chart:
    spec:
      chart: nginx
      version: 15.3.0
      sourceRef:
        kind: HelmRepository
        name: bitnami

alt

  1. 查看联邦资源和 Helm 应用部署结果。

创建资源并关联部署策略完成后,可以看到联邦 flux 资源已经分发,成员集群中查看 flux 资源已分发,Helm 应用也已部署。

alt

alt