helm基础

简介

HelmKubernetes 的包管理器,类似 pythonpipcentos 中的 yum
具体文档可以看这个: helm.sh

使用的先决条件

  • 一个 Kubernetes 集群
  • 确定你安装版本的安全配置
  • 安装和配置 Helm

安装

  • 可以通过系统的包管理器安装,比如 apt 或者 dnf

  • 也可以通过下述方法安装:

    1
    2
    3
    curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
    chmod 700 get_helm.sh
    ./get_helm.sh
  • 也可以直接下载 Canary 构建。
    这些不是官方版本,可能不稳定。但是这提供测试边缘特性的条件。地址如下:

使用

三个基本概念

Chart 代表着 Helm 包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。你可以把它看作是 Homebrew formulaApt dpkg,或 Yum RPMKubernetes 中的等价物。

Repository(仓库) 是用来存放和共享 charts 的地方。它就像 PerlCPAN 档案库网络或是 Fedora软件包仓库,只不过它是供 Kubernetes 包所使用的。

Release 是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。以 MySQL chart 为例,如果你想在你的集群中运行两个数据库,你可以安装该 chart 两次。每一个数据库都会拥有它自己的 releaserelease name

使用 helm 安装软件即:
Helm 安装 chartsKubernetes 集群中,每次安装都会创建一个新的 release。你可以在 Helmchart repositories 中寻找新的 chart

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
helm completion # 为指定的shell生成自动补全脚本
helm create # 使用给定的名称创建chart
helm dependency # 管理chart依赖
helm env # helm客户端环境信息
helm get # 下载命名版本的扩展信息
helm history # 检索发布历史
helm install # 安装chart
helm lint # 验证chart是否存在问题
helm list # 列举发布版本
helm package # 将chart目录打包
helm plugin # 安装、列举或卸载Helm插件
helm pull # 从仓库下载chart并(可选)在本地目录中打开
helm push # 推送chart到远程
helm registry # 从注册表登录或登出
helm repo # 添加、列出、删除、更新和索引chart仓库
helm rollback # 回滚发布到上一个版本
helm search # helm中搜索关键字
helm show # 显示chart信息
helm status # 显示命名版本的状态
helm template # 本地渲染模板
helm test # 执行发布的测试
helm uninstall # 卸载版本
helm upgrade # 升级版本
helm verify # 验证给定路径的chart已经被签名且是合法的
helm version # 打印客户端版本信息

完成一个自己的helm chart

关于chart的个人理解

chart 在我感觉就是一个模板化的 k8s 中的 deploy 文件集合。
在原来使用 k8s 时,会提前定义好比如 service.yml,deployment.yml 等文件,然后通过 kubectl apply -f . 的方式部署。
这里有个问题就是,比如我需要升级项目,镜像版本从 v1 变成了 v2,就需要更改对应的文件,如果我想更改某个 deployment部署个数,也要修改配置文件,然后通过 kubectl 进行更新。
这样需要频繁修改 yml 文件,一不注意 yml 就会解析异常。而且除了手动备份 yml 之外,没有备份历史记录.
如果有个回退到某个时间的需要,需要寻找整个项目组所有当时的文件备份,很容易出错。

helm 就优化了这一流程。对于仅仅是镜像版本的更新或者部署个数的修改,都可以通过变量的方式传入,这样只需要一条 helm 命令,而不需要修改文件来进行操作。
对于不同版本的管理,helm 更是有自己的部署历史,可以很方便的回退到特定的版本

总结来说,Helm简化了 Kubernetes 应用程序的部署和管理过程,通过使用模板化Chart值的动态传递,减少了手动修改 YAML文件 的频率,并提供了版本管理回滚的功能,方便管理不同版本的应用程序。

创建一个helm chart

可以在安装好的 helm 服务器上使用 helm create demo 命令来创建一个名叫 demohelm chart 项目。

调试模板

1
2
3
4
helm lint # 是验证chart是否遵循最佳实践的首选工具。
helm template --debug # 在本地测试渲染chart模板。
helm install --dry-run --debug #这是让服务器渲染模板的好方法,然后返回生成的清单文件。
helm get manifest #这是查看安装在服务器上的模板的好方法

更多使用

可以参考这个 helm 中文文档

不同文件分析

需要特别说明, helm 并没有强制要求文件名,但是为了方便维护和团队合作,请不要随意命名。

  • Chart.yaml
    这个文件定义了整个 chart 的基本信息

  • values.yaml
    这里是安装时用来读取的参数列表,或者叫配置文件。但是他的优先级是最低的
    默认使用 values.yaml,可以被父 chartvalues.yaml 覆盖,继而被用户提供 values 文件 覆盖, 最后会被 --set 参数覆盖,优先级为 values.yaml 最低, --set 参数最高。

  • templates
    这里放的就是 helm chart模板文件。项目需要用到的比如 deployment.yamlservice.yaml 等都要放到这里。