K8S学习笔记|11-Helm

Kubernetes

Posted by Claire on September 6, 2023

在学习K8S的各个组件的时候,通常最为常用的就是YAML文件的方式,通过规范化的文件配置,方便留存回看,也能够有规律的组织起来,方便运维。 那么既然已经是可以有如此规范的格式与书写要求,那么这种手动书写的工作是否能够释放,自动化呢?让使用者更关注具体的数据与环境逻辑,而简化对样式文件的理解和关注。

什么是Helm?

Helm是K8S的包管理器,类似于npm/apt/yum,可以通过减少繁琐的配置一键拉取相关依赖,预先配置好的安装包资源

对于少数的服务和并不庞大的运维体系来说,工整的YAML文件、K8S自身Pod的版本控制,就可以高效的协助运维同事开展日常工作。

但是当应用服务节点数量、副本数量达到一定规模后,一个服务就有多个YAML文件,几十个服务的几十个YAML文件就会觉得力不从心,如果能有一个管理工具,可以保存好每一个服务的多个YAML文件,部署服务只需要指定一个服务名就可以直接部署,那就能大大提升运维效率,降低人为错误率了。

大型运维存在的问题:

  1. 难管理、编辑和维护
  2. 无法将服务作为一个整体发布
  3. 无法高效地共享和重用
  4. 不支持应用级别版本管理
  5. 不支持对部署的应用状态进行验证

优点

  • 易管理:通过定义的 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 listhelm 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