使用 Helm 管理 Kubernetes 应用
最后更新于
最后更新于
Helm 是一个 Kubernetes 应用的包管理工具,用来管理 chart——预先配置好的安装包资源,有点类似于 Ubuntu 的 APT 和 CentOS 中的 YUM。2019 年 11 月 13 日,Helm 3 发布,2020 年 4 月 30 日,从 CNCF 中毕业。本文基于 Helm 3。
Helm chart 是用来封装 Kubernetes 原生应用程序的 YAML 文件,可以在你部署应用的时候自定义应用程序的一些 metadata,便与应用程序的分发。
Helm 和 chart 的主要作用是:
应用程序封装
版本管理
依赖检查
便于应用程序分发
下面是 Helm 的架构图。
Helm 可以安装本地或者远程的 chart,当 chart 安装到 Kubernetes 中后就会创建一个 release,每次更新该 chart 的配置并执行 helm upgrade
, release 的版本数就会加 1。同一个 chart 可以部署多次。
前提要求
Kubernetes 1.5 以上版本
执行 helm 命令的主机可以访问到 Kubernetes 集群
请参考 Helm 官方文档安装,对于 Mac 用户可以直接运行 brew install helm
安装即可。
下面我们将一步步创建一个 chart 来说明其组织结构。
首先使用 helm create mychart
创建一个名为 mychart
的示例,我们再使用 tree mychart
命令看一下 chart 的目录结构。
以上仅为 helm 为我们自动创建的目录结构,我们还可以在 templates
目录加其他 Kubernetes 对象的配置,比如 ConfigMap
、DaemonSet
等。
我们查看下使用 helm create
命令自动生成的 templates/service.yaml
文件。
可以看到其中有很多{{ }}
包围的字段,这是使用的 Go template 创建的自定义字段,其中 mychart
开头的都是在 _helpers.tpl
中生成的定义。
例如 _helpers.tpl
中对 chart.fullname
的定义:
我们再看下 values.yaml
文件中有这样的一段配置:
在使用 helm install
或 helm update
时,会渲染 templates/service.yaml
文件中的 {{ .Values.service.type }}
和 {{ .Values.service.port }}
的值。
Helm 常用命令如下:
helm create
:在本地创建新的 chart;
helm dependency
:管理 chart 依赖;
helm intall
:安装 chart;
helm lint
:检查 chart 配置是否有误;
helm list
:列出所有 release;
helm package
:打包本地 chart;
helm repo
:列出、增加、更新、删除 chart 仓库;
helm rollback
:回滚 release 到历史版本;
helm pull
:拉取远程 chart 到本地;
helm search
:使用关键词搜索 chart;
helm uninstall
:卸载 release;
helm upgrade
:升级 release;
使用 helm -h
可以查看 Helm 命令行使用详情,请参考 Helm 文档。
安装 chart 的命令格式为:
示例:
其中:
myvalues.yaml
:自定义变量配置文件;
myredis
:release 名称;
./redis
:本地的 chart 目录;
Helm chart 安装后会转化成 Kubernetes 中的资源对象,生成一个 chart release,可以使用 helm list
命令查看。
关于 helm intsall
详细用法见:https://helm.sh/docs/helm/helm_install/。
要想升级 chart 可以修改本地的 chart 配置并执行:
使用 helm ls
的命令查看当前运行的 chart 的 release 版本,并使用下面的命令回滚到历史版本:
要想卸载 chart 可以使用下面的命令。