在学习K8S的各个组件的时候,通常最为常用的就是YAML文件的方式,通过规范化的文件配置,方便留存回看,也能够有规律的组织起来,方便运维。 那么既然已经是可以有如此规范的格式与书写要求,那么这种手动书写的工作是否能够释放,自动化呢?让使用者更关注具体的数据与环境逻辑,而简化对样式文件的理解和关注。
什么是Helm?
Helm是K8S的包管理器,类似于npm/apt/yum,可以通过减少繁琐的配置一键拉取相关依赖,预先配置好的安装包资源
对于少数的服务和并不庞大的运维体系来说,工整的YAML文件、K8S自身Pod的版本控制,就可以高效的协助运维同事开展日常工作。
但是当应用服务节点数量、副本数量达到一定规模后,一个服务就有多个YAML文件,几十个服务的几十个YAML文件就会觉得力不从心,如果能有一个管理工具,可以保存好每一个服务的多个YAML文件,部署服务只需要指定一个服务名就可以直接部署,那就能大大提升运维效率,降低人为错误率了。
大型运维存在的问题:
- 难管理、编辑和维护
- 无法将服务作为一个整体发布
- 无法高效地共享和重用
- 不支持应用级别版本管理
- 不支持对部署的应用状态进行验证
优点
- 易管理:通过定义的 Charts,可以将大量复杂应用的 Kubernetes 资源配置进行封装、模版化。
- 可升级:可就地升级,或自定义 hook 完成升级。
- 可分享:Chart 支持版本化,可将其共享,并存储在 Chart 仓库中,供不同环境、项目使用。
- 可回滚:使用helm rollback轻松回滚到旧版本。
- 提供了用户友好的设计,以及大量随时可用的 Helm Chart 仓库,使得应用程序的安装和管理更加轻松。
当然如果你仅仅是部署几个服务,几个节点,倒也不用如此复杂。
组合部分
Helm涵盖两部分,分别是chart 和 release
chart是应用信息的集合,包含K8S部署所需的配置模板、参数定义、依赖关系和文档
release是chart的运行实例,代表一个应用。应用每发布到K8S一次,就算一次release,就是发布的意思
Helm包含2个组件: Helm客户端、Tiler服务器
Helm客服端 -> Tiler服务器 -> K8S集群
本地开发和组装好chart,管理chart,与Tiler交互,在K8S上部署chart,查看release信息,卸载已有release版本
Tiler服务器
是运行在K8S集群上的,他会处理Helm客服端发来的指令,与K8S的Apiserver交互,来创建实例,自身维护好真实实例与chart配置之间的关系,便于Helm客户端查询,通过Apiserver来升级或删除release相关Pod
- 通过curl安装helm客服端
- 通过helm init安装Tiler服务器
- 安装完毕后可以通过helm master查看版本
指令
helm search
helm的两个默认仓库 stable 和 local
helm search mysql
helm install stable/mysql
NAME NAMESPACE STATUS
资源列表,包含Deployment\Service\Secret\PersistentVolumeClaim
NOTES展示release的使用方法
helm list
查看已经部署的release
helm delete
删除已经部署的release
chart详解
将应用部署所需的配置文件,写在chart中,打包chart,标注版本信息,可以给helm进行整体部署,比如mysql-0.3.0.tgz,标记了名字、版本 文件内部:
Chart.yaml
README.md
templates
- configmap.ymal
- deployment.yaml
- pvc.yaml
- secrets.yaml
- svc.yaml
- NOTES.txt
- _helpers.tpl
values.yaml
部署
定制化values.yaml文件,通过helm inspect values mysql > myvalues.yaml
, 修改字段后,直接 helm install --values=myvalues.yaml mysql
通过–set指定参数, helm install stable/mysql --set mysqlRootPassword=admin123 -n my
helm list
和 helm status
查看chart状态
升级和回滚release
helm upgrade
升级,通过–values 或 –set 设置新的配置
helm upgrade --set imageTag=0.4.0 my stable/mysql
helm history
查看历史release版本
helm rollback
可以回滚
helm hisotry my
helm rollback my 1
自定义chart
对于基础组件或许都有成熟的chart可以引用,但是对于组装自有应用还是需要自定义chart模板进行部署
可以自定义chart并且将chart推送至本地或远程仓库,供他人使用
helm create myapp
,会生成基本chart的配置文件框架
配置好自定义的chart之后可以进行格式检验和部署前校验,便于识别异常
helm lint myapp
可以检查格式错误问题,比如缩进
helm install --dry-run --debug myapp
可以模拟部署流程,并输出每个模板生成的YAML文件,可以自行检查应用和组件依赖关系的准确性
安装chart
1、通过仓库中chart, helm install stable/mysql
2、通过压缩包 helm install ./mysql-0.3.0/tgz
3、通过本地chart目录, helm install ./mysql
4、通过URL, helm install http://aaa.com/charts/mysql-0.3.0.tgz
将本地chart推送
- helm package myapp
- helm repo index myrepo/ –url=http://www.com/charts
- helm repo add myrepo http://aaa.com/cahrts
- helm repo list
- helm search myapp 就在 myrepo/myapp, 此外本地上传中,也会传一份chart到本地仓库 local/myapp
- helm repo update