Helm

my-app/
├── Chart.yaml          # Chart的基本信息
├── values.yaml         # 默认配置值
├── charts/            # 依赖的子chart
├── templates/         # Kubernetes资源模板
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── ingress.yaml
│   └── _helpers.tpl   # 模板助手函数
└── .helmignore        # 忽略文件列表

Helm Chart

什么是 Helm Chart?

Helm Chart 是 Kubernetes 应用的打包格式,类似于操作系统中的软件包(如 deb、rpm)。它是一组预先配置好的 Kubernetes 资源集合,使得部署复杂应用变得简单。

Helm Chart 的核心概念

  1. Chart:一个 Helm 包,包含了运行 Kubernetes 应用所需的所有资源定义

  2. Repository:存储和共享 Chart 的地方,类似于软件包仓库

  3. Release:在集群中运行的 Chart 的一个实例,每次安装 Chart 都会创建一个新的 release

Helm Chart 的结构

一个典型的 Helm Chart 包含以下文件和目录:


mychart/
  ├── Chart.yaml# 包含 Chart 元数据的文件
  ├── values.yaml# 默认配置值
  ├── templates/# 模板目录,包含资源定义模板
  │   ├── deployment.yaml# Kubernetes Deployment 模板
  │   ├── service.yaml# Kubernetes Service 模板
  │   └── ...# 其他 Kubernetes 资源模板
  ├── charts/# 依赖的子 Chart
  └── README.md# 使用说明

Helm 的主要优势

  1. 简化复杂应用部署

    • 一条命令可以部署包含多个组件的应用

    • 例如:helm install victoria-metrics-k8s-stack -n vm

  2. 配置管理

    • 通过 values.yaml 文件集中管理配置

    • 可以在安装或升级时覆盖默认配置

  3. 版本控制和回滚

    • 每次安装或升级都会创建新版本

    • 可以轻松回滚到之前的版本:helm rollback release-name 1

  4. 依赖管理

    • 可以定义和管理 Chart 之间的依赖关系

    • 类似于软件包管理器的依赖处理

  5. 模板化

    • 使用 Go 模板语言动态生成 Kubernetes 资源

    • 实现高度可配置的部署

Helm 常用命令

bash
# 安装 Charthelm install release-name chart-name

# 升级 Chart
helm upgrade release-name chart-name

# 卸载 Chart
helm uninstall release-name

# 列出已安装的 Chart
helm list

# 添加 Chart 仓库
helm repo add repo-name repo-url

# 更新本地仓库缓存
helm repo update

实际应用场景

在您的集群中,Victoria Metrics Stack 是通过 Helm Chart 部署的,这使得部署和管理如此复杂的监控系统变得简单。当您执行 helm uninstall victoria-metrics-k8s-stack -n vm 时,Helm 会自动删除所有相关的 Kubernetes 资源,包括 Deployments、Services、ConfigMaps 等。

Helm 是 Kubernetes 生态系统中的标准工具,广泛用于部署从简单应用到复杂分布式系统的各种工作负载。