【k8s教程】薪享宏福Kubernetes v1.29 Helm 安装及演示2 笔记
1. Helm Values 配置指定方式
- 数组/列表指定:通过花括号
{}直接指定数组或列表类型的值 - 空类型指定:可通过
null或~指定空类型,空类型分为「设置为空」和「空数组」两种,二者概念不同 - 数组元素指定:可通过索引(如
array[0]、array[1]等)指定数组的特定元素进行设置 - 数组字段指定:可指定数组内某个字段,再配置对应参数
- 特殊字符转义:通过斜杠
\转义特殊字符,比如用\"保留双引号,避免被识别为转义字符
2. Helm 安装方式的灵活性
Helm 支持多种Chart包安装途径:
- 直接通过
helm install指定仓库名+Chart包名安装 - 先将Chart包下载到本地,再通过本地路径安装
- Chart包已解包的情况下,直接指定Chart包目录路径安装
- 手动指定Chart包的下载地址直接安装
3. Helm 升级与回滚操作
3.1 最小侵入式升级(helm upgrade)
- 核心原理:对比升级前与目标版本的资源差异,仅修改需要变更的部分,未变更的资源不会被覆盖
- 优势:避免不必要的资源重建,减少资源浪费,例如未修改的ConfigMap、参数完全一致的Pod不会触发重建,降低集群负载
- 命令格式:
helm upgrade <Release名称> <Chart包名> -f <values文件路径> - 演示示例:将已部署Release的Service类型从
NodePort升级为ClusterIP,仅需在values文件中修改Service.type字段,执行升级命令后,通过helm get values <Release名称>可验证配置生效,通过kubectl get svc可看到Service类型已更新为ClusterIP
3.2 版本回滚(helm rollback)
- 适用场景:升级后发布结果不符合预期、出现错误时,可回滚到指定历史版本
- Release版本规则:为增量修订号,每次安装、升级、回滚操作后版本号自动+1,初始安装后的Release版本号为1
- 查看历史版本命令:
helm history <Release名称>,可输出所有修订版本及对应的操作信息 - 回滚命令格式:
helm rollback <Release名称> <目标版本号> - 演示示例:执行
helm rollback walios-pm 1回滚到版本1,回滚后Service类型恢复为之前的NodePort,验证配置回滚成功
4. Helm 常用子命令
--timeout:设置操作超时时间,默认时长为5分钟,单位为Go时间类型(如5m、300s),超过时间未收到响应则判定操作失败--wait:等待所有关联资源都处于可用状态后,才结束命令执行;默认不加该参数时,只要命令返回结果即视为操作完成,官方不建议默认开启,避免不必要的等待耗时--no-hooks:跳过执行Chart中定义的钩子(Hooks),包括安装前、安装后钩子;升级/回滚时默认不会触发钩子,也不会重建所有Pod(默认行为为最小侵入式修改),加该参数会销毁并重建所有Pod,按需使用--force:强制重建所有Pod,放弃最小侵入式升级逻辑,按需选择
5. Release 历史记录管理
helm install安装Release时,默认仅保留1条历史记录- 升级、回滚操作时,默认会输出所有Release的历史记录
- 若需要保留历史记录,需在操作命令后添加
--keep-history参数 - 查看Release历史记录命令:
helm history <Release名称>
6. Helm 仓库管理命令
helm repo list:列出当前所有已配置的Chart仓库helm repo add <仓库名> <仓库地址>:添加新的Chart仓库,已配置过地址的仓库后续添加时无需重复指定地址helm repo update:更新当前所有仓库的元数据
7. 自定义 Chart 包编写演示
7.1 Chart 标准目录结构
通过helm create <Chart名称>可生成标准Chart模板,核心目录与文件如下:
Chart.yaml:Chart描述文件,包含Chart名称、应用版本号、维护者信息、创建时间等基础元数据dependencies字段(位于Chart.yaml内):声明当前Chart依赖的其他Chart,依赖的Chart包需存放在charts/目录下templates/目录:存放所有需要渲染的K8s资源清单文件,如Deployment、Service等YAML文件values.yaml:默认配置文件,存放可动态调整的配置项,用户可通过自定义values文件覆盖默认值,控制最终部署结果
7.2 静态 Chart 编写与安装
- 清理
templates/目录下不需要的默认文件,仅保留需要的资源定义 - 编写资源文件,示例中包含:
- NodePort类型Service:端口80,节点端口31111(避免端口冲突)
- Deployment:副本数5,选择器匹配标签
app: myapp,配置容器镜像与端口
- 编写
values.yaml文件,定义可配置的默认值 - 安装Chart:执行
helm install <Release名称> <Chart目录路径>,安装后可通过helm list查看已部署的Release,通过kubectl get pods、kubectl get svc验证资源运行正常,访问节点端口可得到默认响应
7.3 模板动态化实现
静态模板无法实现动态配置,通过Helm模板函数可实现动态生成资源清单:
- 编写
NOTES.txt文件(存放于Chart根目录):为安装完成后打印给用户的提示信息,支持模板语法,示例中使用Go语言模板函数动态生成当前时间与Release名称,时间格式化遵循Go语言的参考时间规则2006-01-02 15:04:05 - 修改
templates/下的Deployment.yaml,加入模板语法实现动态配置:- Release名称:通过
{{ .Release.Name }}动态获取 - 副本数:通过
{{ .Values.replicaCount }}读取values.yaml中的配置 - 镜像地址:通过
{{ .Values.image.repository }}:{{ .Values.image.tag }}拼接镜像名与标签 - 条件判断:通过
{{ if eq .Values.service.type "NodePort" }}判断Service类型,仅在类型为NodePort时添加nodePort配置
- Release名称:通过
- 编写自定义
values.yaml文件,覆盖默认配置(如副本数、镜像地址、Service类型、节点端口等) - 安装自定义Chart后,可通过
helm get values <Release名称>查看生效的配置,访问节点端口可看到动态生成的提示信息;后续修改配置只需调整values.yaml文件,重新执行helm upgrade即可生效,无需修改模板文件
AI 总结
本小节系统讲解了Helm的进阶使用能力,涵盖Values的多场景配置方法、Chart的多元安装途径、最小侵入式升级与版本回滚的原理及实操命令、常用子命令的适用场景、Release历史管理规则、仓库管理指令,最后通过自定义Chart的实战演示,明确了Chart目录结构、静态模板编写逻辑与模板动态化的核心实现方式,帮助学习者掌握Helm从基础操作到自定义Chart开发的全流程能力。