kubernetes应用包管理器helm上
1165字约4分钟
2024-09-29
为什么需要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。
项目地址:https://github.com/helm/helm
下载Helm客户端:
wget https://get.helm.sh/helm-v3.4.2-linux-amd64.tar.gz
tar zxvf helm-v3.4.2-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/
Helm基本使用
Helm管理应用生命周期:
- helm create 创建Chart示例 
- helm install 部署 
- helm upgrade 更新 
- helm rollback 回滚 
- helm uninstall 卸载 
Helm基本使用:创建Chart示例
创建chart:
helm create mychart # 默认示例中部署的是一个nginx服务打包chart:
helm package mychart- charts:目录里存放这个chart依赖的所有子chart。 
- Chart.yaml:用于描述这个 Chart的基本信息,包括名字、描述信息以及版本等。 
- values.yaml :用于存储 templates 目录中模板文件中用到变量的值。 
- Templates: 目录里面存放所有yaml模板文件。 
- NOTES.txt :用于介绍Chart帮助信息, helm install 部署后展示给用户。例如: 如何使用这个 Chart、列出缺省的设置等。 
- _helpers.tpl:放置模板的地方,可以在整个 chart 中重复使用。 
Helm基本使用:部署
部署Chart:
helm install web mychart查看Release:
helm list -n default查看部署的Pod:
kubectl get pods,svcHelm基本使用:升级
使用Chart升级应用有两种方法:
- --values,-f:指定YAML文件覆盖值 
- --set:在命令行上指定覆盖值 
注:如果一起使用,--set优先级高

例如将nginx服务升级到1.17版本:
第一种方式:
# vi values.yaml #任意路径
image:
    tag: "1.17"
    
#helm upgrade -f values.yaml web mychart第二种方式:
helm upgrade --set image.tag=1.17 web mychartHelm基本使用:回滚、卸载
回滚到上一个版本:
 helm rollback web查看历史版本:
 helm history web回滚到指定版本:
 helm rollback web 1
基于一个chart部署多个release版本
helm install web2 mychart/
helm install --set image.tag=1.17 web3 mychart/
helm list
获取helm渲染后yaml文件模板
helm get all web     #获取web这个chart所有的yaml模板
helm get all web --revision 3     #获取web这个chart指定版本yaml模板卸载应用:
 helm uninstall webHelm基本使用:工作流程

Chart模板
Helm核心是模板,即模板化K8s YAML文件。
通过模板实现Chart高效复用,当部署多个应用时,可以将差异化的字段进行模板化,在部署时使用-f或 者--set动态覆盖默认值,从而适配多个应用。

Chart模板:内置对象
在上面示例中,模板文件中.Release、.Values是Helm内置对象,顶级开头写。
Release对象:获取发布记录信息

Values对象:为Chart模板提供值,这个对象的值有3个来源:
- chart包中的values.yaml文件 
- helm install或者helm upgrade的-f或者--values参数传入的自定义yaml文件 
- --set参数传入值 
Chart对象:可以通过Chart对象访问Chart.yaml文件的内容
Chart模板:调试
使用helm install提供了--dry-run和--debug调试参数,帮助你验证模板正确性,并把渲染后的模板打印出来,而 不会真正的去部署。
helm install --dry-run web mychart    #不创建查看模板渲染清单
helm get manifest web mychart         #创建后查看模板渲染清单描述你的操作提示,方便后期查看
helm install web mychart --description "install nginx1.19" -n test
helm history web -n test  #查看描述的信息