Helm

介绍

Helm 是一个用于 Kubernetes 的包管理工具,允许用户定义、安装和升级复杂的 Kubernetes 应用程序。Helm 图表是一个模板化配置包,包含 Kubernetes 资源定义(YAML 文件)。

Helm 的核心概念

  • Chart:Helm 图表是一个模板化的配置包,包含 Kubernetes 资源定义(YAML 文件)。
  • Release:Helm 发布是已部署的 Helm 图表的实例,代表 Kubernetes 资源的特定配置。
  • Values:Helm 值是 Helm 图表的参数化配置,允许用户自定义 Kubernetes 资源定义。

Argo CD 与 Helm 的集成通过 Web 控制台、Argo CD 仪表板或 CLI,增强了 GitOps 实践,实现声明式的持续交付。示例如下:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: sealed-secrets
  namespace: argocd
spec:
  project: default
  source:
    chart: sealed-secrets
    repoURL: https://bitnami-labs.github.io/sealed-secrets
    targetRevision: 1.16.1
    helm:
      releaseName: sealed-secrets
  destination:
    server: "https://kubernetes.default.svc"
    namespace: kubeseal

OCI Helm Chart 示例:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: nginx
spec:
  project: default
  source:
    chart: nginx
    repoURL: registry-1.docker.io/bitnamicharts  # note: the oci:// syntax is not included.
    targetRevision: 15.9.0
  destination:
    name: "in-cluster"
    namespace: nginx
INFO

应用程序的生命周期由 Argo CD 管理,而非 Helm。 当提供多个值源时,优先顺序为:parameters > valuesObject > values > valueFiles > helm 仓库 values.yaml

优势

  • 模板化:Helm 使用 Go 模板引擎(gotpl)动态生成 Kubernetes 资源文件。

  • 包管理:Helm 将应用打包为图表(包括模板、默认值和依赖关系),简化了分发和版本控制。

  • 依赖管理:支持图表之间的依赖关系。

  • 生命周期管理:提供 installupgraderollback 等命令以进行完整的生命周期管理。

使用场景

  • 复杂应用部署:适用于需要动态生成配置的场景(例如,根据环境变量或用户输入生成资源)。

  • 多环境部署:通过 values.yaml 文件支持特定环境的配置。

  • 应用分发:能够将图表打包进行分发到 Helm 仓库或 OCI 注册表。

参考资料

更多详细信息,请参考:Helm