Helm入门

KServe 把 helm 列为安装 KServe 和其他 Kubernetes operators 的工具之一,故需恶补一番。

Helm 之 Kubernetes 的"应用安装包管理器"

    • [一、Helm 是什么?](#一、Helm 是什么?)
    • 二、本篇博客会带你收获啥?
    • [三、Helm 的三个核心概念](#三、Helm 的三个核心概念)
      • [1. Chart:应用安装包](#1. Chart:应用安装包)
      • [2. Repository:Chart 仓库](#2. Repository:Chart 仓库)
      • [3. Release:安装后的实例](#3. Release:安装后的实例)
    • [四、安装 Helm](#四、安装 Helm)
    • [五、你必须先明白:Helm 和 kubectl 的区别](#五、你必须先明白:Helm 和 kubectl 的区别)
    • [六、Helm 实操(从 0 到 1)](#六、Helm 实操(从 0 到 1))
      • [1. 创建目录](#1. 创建目录)
      • [2. 创建 Chart.yaml](#2. 创建 Chart.yaml)
      • [3. 创建 values.yaml](#3. 创建 values.yaml)
      • [4. 创建模板文件](#4. 创建模板文件)
    • 七、先不要安装,先渲染看看
    • [八、真正安装这个 Chart](#八、真正安装这个 Chart)
    • [九、查看 Helm 生成的最终 YAML](#九、查看 Helm 生成的最终 YAML)
    • [十、修改 values.yaml,然后升级](#十、修改 values.yaml,然后升级)
    • [十一、卸载 Helm Release](#十一、卸载 Helm Release)
    • [十二、Helm Chart 的标准目录结构](#十二、Helm Chart 的标准目录结构)
    • [十三、你应该如何理解 values.yaml?](#十三、你应该如何理解 values.yaml?)
    • [十四、Helm 和 K8s YAML 的关系](#十四、Helm 和 K8s YAML 的关系)
    • 十五、入门阶段的总结

一、Helm 是什么?

Helm 是 Kubernetes 里的包管理工具。

就像 Ubuntu 里的 apt 安装管理器。

Kubernetes 原本部署应用,需要写很多 YAML,比如:

text 复制代码
Deployment
Service
ConfigMap
Secret
Ingress
PVC
ServiceAccount
Role
RoleBinding
CRD

如果一个应用很复杂,你每次都手写、复制、修改这些 YAML,就会很痛苦。Helm 的作用就是把这些 YAML 打包成一个 Chart,然后通过一条命令安装、升级、回滚、卸载。

二、本篇博客会带你收获啥?

因为我接下来要搞 KServe、vLLM、AI Native 方向,所以 Helm 最少需要:

text 复制代码
1. 知道 Helm 是 Kubernetes 包管理器
2. 知道 Chart / Repository / Release 是什么
3. 会 helm install 安装应用
4. 会 helm list 查看应用
5. 会 helm upgrade 更新应用
6. 会 helm uninstall 卸载应用
7. 会看 values.yaml
8. 会用 -f 指定配置文件
9. 会用 helm template 看最终 YAML
10. 能大概看懂 templates 目录里的 Deployment、Service、ConfigMap

暂时不需要深入这些:

text 复制代码
复杂模板函数
_helpers.tpl 高级封装
子 Chart 依赖管理
Chart 仓库发布
Helm hook
Helm plugin
Helmfile
OCI Chart 深度管理

这些等真正遇到 KServe、Prometheus、Grafana、Kubeflow 的复杂部署时,再补。

三、Helm 的三个核心概念

Helm 官方文档里把 Helm 使用时的三个核心概念概括为:Chart、Repository、Release

1. Chart:应用安装包

Chart 就是 Helm 的"安装包"。

你可以把它理解成:

text 复制代码
Chart = 一堆 Kubernetes YAML 模板 + 默认配置文件

比如一个 nginx Chart,里面可能包含:

text 复制代码
Deployment.yaml
Service.yaml
Ingress.yaml
ConfigMap.yaml
values.yaml
Chart.yaml

Helm 官方对 Chart 的定义是:Chart 是一组文件,用来描述一组相关的 Kubernetes 资源;一个 Chart 可以部署简单的 memcached Pod,也可以部署复杂的 Web 应用栈。

2. Repository:Chart 仓库

Repository 就是 Helm Chart 的仓库。

你可以理解成:

text 复制代码
Docker 镜像放在 Docker Hub
Helm Chart 放在 Chart Repository

平时你可以从仓库里下载别人写好的 Chart,然后安装到自己的 Kubernetes 集群里。

3. Release:安装后的实例

Release 是 Chart 被安装到 Kubernetes 集群后的实例。

举个例子:

bash 复制代码
helm install my-nginx nginx-chart

这里:

text 复制代码
nginx-chart 是 Chart
my-nginx 是 Release

同一个 Chart 可以安装多次,每次安装出来都是一个不同的 Release。Helm 官方也说明,一个 Chart 可以在同一个集群中安装多次,每次安装都会创建一个新的 Release。

你可以这样理解:

text 复制代码
Chart:安装包
Release:安装后的应用实例

四、安装 Helm

我之前通过 vmware ,Ubantu版本,部署过一主二从集群。

我只需要在 master 所在的集群,安装 helm 即可。

Helm 官方 Ubuntu/Debian apt 安装方式现在用 Buildkite 源,命令如下。

复制代码
sudo apt-get update
sudo apt-get install -y curl gpg apt-transport-https

添加 Helm 的 GPG key:

复制代码
curl -fsSL https://packages.buildkite.com/helm-linux/helm-debian/gpgkey | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
# 表示以后从 Helm 软件源下载的软件包,我信任这个签名来源

添加 Helm apt 源:

复制代码
echo "deb [signed-by=/usr/share/keyrings/helm.gpg] https://packages.buildkite.com/helm-linux/helm-debian/any/ any main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list

安装 Helm:

复制代码
sudo apt-get update
sudo apt-get install -y helm

验证:

复制代码
helm version

然后验证 Helm 能不能连你的 K8s 集群:

复制代码
helm list -A

如果这里没有报错,只是显示空列表,说明 Helm 正常。

五、你必须先明白:Helm 和 kubectl 的区别

先看 kubectl

bash 复制代码
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl apply -f configmap.yaml

它是直接把 YAML 提交给 Kubernetes。

再看 Helm:

bash 复制代码
helm install my-app ./my-chart

helm 不是简单提交一个 YAML,而是可以:

text 复制代码
读取 Chart
读取 values.yaml 配置
把 templates 目录里的模板渲染成真正的 Kubernetes YAML
把最终 YAML 提交给 Kubernetes
记录这次安装,形成 Release

从宏观来说,

通常 kubectl 直接操作 Kubernetes 资源

而 Helm 管理一组 Kubernetes 资源的安装、升级、回滚、卸载

六、Helm 实操(从 0 到 1)

先不安装复杂应用,只做一个最小例子。

目标:用 Helm 创建一个 ConfigMap。

1. 创建目录

bash 复制代码
mkdir -p hello-helm/templates
cd hello-helm

目录结构先变成:

text 复制代码
hello-helm/
  templates/

2. 创建 Chart.yaml

hello-helm 目录下创建 Chart.yaml

yaml 复制代码
apiVersion: v2
name: hello-helm
version: 0.1.0
description: A simple Helm chart for learning

解释一下:

text 复制代码
apiVersion: Chart 的 API 版本
name: Chart 名字
version: Chart 自己的版本
description: 描述

Helm 官方文档说明,Chart.yaml 是 Chart 必需文件,里面包含 Chart 的名称、版本等信息。

3. 创建 values.yaml

创建 values.yaml

yaml 复制代码
message: "Hello Helm"

这个文件是默认配置。

你可以理解成:

text 复制代码
values.yaml = 变量配置文件
templates = YAML 模板

Helm 官方模板指南也说明,values.yaml 包含 Chart 的默认值,并且用户可以在 helm installhelm upgrade 时覆盖这些值。

4. 创建模板文件

templates 目录下创建 configmap.yaml

yaml 复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-config
data:
  message: {{ .Values.message | quote }}

这里有两个新东西:

text 复制代码
{{ .Release.Name }}
{{ .Values.message }}

解释:

text 复制代码
.Release.Name:当前 Release 的名字
.Values.message:读取 values.yaml 里的 message
quote:给值加双引号,避免 YAML 格式出问题

也就是说,如果你执行:

bash 复制代码
helm install demo ./hello-helm

那么:

yaml 复制代码
name: {{ .Release.Name }}-config

会被渲染成:

yaml 复制代码
name: demo-config

而:

yaml 复制代码
message: {{ .Values.message | quote }}

会被渲染成:

yaml 复制代码
message: "Hello Helm"

Helm 官方文档也展示了类似的模板写法,比如通过 {``{ .Release.Name }} 把 Release 名称注入到模板中。

七、先不要安装,先渲染看看

hello-helm 的上一级目录执行:

bash 复制代码
helm template demo ./hello-helm

你会看到 Helm 渲染出来的 Kubernetes YAML,大概是:

yaml 复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: demo-config
data:
  message: "Hello Helm"

这里非常重要:

text 复制代码
helm template 只是本地渲染,不会真正安装到 Kubernetes。

所以你以后看到一个 Chart 不确定对不对,可以先:

bash 复制代码
helm template xxx ./chart目录

看它最终会生成什么 YAML。

八、真正安装这个 Chart

执行:

bash 复制代码
helm install demo ./hello-helm

这里:

text 复制代码
demo:Release 名字
./hello-helm:Chart 目录

查看 Helm Release:

bash 复制代码
helm list

查看 Kubernetes 里的 ConfigMap:

bash 复制代码
kubectl get configmap

你应该能看到:

text 复制代码
demo-config

查看这个 ConfigMap:

bash 复制代码
kubectl get configmap demo-config -o yaml

九、查看 Helm 生成的最终 YAML

执行:

bash 复制代码
helm get manifest demo

这个命令会显示 Helm 这次安装时真正提交给 Kubernetes 的资源内容。Helm 官方模板入门文档也使用 helm get manifest 来查看 Release 实际加载的模板内容。

你可以记住:

bash 复制代码
helm get manifest release名字

它的作用是:

text 复制代码
查看这个 Helm Release 背后到底生成了哪些 Kubernetes YAML

十、修改 values.yaml,然后升级

现在把 values.yaml 改成:

yaml 复制代码
message: "Hello Kubernetes and Helm"

然后执行:

bash 复制代码
helm upgrade demo ./hello-helm

再查看:

bash 复制代码
kubectl get configmap demo-config -o yaml

你会发现 message 变了。

这就是 Helm 的升级能力。

Helm 官方 helm upgrade 文档说明,这个命令用于把一个 Release 升级到 Chart 的新版本,参数通常是 Release 名和 Chart。

十一、卸载 Helm Release

执行:

bash 复制代码
helm uninstall demo

再查看:

bash 复制代码
helm list
kubectl get configmap

你会发现 Release 没了,对应的 ConfigMap 也被删除了。

这就是 Helm 比单纯 kubectl apply 更方便的地方:

text 复制代码
它知道这一组资源属于哪个 Release。
卸载时,它可以把这组资源一起删掉。

十二、Helm Chart 的标准目录结构

一个常见 Chart 大概长这样:

text 复制代码
my-chart/
  Chart.yaml
  values.yaml
  charts/
  templates/
    deployment.yaml
    service.yaml
    ingress.yaml
    configmap.yaml
    secret.yaml
    _helpers.tpl
    NOTES.txt

Helm 官方文档中列出的 Chart 结构也包含 Chart.yamlvalues.yamlcharts/crds/templates/ 等目录或文件;其中 templates/ 会和 values 结合生成有效的 Kubernetes manifest。

你入门阶段重点看这几个:

text 复制代码
Chart.yaml:描述这个 Chart
values.yaml:默认配置
templates/:模板目录,里面是 Kubernetes YAML 模板
charts/:依赖的子 Chart
crds/:CRD 资源

其中最重要的是:

text 复制代码
values.yaml + templates/

因为 Helm 的核心就是:

text 复制代码
把 values.yaml 里的变量,填充到 templates 里的 YAML 模板中。

十三、你应该如何理解 values.yaml?

text 复制代码
values.yaml 是配置表。
templates 里的 YAML 是模板。
Helm 会把配置表里的值填进模板里。

就相当于 之博客中说的 configmap、secret 那种,不要把变量写死到镜像里。

十四、Helm 和 K8s YAML 的关系

Helm 不是替代 Kubernetes YAML,

它本质上还是生成 Kubernetes YAML。

十五、入门阶段的总结

现在只需要记住这张关系图:

text 复制代码
values.yaml
    ↓
templates/*.yaml
    ↓
helm template 渲染
    ↓
真正的 Kubernetes YAML
    ↓
提交给 Kubernetes API Server
    ↓
创建 Pod / Service / ConfigMap / CRD 等资源

或者更简单来说:Helm = Kubernetes YAML 模板引擎 + 应用安装管理工具

相关推荐
Cat_Rocky12 小时前
k8s prometheus监控平台-alertmanager告警
运维·kubernetes·prometheus
ai_coder_ai13 小时前
在后端服务中如何调用自动化脚本云端的FaaS
云原生·自动化脚本·冰狐智能辅助·easyclick
容器魔方13 小时前
Karmada 用户组再迎新成员,Wellhub 正式加入!
人工智能·云原生·容器·开源
huipeng9261 天前
企业级微服务开发实战(一):项目启动与工程化设计
java·开发语言·spring boot·spring cloud·微服务·云原生·架构
阿里云云原生1 天前
阿里云正式发布 RCA Benchmark,业界首个面向 Agentic Ops 的根因分析开源基准体系
云原生
marsh02061 天前
56 openclaw与Serverless:无服务器架构下的应用实践
云原生·架构·serverless
Patrick_Wilson1 天前
写给前端的 K8s 入门:用一张图和一个例子搞懂 5 个核心概念
云原生·kubernetes·devops
凌睿马1 天前
离线的银河麒麟系统部署ollama
云原生·eureka
java1234_小锋1 天前
【吊打面试官系列-ZooKeeper面试题】zookeeper 是如何保证事务的顺序一致性的?
分布式·zookeeper·云原生