1. Helm v2 与 v3 核心架构差异
- Helm v2 时期 RBAC 未成为 K8s 主流权限机制,因此设计了独立的 Tiller 组件负责集群管理权限,安装部署时需赋予 Tiller 集群管理员权限;Tiller 与客户端通过 gRPC 协议通信,再调用 K8s API Server 完成资源创建、管理等操作,权限配置较为复杂。
- Helm v3 得益于 RBAC 的完整加持,可直接通过 ServiceAccount 完成认证授权,无需独立 Tiller 组件,直接走标准 K8s API 完成操作,架构更简洁安全;此外 v3 还做了多处功能微调,整体可用性大幅提升。
2. Helm 安装步骤
- 官方安装 v3 的方式:下载官方提供的安装脚本,添加执行权限后直接运行,即可安装最新稳定版 Helm v3,但该方式依赖 Docker Hub 或 Github 地址,国内访问速度较慢。
- 视频提供的离线安装方式:
- 提前准备好 Helm 二进制包,保存到本地后上传至服务器
- 执行
tar -zxvf命令解压包 - 将解压后的 Helm 二进制文件移动到
/usr/local/bin目录下 - 为二进制文件添加执行权限
- 执行
helm version验证安装,可正常输出版本号(视频中为 v3.12.3)即表示安装成功
- 安装完成后可清理无用安装包释放空间。
3. Helm 与 K8s 集群对接规则
- Helm 默认读取当前用户目录下的
~/.kube/config文件完成集群对接,权限与 kubectl 完全绑定:如果使用 dev 命名空间用户的 kubeconfig 文件,则 Helm 仅能操作 dev 命名空间下的资源,无法跨命名空间操作,需避免配置错误的低权限 kubeconfig 导致权限不足。
4. Helm 仓库配置与使用
- 注:Helm v2 版本默认内置 Bitnami 仓库,v3 版本默认无内置仓库,需手动添加第三方仓库才能搜索、安装 Chart 包。
- 添加仓库命令为
helm repo add <仓库名称> <仓库地址>,视频中使用官方推荐的 Bitnami 仓库,执行后会自动下载仓库下所有 Chart 包的索引信息,首次同步速度较慢。 - 常用仓库相关命令:
helm repo list:查看已添加的所有仓库,输出仓库名称、对应地址helm search repo <关键词>:搜索当前已添加仓库下的 Chart 包,支持模糊匹配,比如搜索mysql可找到 mysql、mysql-intel 两个不同版本的包helm search hub <关键词>:从 Helm Hub 官方公开的全量仓库中搜索 Chart 包,不局限于已添加的本地仓库,搜索结果更广,但不熟悉的仓库需注意安全性和可用性
- 已添加的仓库信息会持久化存储在
~/.config/helm/repository.yaml文件中,可直接查看或修改。 helm repo update:更新仓库索引,同步最新的 Chart 包版本、应用版本信息,类似 yum update 操作。
5. Chart 核心概念与查看命令
- Chart 是 Helm 的打包单元,可理解为 K8s 应用的“安装包”,是自包含的逻辑单元,包含部署应用所需的所有资源配置(Deployment、ConfigMap、Secret、Service 等),等价于 Linux 系统的 rpm 包、Ubuntu 系统的 deb 包。
- 常用 Chart 查看命令:
helm show values <仓库名>/<Chart名>:查看当前 Chart 所有可修改的配置参数,这些参数是 Chart 封装时抽象出的可变项,无需修改完整资源清单,仅调整对应参数即可自动生成适配当前环境的资源,大幅降低部署门槛(比如修改集群副本数仅需调整 replicas 参数即可)helm show chart <仓库名>/<Chart名>:查看 Chart 的整体元信息,对应 Chart.yaml 文件的内容helm show all <仓库名>/<Chart名>:查看 Chart 的所有信息,包括说明文档、依赖关系等,是最详细的查看方式。
6. Chart 安装、卸载与状态查看
- 基础安装命令:
helm install <自定义Release名称> <仓库名>/<Chart名>,其中--generate-name参数可自动生成随机的 Release 名称,也可手动指定名称,注意同一命名空间下 Release 名称不能冲突。 - Chart 内部资源对象有默认安装顺序,第一个为 Namespace(大部分 K8s 资源为命名空间级别,命名空间不存在则后续资源无法创建),其余顺序官方有完整文档可查。
- 安装完成后可通过
helm list查看已安装的 Release,输出包含版本号、更新时间、当前状态、Chart 名称、应用版本号等信息,支持版本回滚。 - 可通过
kubectl get pods -n <对应命名空间>验证 Pod 是否正常创建,确认应用部署成功。 - 卸载命令:v3 官方推荐使用
helm uninstall <Release名称>完成卸载,若添加--keep-history参数可保留该 Release 的历史版本,方便后续回滚;不加该参数则 Release 会被完全删除,仅执行helm list --keep-history可查看保留的历史版本。 helm status <Release名称>:查看当前 Release 的详细信息,包含安装时的输出信息,v3 相比 v2 做了简化,不会打印所有关联资源对象。
7. Chart 配置覆盖方法
Helm 支持两种配置覆盖方式,可灵活调整 Chart 的默认配置:
- 指定 values 文件覆盖:通过
-f参数指定自定义的 values.yaml 文件覆盖默认配置,可多次指定-f参数,最右侧文件的优先级最高,左侧配置会被右侧覆盖。 - 单参数覆盖:通过
--set参数指定单个配置项覆盖,适合仅修改少量参数的场景,无需编写完整的 values.yaml 文件。
- 优先级规则:两种方式同时使用时,
--set指定的配置会合并到 values 配置中,且--set的优先级高于-f指定的文件配置,可通过helm get values <Release名称>查看当前生效的最终配置。 - 升级 Chart 时可通过
--set重新指定参数覆盖之前的--set配置,也可通过helm upgrade <Release名称> <仓库名>/<Chart名> --set <参数>完成升级。 - 使用建议:改动较多、层级较深的配置建议通过
-f指定 values 文件管理,稳定、少量的配置可通过--set快速调整。 --set参数格式限制:- 支持传入 0 或多个键值对,基础用法为
--set key=value - 多参数用逗号隔开,例如
--set key1=value1,key2=value2 - 支持通过点号指定嵌套对象的键,例如
--set service.type=NodePort可直接修改 service 的 type 字段。
- 支持传入 0 或多个键值对,基础用法为
AI 总结
本视频为 Kubernetes v1.29 环境下的 Helm 基础教程,系统讲解了 Helm v2 与 v3 的架构差异、Helm 的离线安装方法、与 K8s 集群的权限对接规则、仓库配置与 Chart 搜索方法,以及 Chart 的安装、卸载、状态查看、配置覆盖等核心操作,覆盖了 Helm 作为 K8s 包管理工具的基础使用全流程,可帮助学习者快速掌握通过 Helm 简化 K8s 应用部署的能力。