Helm:Kubernetes 应用管理的利器
在 Kubernetes 生态系统中,应用部署和管理曾是一件繁琐的事情。开发者需要手动编写大量 YAML 配置文件,涉及 Deployment、Service 等众多资源对象,且在多环境部署和版本管理时面临诸多挑战。而 Helm 的出现,为这些问题提供了完美的解决方案。
Helm 核心概念
Helm 作为 Kubernetes 的包管理工具,有三个核心概念:
- Chart:Helm 的软件包,采用 TAR 格式,包含一组定义 Kubernetes 资源相关的 YAML 文件,且有特定的目录结构。
- Release :使用
helm install命令在 Kubernetes 集群中部署的 Chart 称为 Release。 - Repository:本质是一个 Web 服务器,保存一系列 Chart 软件包供用户下载,并提供清单文件供查询,Helm 可管理多个不同 Repository。
此外,Helm 包含客户端工具 helm 和服务端 Tiller(Helm v3 中已移除 Tiller,简化了架构)。客户端负责 Chart 的创建、打包等操作,服务端则处理请求并与 Kubernetes 交互完成应用部署等功能。
Helm 工作原理
- Chart Install 过程:Helm 解析 Chart 结构信息,将其与 Values 信息传递给 Tiller,Tiller 生成 Release 并发送给 Kubernetes 以完成部署。
- Chart Update 过程:Helm 解析更新的 Chart 信息,传递给 Tiller,Tiller 生成新 Release 并更新对应 Release 的历史,再发送给 Kubernetes 完成升级。
- Chart Rollback 过程:Helm 将需回滚的 Release 名称传递给 Tiller,Tiller 查找该 Release 历史,获取上一版本并发送给 Kubernetes 完成回滚。
Helm 部署步骤
-
安装 Helm 客户端:
mkdir helm wget https://get.helm.sh/helm-v3.14.0-linux-amd64.tar.gz tar -zxvf helm-v3.14.0-linux-amd64.tar.gz cd linux-amd64/ cp helm /usr/local/bin/ echo "source <(helm completion bash)" >> ~/.bashrc source ~/.bashrc -
配置 Chart 库:
-
搜索官方 Helm hub chart 库:
helm search hub nginx -
添加第三方 Chart 库:
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts helm repo add bitnami https://charts.bitnami.com/bitnami -
查看 Chart 库:
helm repo list -
从仓库查找指定 chart:
helm search repo nginx
-
常用 Helm 命令
| 命令字 | 作用 |
|---|---|
| create | 使用给定的名称创建新图表 |
| install | 安装图表 |
| upgrade | 升级发布 |
| rollback | 将发布回滚到先前版本 |
| uninstall | 卸载发布 |
| list | 列出发布 |
| history | 获取发布历史记录 |
| repo | 添加、列出、删除、更新和索引图表存储库 |
| search | 在图表中搜索关键字 |
Helm Chart 详解
目录结构
通过 helm create 命令可创建一个新的 chart 包,其典型目录结构如下:
nginx/
├── charts # 依赖其他包的 charts 文件
├── Chart.yaml # 该 chart 的描述文件,包括版本等信息
├── templates # 存放 k8s 模板文件目录
│ ├── deployment.yaml # 创建 k8s 资源的 yaml 模板
│ ├── _helpers.tpl # 可被其他模板引用的文件
│ ├── hpa.yaml # 弹性扩缩容配置
│ ├── ingress.yaml # ingress 配置
│ ├── NOTES.txt # 安装后展示给用户的说明
│ ├── serviceaccount.yaml # 服务账号配置
│ ├── service.yaml # Service 模板
│ └── tests # 测试模块
│ └── test-connection.yaml
└── values.yaml # 给模板文件使用的变量
Chart.yaml
包含 chart 的基本信息,如 API 版本、名称、版本、描述、依赖等,是 chart 的重要描述文件。
Helm 部署案例:部署 Nginx 应用
-
拉取 Nginx chart 并解压:
helm pull bitnami/nginx --version 15.3.5 tar xf nginx-15.3.5.tgz cd nginx -
修改 values.yaml 配置(如服务类型等)。
-
安装 chart:
helm install nginx-server . -
查看部署结果:
- 查看 deployments:
kubectl get deployments.apps - 查看 pods:
kubectl get pod - 查看 services:
kubectl get svc
- 查看 deployments:
-
测试访问:通过 service 的 ClusterIP 进行 curl 测试。
升级与回滚
- 修改配置文件(如调整副本数)。
- 执行升级:
helm upgrade nginx-server . - 查看升级历史:
helm history nginx-server - 回滚到指定版本:
helm rollback nginx-server 1 - 卸载应用:
helm uninstall nginx-server
Helm 极大地简化了 Kubernetes 应用的部署、升级、回滚等管理操作,提高了开发和运维效率,是 Kubernetes 生态中不可或缺的工具。通过 Helm,开发者可以更专注于应用本身,而无需过多关注复杂的 Kubernetes 资源配置细节。