helm基础
参考文档:
https://zhuanlan.zhihu.com/p/350328164
helm概念s
helm是kubernetes生态系统中的一个软件包管理工具,类似ubuntu的apt,centos的yum或python的pip一样,专门负责管理kubernetes应用资源;使用helm可以对kubernetes应用进行统一打包、分发、安装、升级以及回退等操作。
Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。你可以在 Helm 的 chart repositories 中寻找新的 chart。
解决的问题:
- 难管理,每个服务都有若干配置,缺乏更高层次的组织方式。
- 不容易将这些服务作为一个整体发布,部署人员需要理解都包含哪些服务、服务间的逻辑顺序,缺少依赖关系的管理。
- 不能高效的共享和重用。
- 没有应用级别的版本管理,现有的回滚是针对 deployment的,不支持整个应用。
- 不支持应用状态的验证,kubernetes的健康检查是针对单个容器的,我们需要应用级别的检查。
helm的核心流程
- 从chart仓库中获取chart;
- 使用者配置自己的values文件,根据自己的运行环境对values进行修改;
- 默认values文件和使用者values文件会进行一个merge,形成最终的values文件;
- 使用最终的values文件,渲染chart的template,形成可以被kubernetes执行的yaml;
- 调用kube apply提交yaml到kubernetes
安装helm (二进制版)
1 | 1、wget https://get.helm.sh/helm-v3.8.1-linux-amd64.tar.gz |
基本命令
在repo 或 hub中搜索一个chart
1 | helm search repo redis / helm search hub redis |
安装一个helm包
1 | helm install bitnami/redis --generate-name (helm自动生成名字) |
查看release状态
1 | helm status test-redis |
想配置选项前 先查看chart中可配置的选项
1 | helm show values bitnami/redis |
安装过程中覆盖原始配置
1 | # 两种方式: |
升级release
1 | helm upgrade -f test.yaml test-redis bitnami/redis |
回滚版本
1 | helm rollback test-redis 1 |
卸载release
1 | helm uninstall test-redis |
打印出已上传到server的K8S资源
1 | helm get manifest [release name] |
Chart模板
想测试模板渲染内容,不想安装应用命令
1 | helm install --debug --dry-run name ./xxx |
创建模板命令
1 | helm create mychart |
已存在文件:
- NOTES.txt: chart的”帮助文本”。这会在你的用户执行helm install时展示给他们。
- deployment.yaml: 创建Kubernetes 工作负载的基本清单
- service.yaml: 为你的工作负载创建一个 service终端基本清单。
- _helpers.tpl: 放置可以通过chart复用的模板辅助对象
内置对象列表:
https://helm.sh/zh/docs/chart_template_guide/builtin_objects/
Values文件
可以来自于多个位置(优先级依次变高):
- chart中的values.yaml文件
- 如果是子chart,就是父chart中的values.yaml文件
- 使用-f参数(helm install -f myvals.yaml ./mychart)传递到 helm install 或 helm upgrade的values文件
- 使用–set (比如helm install –set foo=bar ./mychart)传递的单个参数
Notes: 如果想删除默认的key,就把默认的key指定为null
常用函数:
https://helm.sh/zh/docs/chart_template_guide/functions_and_pipelines/
https://helm.sh/zh/docs/chart_template_guide/function_list/
流控制:
https://helm.sh/zh/docs/chart_template_guide/control_structures/
变量:
https://helm.sh/zh/docs/chart_template_guide/variables/
赋值以及引用:
1 | {{ $name := "test" }} |
命名模板
https://helm.sh/zh/docs/chart_template_guide/named_templates/
定义以及使用:
1 | # 定义: |
一般模板放在局部文件中,通常是在_helpers.tpl
访问文件
https://helm.sh/zh/docs/chart_template_guide/accessing_files/
helm通过.Files访问文件。需要注意:
- 可以添加额外的文件到chart中。虽然这些文件会被绑定。但是要小心,由于Kubernetes对象的限制,Chart必须小于1M。
- 通常处于安全考虑,一些文件无法通过.Files对象访问:
- 无法访问templates/中的文件
- 无法访问使用.helmignore排除的文件
- helm应用 subchart之外的文件,包括父级中的,不能被访问的
- Chart不能保留UNIX模式信息,因此当文件涉及到.Files对象时,文件级权限不会影响文件的可用性
1 | # 把文件内容写到configMap中 |
子chart和全局值
https://helm.sh/zh/docs/chart_template_guide/subcharts_and_globals/
- 子chart被认为是“独立的”,意味着子chart从来不会显示依赖它的父chart。
- 子chart无法访问父chart的值。
- 父chart可以覆盖子chart的值。
- Helm有一个 全局值 的概念,所有的chart都可以访问。
调试模板命令
https://helm.sh/zh/docs/chart_template_guide/debugging/



