Helm包管理工具——安装部署

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

联系我们
联系我们
分享本页
返回顶部