8. Helm 包管理
本文最后更新于41 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

一、Helm 简介

1. 什么是 Helm

Helm 是Kubernetes 的包管理器。

原生 kubectl 需要手动维护大量分散 yaml;Helm 把一套应用的所有资源封装为 Chart 包,实现一键安装、升级、回滚、卸载、多环境配置、模板复用。

✅ Helm 核心能力

  1. 简化部署:一条命令完成整套应用部署
  2. 版本管理:install/upgrade/rollback,升级故障快速回滚
  3. 配置解耦:通过 values.yaml/–set 区分开发、测试、生产环境
  4. 模板复用:Go Template 模板,消除重复 yaml 编写
  5. 包共享:Chart 可以上传仓库,团队复用

2. 三大核心概念⭐

表格

名词说明
Chart应用安装包。包含所有 k8s 资源模板 (deployment/service/configmap 等)、默认配置 values.yaml。类比 rpm/docker 镜像。
ReleaseChart 安装到集群后的运行实例。同一个 Chart 可以多次安装,生成多个独立 Release。
Repository(仓库)Chart 软件仓库,存放 tgz 格式 Chart 包;分为公共仓库 (bitnami)、私有仓库 (Harbor、ChartMuseum、OCI 仓库)。类比 yum 源、docker hub。

Artifact Hub:helm 的检索网站,本身不存储 Chart,只是搜索引擎。

  • helm search hub:联网查询 Artifact Hub
  • helm search repo:查询本地已经 add 的仓库缓存,不需要外网

3. Helm 工作流程

  1. 开发者编写 Chart 模板,打包 tgz 上传 Repository 仓库
  2. 用户 helm 客户端下载 Chart 包
  3. Helm 客户端本地做模板渲染:Chart 模板 + Values 配置 → 生成完整 k8s yaml
  4. helm 读取~/.kube/config,调用 apiserver,把渲染后 yaml 提交 k8s 集群创建资源
  5. 集群生成 Release 运行实例

⚠Helm3 是纯客户端工具,只需要安装在管理节点,集群内部不需要部署 helm 服务组件。

二、Helm 安装

只在操作机器(master / 跳板机)安装,不需要所有节点部署。

#下载
wget https://get.helm.sh/helm-v3.16.0-linux-amd64.tar.gz
#解压
tar -zxvf helm-v3.16.0-linux-amd64.tar.gz
#放到系统PATH
mv linux-amd64/helm /usr/local/bin/helm
#验证版本
helm version

三、Helm 仓库管理命令

#添加仓库(bitnami国内加速源)
helm repo add bitnami https://helm-charts.itboon.top/bitnami

#查看本地已添加仓库
helm repo list

#更新仓库本地缓存(获取最新chart版本)
helm repo update

#删除仓库
helm repo remove bitnami

#搜索本地仓库内chart
helm search repo bitnami/nginx --versions

#下载chart到本地,不安装;--untar自动解压
helm pull bitnami/nginx --version 22.1.1 --untar

四、Release 生命周期核心命令⭐

Release:集群上运行的应用实例;每个 release 有唯一名称。

1. install 安装 release

#基础安装
helm install my‑nginx bitnami/nginx -n nginx‑ns --create‑namespace

#--set 临时覆盖配置
helm install my‑nginx bitnami/nginx \
-n nginx‑ns --create‑namespace \
--set service.type=NodePort

# --dry‑run 模拟安装,只输出渲染后的yaml,**不真正部署集群,用于调试模板**
helm install my‑nginx bitnami/nginx --dry‑run -n nginx‑ns

参数说明

  • --namespace / -n 指定命名空间
  • --create‑namespace 命名空间不存在就自动创建
  • --set key.subkey=value 命令行覆盖 values 配置,多层 key 用.分隔

2. upgrade 升级 release

修改配置、升级 chart 版本,滚动更新,业务不中断

helm upgrade my‑nginx bitnami/nginx \
-n nginx‑ns \
--set service.type=ClusterIP

3. history 查看发布历史

每次 install、upgrade 都会生成一个REVISION修订版本号,版本从 1 开始递增。

helm history my‑nginx -n nginx‑ns

字段:REVISION 修订号、STATUS、CHART 版本、APP VERSION 业务镜像版本

4. rollback 版本回滚

升级出问题,回退到历史修订版本

#回退到revision=1版本
helm rollback my‑nginx 1 -n nginx‑ns

5. list 查询集群已经安装的 release

helm list -n nginx‑ns
helm list -A #全部命名空间

6. uninstall 卸载 release

删除 helm 创建的全部 k8s 资源(pod、svc、deployment 等)

helm uninstall my‑nginx -n nginx‑ns
#--keep‑history:卸载保留历史记录
helm uninstall my‑nginx -n nginx‑ns --keep‑history

7. show 查看 chart 信息

#查看chart元信息
helm show chart bitnami/nginx
#查看完整values.yaml默认配置
helm show values bitnami/nginx

重要区分

  • helm repo list:本地客户端配置的软件仓库列表,不等于集群安装应用
  • helm list:k8s 集群内部已经部署的 Release 实例

五、Chart 目录结构(解压后)

nginx/
├── Chart.yaml       ✅【必选】Chart元数据文件
├── values.yaml      ✅ 默认配置参数
├── Chart.lock       依赖锁定文件,锁定子chart精确版本
├── values.schema.json  values配置格式校验
├── README.md        chart说明文档
├── charts/          存放依赖的子Chart
└── templates/       ✅核心模板目录
    ├── deployment.yaml
    ├── service.yaml
    ├── ingress.yaml
    ├── _helpers.tpl    #模板公共函数片段
    ├── NOTES.txt      #安装完成输出提示文本
    └── tests/

