1、简介
很多人都使用过Ubuntu下的ap-get或者CentOS下的yum, 这两者都是Linux系统下的包管理工具。采用apt-get/yum,应用开发者可以管理应用包之间的依赖关系,发布应用;用户则可以以简单的方式查找、安装、升级、卸载应用程序。
我们可以将Helm看作Kubernetes下的apt-get/yum。Helm是Deis开发的一个用于kubernetes的包管理器。每个包称为一个Chart,一个Chart是一个目录(一般情况下会将目录进行打包压缩,形成name-version.tgz格式的单一文件,方便传输和存储)。
对于应用发布者而言,可以通过Helm打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库。
对于使用者而言,使用Helm后不用需要了解Kubernetes的Yaml语法并编写应用部署文件,可以通过Helm下载并在kubernetes上安装需要的应用。
除此以外,Helm还提供了kubernetes上的软件部署,删除,升级,回滚应用的强大功能。
2、Helm工作原理
Chart Install 过程:
- Helm 解析 Chart:Helm 从指定的目录或
.tgz
文件中解析出 Chart 结构信息。 - 生成 Release:Helm 直接将 Chart 和 Values 信息与当前用户的配置一起发送给 Kubernetes API。
- Kubernetes 处理:Kubernetes 负责根据收到的 Chart 和 Values 创建或更新相关的资源,生成对应的 Release。
Chart Update过程:
- Helm 解析 Chart:Helm 从指定的目录或
.tgz
文件中解析出新的 Chart 结构信息。 - 传递 Release 更新请求:Helm 将要更新的 Release 名称、新的 Chart 结构和 Values 信息发送给 Kubernetes API。
- Kubernetes 更新资源:Kubernetes API 根据收到的新 Chart 和 Values 信息更新相关资源,确保 Release 更新。
Chart Rollback过程:
- Helm 发送回滚请求:Helm 将要回滚的 Release 名称传递给 Kubernetes API。
- Kubernetes 查找历史版本:Kubernetes 从 Release 历史记录中查找上一个版本的 Chart。
- 回滚到旧版本:Kubernetes 根据找到的上一个 Release 来替换当前的 Release,完成回滚操作。
版本3.0与2.0主要变化:
- 去除 Tiller:Helm 3.0 不再使用 Tiller,所有的操作都直接通过 Helm 客户端与 Kubernetes API 进行交互。
- RBAC 控制:Helm 3.0 使用 Kubernetes 的 RBAC 权限控制,用户权限由 Kubernetes 的角色和角色绑定来管理,而不再依赖 Tiller 的权限控制。
3、相关组件
- Helm:Helm 是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。
- Kubernetes API:Kubernetes API 直接处理 Helm 传递的请求,生成、更新或删除对应的资源(例如,Pods、Deployments、Services 等),并在 Kubernetes 集群中部署 Release。
- Chart:Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。
- Repoistory:Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。
- Release:使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。
<!–注:需要注意的是:Helm 中提到的 Release 和我们通常概念中的版本有所不同,这里的 Release 可以理解为 Helm 使用 Chart 包部署的一个应用实例。–>
4、功能介绍
Helm仓库提供了存储、分发、版本管理、搜索、审核、安全以及多仓库管理等功能,使用户能够更加便捷地管理和部署Kubernetes应用。
- 存储和分发:Helm仓库用于集中存储和分发Charts,类似于Python的PyPI。用户可以从仓库中下载和安装Charts,也可以将自定义的Charts上传到仓库中进行分享和分发。
- 版本管理:Helm仓库支持Charts的版本管理,用户可以轻松地回滚到之前的版本,也可以方便地比较不同版本之间的差异。
- 搜索和查找:Helm仓库提供了搜索功能,用户可以通过关键词搜索符合需求的Charts。同时,仓库清单文件也提供了对所有可用的Charts的索引,方便用户查找。
- 审核和安全:Helm仓库可以对上传的Charts进行审核,确保只有符合要求的Charts才能被发布。此外,仓库还提供了对Charts的安全性检查,包括漏洞扫描和签名验证等,以确保用户下载的Charts的安全性。
- 多仓库管理:Helm仓库支持多个Repository的管理,用户可以轻松地添加、删除或切换不同的Repository。这使得用户可以从多个来源获取Charts,并方便地管理不同来源的应用包。
5、应用场景
Helm仓库在Kubernetes应用部署和管理中具有广泛的应用场景。Helm仓库在Kubernetes应用部署和管理中具有广泛的应用场景,包括统一管理、版本控制和回滚、快速部署和分发、跨环境一致性部署、安全漏洞管理和审核以及多团队协同工作。
- 统一管理应用:通过使用Helm仓库,用户可以将Kubernetes应用集中存储和管理,方便对应用的统一管理和控制。这有助于提高应用的管理效率,降低管理的复杂度。
- 版本控制和回滚:Helm仓库支持Charts的版本管理,用户可以方便地回滚到之前的版本,也可以比较不同版本之间的差异。这有助于在出现问题时快速恢复到正常状态,同时也有助于进行应用升级和回滚的版本控制。
- 快速部署和分发:Helm仓库提供了快速部署和分发Kubernetes应用的能力。用户可以从仓库中下载和安装Charts,也可以将自定义的Charts上传到仓库中进行分享和分发,实现应用的快速部署和分发。
- 跨环境一致性部署:通过使用Helm仓库,用户可以在不同的环境中实现一致的Kubernetes应用部署。例如,在开发和测试环境中,用户可以使用相同的Helm仓库,确保应用在不同环境中的一致性。
- 安全漏洞管理和审核:Helm仓库可以对上传的Charts进行审核和安全检查,确保用户下载的Charts的安全性。此外,仓库还支持对安全漏洞的管理和审核,包括漏洞扫描和签名验证等,以保障应用的安全性。
- 多团队协同工作:通过使用Helm仓库,多个团队可以协同工作,共同管理和维护Kubernetes应用。团队之间可以共享相同的Helm仓库,共同维护和管理应用的部署和管理。
6、常用命令
命令 | 说明 |
---|---|
helm repo add <name> <url> | 添加一个 Helm 仓库。 |
helm repo update | 更新所有仓库的信息。 |
helm search repo <name> | 在已添加的仓库中查找指定名称的 Chart。 |
helm install <release-name> <chart-name> | 安装指定的 Helm Chart。 |
helm list | 查看已安装的 Helm Release。 |
helm status <release-name> | 查看指定 Release 的状态。 |
helm upgrade <release-name> <chart-name> | 升级已安装的 Helm Release。 |
helm uninstall <release-name> | 卸载指定的 Helm Release。 |
7、helm安装
#从官网下载最新版本的二进制安装包到本地:https://github.com/helm/helm/releases
[root@mast01 ~]# tar -xzvf helm-v3.16.0-rc.1-linux-amd64.tar.gz
[root@mast01 ~]# cd linux-amd64/
[root@mast01 ~]# mv helm /usr/local/bin/
[root@mast01 ~]# helm version
version.BuildInfo{Version:"v3.16.0-rc.1", GitCommit:"0d439e1a09683f21a0ab9401eb661401f185b00b", GitTreeState:"clean", GoVersion:"go1.22.6"}
8、创建Chart示例
#创建chart
[root@mast01 huqi]# helm create mychart # 默认示例中部署的是一个nginx服务
#目录详情
[root@mast01 huqi]# ls mychart
charts Chart.yaml templates values.yaml
• charts:目录里存放这个chart依赖的所有子chart。
• Chart.yaml:用于描述这个 Chart的基本信息,包括名字、描述信息以及版本等。
• values.yaml :用于存储 templates 目录中模板文件中用到变量的值。
• templates: 目录里面存放所有yaml模板文件。
- NOTES.txt :用于介绍Chart帮助信息, helm install 部署后展示给用户。例如:如何使用这个 Chart、列出缺省的设置等。
- _helpers.tpl:放置模板的地方,可以在整个 chart 中重复使用。
#打包
[root@mast01 huqi]# helm package mychart
Successfully packaged chart and saved it to: /root/huqi/mychart-0.1.0.tgz
[root@mast01 huqi]# ls
mychart mychart-0.1.0.tgz
9、部署Chart
#部署Chart
[root@mast01 templates]# helm install web mychart
#查看Release
[root@mast01 templates]# helm list -n default
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
web default 2 2024-12-31 15:15:40.458243812 +0800 CST deployed mychart-0.1.0 1.16.0
#查看部署的Pod
[root@mast01 templates]# kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/web-mychart-58bf5ff874-sc9vs 0/1 ImagePullBackOff 0 2d8h
pod/web-mychart-6db6df577-5s6jr 0/1 ImagePullBackOff 0 2d8h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/web-mychart ClusterIP 10.103.6.140 <none> 80/TCP 2d8h
10、安装自定义值
很多 Helm Charts 提供了可配置的参数,您可以通过 -f
或 --set
标志来定制 Chart 的行为。
- 使用 values.yaml 文件:可以将自定义配置放在一个
values.yaml
文件中,并在安装时通过-f
标志传递:
[root@mast01 ~]# helm install my-nginx stable/nginx-ingress -f custom-values.yaml
- 通过
--set
设置单个值:您也可以直接在命令行上设置单个值:
#安装 `nginx-ingress`,并将 `controller.replicaCount` 设置为 3
[root@mast01 ~]# helm install my-nginx stable/nginx-ingress --set controller.replicaCount=3
11、回滚与卸载
#回滚到上一个版本
[root@mast01 huqi]# helm rollback web
Rollback was a success! Happy Helming!
#查看历史版本
[root@mast01 huqi]# helm history web
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Tue Dec 31 15:14:20 2024 superseded mychart-0.1.0 1.16.0 Install complete
2 Tue Dec 31 15:15:40 2024 superseded mychart-0.1.0 1.16.0 Upgrade complete
3 Thu Jan 2 23:40:43 2025 deployed mychart-0.1.0 1.16.0 Rollback to 1
#回滚到指定版本
[root@mast01 huqi]# helm rollback web 2
Rollback was a success! Happy Helming!
#卸载应用
[root@mast01 huqi]# helm uninstall web
release "web" uninstalled
12、总结
Helm 3.0 简化了 Kubernetes 部署和管理工作,使用 Helm Chart 安装应用程序是非常高效和灵活的。您只需要通过简单的命令就可以完成应用的部署,配置和管理。随着 Helm Charts 的普及,越来越多的应用程序都提供了官方的 Helm Chart,用户可以轻松地安装和管理各种 Kubernetes 应用。
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/424461.html