Administrator
发布于 2026-08-19 / 0 阅读
0
0

第十章.k8sHELM-HELM安装及演示-2

来源链接:https://www.bilibili.com/video/BV1PbeueyE8V?spm_id_from=333.788.videopod.episodes&vd_source=d8c71ff24a3359a807967fc4b5daa0e4&p=72

【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 编写与安装

  1. 清理templates/目录下不需要的默认文件,仅保留需要的资源定义
  2. 编写资源文件,示例中包含:
    • NodePort类型Service:端口80,节点端口31111(避免端口冲突)
    • Deployment:副本数5,选择器匹配标签app: myapp,配置容器镜像与端口
  3. 编写values.yaml文件,定义可配置的默认值
  4. 安装Chart:执行helm install <Release名称> <Chart目录路径>,安装后可通过helm list查看已部署的Release,通过kubectl get pods、kubectl get svc验证资源运行正常,访问节点端口可得到默认响应

7.3 模板动态化实现

静态模板无法实现动态配置,通过Helm模板函数可实现动态生成资源清单:

  1. 编写NOTES.txt文件(存放于Chart根目录):为安装完成后打印给用户的提示信息,支持模板语法,示例中使用Go语言模板函数动态生成当前时间与Release名称,时间格式化遵循Go语言的参考时间规则2006-01-02 15:04:05
  2. 修改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配置
  3. 编写自定义values.yaml文件,覆盖默认配置(如副本数、镜像地址、Service类型、节点端口等)
  4. 安装自定义Chart后,可通过helm get values <Release名称>查看生效的配置,访问节点端口可看到动态生成的提示信息;后续修改配置只需调整values.yaml文件,重新执行helm upgrade即可生效,无需修改模板文件

AI 总结

本小节系统讲解了Helm的进阶使用能力,涵盖Values的多场景配置方法、Chart的多元安装途径、最小侵入式升级与版本回滚的原理及实操命令、常用子命令的适用场景、Release历史管理规则、仓库管理指令,最后通过自定义Chart的实战演示,明确了Chart目录结构、静态模板编写逻辑与模板动态化的核心实现方式,帮助学习者掌握Helm从基础操作到自定义Chart开发的全流程能力。


评论