K8s应用包管理器Helm初探
为什么需要Helm
由于Kubernetes缺少对发布的应用版本管理和控制,使得部署的应 用维护和更新等面临诸多的挑战,主要面临以下问题:
-
如何将这些服务作为一个整体管理?
-
这些资源文件如何高效复用?
-
不支持应用级别的版本管理
Helm介绍
Helm是一个Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt等,可以很方便的将之前 打包好的yaml文件部署到kubernetes上。
Helm有3个重要概念:
-
helm:一个命令行客户端工具,主要用于Kubernetes应用chart的创建、打包、发布和管理。
-
Chart:应用描述,一系列用于描述 k8s 资源相关文件的集合。
-
Release:基于Chart的部署实体,一个 chart 被 Helm 运行后将会生成对应的一个 release;将在 k8s中创建出真实运行的资源对象。
Helm目前有两个大版本:v2和v3
2019年11月Helm团队发布v3版本,相比v2版本最 大变化是将Tiller删除,并将大部分代码重构。
Helm客户端
使用helm很简单,你只需要下载一个二进制客户端包即可,会通过kubeconfig配置(通常 $HOME/.kube/config)来连接Kubernetes。
下载Helm客户端:
wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz |
Helm基本使用
Helm管理应用生命周期:
-
helm create 制作Chart
-
helm install 部署
-
helm upgrade 更新
-
helm rollback 回滚
-
helm uninstall 卸载
Helm基本使用:制作Chart
创建chart:
helm create mychart |
打包chart:
helm package mychart |
-
Chart.yaml:用于描述这个 Chart的基本信息,包括名字、描述信息以及 版本等。
-
values.yaml :用于存储 templates 目录中模板文件中用到变量的值。
-
Templates: 目录里面存放所有yaml模板文件。
-
charts:目录里存放这个chart依赖的所有子chart。
-
NOTES.txt :用于介绍Chart帮助信息, helm install 部署后展示给用户。 例如:如何使用这个 Chart、列出缺省的设置等。
-
_helpers.tpl:放置模板的地方,可以在整个 chart 中重复使用。
Helm基本使用:部署
Helm核心是模板,即模板化K8s YAML文件。
部署多个应用时,将需要改动的字段进行模板 化,可动态传入。
cd mychart/templates/ |
Helm基本使用:升级
为了实现Chart复用,可动态传参修改values.yaml中的 变量值,有两种方式:
-
–values,-f
-
–set
例如将升级应用版本和副本数:
helm upgrade --set imageTag=1.18,replicas=1 web mychart/ |
Helm基本使用:回滚、卸载
回滚到上一个版本:
helm rollback web |
查看历史版本:
helm history web |
回滚到指定版本:
helm rollback web 1 |
卸载应用:
helm uninstall web |
Helm基本使用:工作流程
helm install web mychart/ --dry-run #尝试运行但不执行,调式 |
公共Chart仓库
国内Chart仓库,可直接使用它们制作好的包:
添加仓库方式:
helm repo add azure http://mirror.azure.cn/kubernetes/charts/ |