1. Chart.yaml 元数据

表格

字段作用
apiVersion: v2helm3 固定版本
namechart 包名称
versionChart 包版本号(helm 包本身版本)
appVersion应用镜像版本,部署业务程序版本
dependencies子 chart 依赖列表
description描述

⚠区分:version是 helm 包版本;appVersion是业务镜像版本,二者可以不一样。

2. values.yaml

存放所有可配置参数;模板中通过{{ .Values.xxx }}语法读取变量。 安装时三种覆盖 values 的方式,优先级从低到高:

  1. chart 自带 values.yaml(最低优先级)
  2. -f my‑values.yaml外部自定义 values 文件
  3. --set key=value命令行参数(最高优先级)

3. templates / 模板目录

存放 k8s 资源模板 yaml;helm 结合 values 渲染,把{{ }}变量替换为真实值,输出最终 k8s 资源。

  • _helpers.tpl:下划线开头文件不会渲染为 k8s 资源,存放可复用模板片段。
  • NOTES.txt:安装结束输出给用户的提示信息。

4. charts/

存放依赖子 chart,例如 wordpress 依赖 mysql 子 chart。 Chart.yaml中dependencies声明依赖。

六、自定义 Chart 开发

1. 创建 chart 骨架

helm create mychart

自动生成完整目录结构。

2. 模板编写要点

  1. 使用{{ .Values.xxx }}读取 values.yaml 变量
#deployment.yaml片段
spec:
  replicas: {{ .Values.replicas }}
  containers:
  - name: nginx
    image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
  1. 调试模板:helm install xxx . --dry‑run,看渲染输出 yaml 是否正确。

3. 打包 chart

开发完成,把 chart 目录压缩为.tgz安装包,用于分发。

helm package mychart/
#输出 mychart‑0.1.0.tgz

4. OCI 私有仓库(Harbor)

现在主流使用 OCI 协议存储 chart 包:

#登录harbor oci仓库
helm registry login 192.168.100.149:80 --insecure -u admin -p xxx

#推送tgz包到harbor
helm push mychart‑0.1.0.tgz oci://192.168.100.149:80/helm --plain‑http

#从oci仓库安装
helm install my‑oci‑nginx oci://192.168.100.149:80/helm/mychart --plain‑http

七、离线部署流程(无外网环境)

  1. helm pull把远程 chart 下载到本地
  2. 解压或者直接使用 tgz 包
  3. 修改 values.yaml 配置镜像地址为内网镜像仓库
  4. 本地安装,.代表当前 chart 目录
helm install my‑nginx . -n test‑ns

八、实战:bitnami chart 部署 redis/mysql

bitnami 大量开源中间件提供现成 chart,支持主从复制、持久化存储,配合 StorageClass 动态 PV。

  1. 修改 values.yaml
    • global.storageClass:指定动态存储类名称
    • auth 密码配置,开启主从架构architecture: replication
  2. helm install 安装,可以用--set批量替换镜像仓库地址适配内网。
  3. helm upgrade 调整副本数量;helm rollback 故障回滚。

九、高频面试题速记

  1. Helm 三大核心概念 Chart、Release、Repository?
  • Chart:helm 应用包,包含 k8s 资源模板 + values 配置;
  • Release:Chart 部署到 k8s 集群的运行实例,一个 chart 可以生成多个 release;
  • Repository:chart 仓库,存放 tgz 包,公共 / 私有 harbor 仓库。
  1. version和appVersion区别(Chart.yaml)
  • version:Chart 软件包自身版本号;
  • appVersion:chart 里面封装的业务应用镜像版本。两者互相独立。
  1. values 配置覆盖优先级? chart 内置 values.yaml < -f 自定义values.yaml < --set命令行参数。
  2. helm install /upgrade/rollback /uninstall 作用?
  • install:首次安装 chart 生成 release;
  • upgrade:升级 release(改配置 / 升级 chart 版本);
  • rollback:回退到历史修订 revision 版本;
  • uninstall:卸载 release,删除所有 k8s 资源。
  1. helm dry‑run的作用? 模拟安装,不会向 k8s 集群创建任何资源;输出 helm 渲染完成后的 yaml,用于调试模板语法错误。
  2. helm repo list 和 helm list 的区别?
  • helm repo list:helm 客户端本地记录的软件仓库地址,和集群无关;
  • helm list:查询 k8s 集群中已经部署的 release 应用实例。
  1. helm 工作原理,helm3 有没有集群内组件? helm3 是纯客户端工具;helm 本地读取 chart 和 values 完成模板渲染,调用 kube‑apiserver 提交 yaml,集群内部不需要运行 helm 服务组件。
  2. templates 目录中下划线开头文件(_helpers.tpl)有什么特点? 不会被渲染成 k8s 资源,用来存放公共可复用模板片段,供其他模板引用。

十、核心命令速查表

#仓库
helm repo add / list / update / remove
helm search repo / hub
helm pull

#release管理
helm install
helm upgrade
helm history
helm rollback
helm list [-A]
helm uninstall
helm show values

#开发调试
helm create
helm package
helm install . --dry‑run

#oci私有仓库
helm registry login
helm push
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