目录
一、为何需要 Helm
二、什么是 Helm
三、Helm 核⼼概念
四、Helm 架构
五、Helm 安装
六、Helm 仓库管理
6.1 查看仓库
6.2 添加仓库
6.3 更新仓库
6.4 删除仓库
一、为何需要 Helm
在早期的 Linux 系统中,维护和安装软件包是⼀件极其麻烦的事情。为了安装⼀个应⽤程序,我们需要使⽤到编译的⽅式,⽽编译软件包,⾸先有⼀定的技术⻔槛,同时对于⼀些⽐较挑剔的应⽤程序,它可能在编译过程中对内核版本或系统环境有特定的要求。为了解决这个问题,就引⼊了包管理⼯具 rpm,虽然 rpm 能在⼀定程度上减轻安装应⽤的压⼒,但任然会⾯临应⽤程序间依赖关系的困扰。直到后来 yum 的出现,我们才能轻松地解决依赖关系,实现⼀键安装应⽤程序。
然⽽,当我们将应⽤迁移到 Kubernetes 系统时,我们部署应⽤通常需要编写⼀份配置清单⽂件。⽽每个清单⽂件都对应集群中的⼀个资源,如 Deployment、 Service、Ingress 等。但在实际⽣产环境中,我们需要部署和维护⼤量的应⽤,且每个应⽤都需要多个 YAML 资源清单。这意味着我们需要编写和维护⼤量的 YAML 清单⽂件。因此,我们迫切需要在 Kubernetes 中引⼊⼀个类似 yum 这样的⼯具,通过⼀条特定的命令就可以在系统上完成应⽤的安装、升级、以及后期的维护。⽽这个⼯具就是 Helm。
二、什么是 Helm
Helm 官网:Helm
Helm 是 CNCF 学院毕业的项⽬,它是 Kubernetes 中的包管理⼯具,它能让我们在Kubernetes 中⾮常⽅便的安装、升级、卸载我们的应⽤。Helm 的⼯作原理与 yum ⾮常相似。⾸先 Helm 会将应⽤所需要 YAML 配置清单⽂件打包成⼀个单元,称为 chart。⽽这个 chart 通常是保存在 Helm 仓库中,当需要时进⾏调⽤。⽽每个 chart 都包含了部署⼀个应⽤所需要的所有资源和配置,包括但不限于 Deployment、Service、Ingress、ConfigMap 等。因此借助 Helm ⼯具,我们就可以使⽤⼀条命令来部署和管理⼀个完整的应⽤。
值得注意的是:Helm Chart 中的资源清单⽂件并⾮是固定的,⽽是采⽤了模板的形式。在应⽤部署过程中,我们还需要借助 values.yaml 这个配置⽂件来渲染这些模板⽂件,从⽽⽣成真正要部署的资源清单。也就是说 helm 它需要将模板⽂件与⽤户定义的 values.yaml 配置⽂件结合起来,从⽽⽣成⼀份完整的应⽤部署清单,最后将这个清单部署到 Kubernetes 集群上。
三、Helm 核⼼概念
Helm 的核⼼组成部分包括 Chart、Repository 和 Release,我们可以将其分别理解为应⽤程序包、应⽤程序包商店和已安装的应⽤。
-
Chart(应⽤程序包):Chart 是 Helm 的⼀种打包格式,就像 APK ⽂件⼀ 样。它包含了部署⼀个应⽤所有的必要资源清单⽂件和配置。
-
Repository(应⽤商店):Repository 是存储和分享 Chart 的地⽅,就像⼀个应⽤商店⼀样。你可以在这⾥找到并下载你需要的 Chart,然后进⾏安装。
-
Release(已安装的应⽤):当你⽤ Chart 在 Kubernetes 集群上部署⼀个应⽤或服务,这就产⽣了⼀个 Release,就像你在⼿机上安装了⼀个 APP。通过你也可以根据同⼀份 Chart 在集群上部署多次,每次都会⽣成⼀个新的 Release,就像同⼀个 APK 可以在⼿机上安装多次(例如安装多个微信、淘 宝、京东) 。
四、Helm 架构
Helm 架构分为 V2 和 V3 版。
在 Helm v2 的架构中,有⼀个重要的组件叫做 Tiller 。 Tiller 是 Helm v2 的服务端,它在 Kubernetes 集群中运⾏,并负责响应 Helm 客户端的请求,同时管理 Release 的⽣命周期,包括部署、更新、删除等操作。但由于 Tiller 必须在 Kubernetes 集群中的每个命名空间都安装⼀个实例,以使 Helm 能在该命名空间中部署应⽤,这种要求增加了管理的复杂性。
在 Helm v3 的架构中,开发者移除了 Tiller 这个服务端组件。让 Helm 客户端可以直接通过 kubeconfig 的⽂件,与 Kubernetes 的 APIServer 进⾏交互。这个改变带来了两个主要的好处。
-
⾸先,Helm 可以直接使⽤ Kubernetes ⾃带的⻆⾊访问控制。这意味着,我们可以根据每个⽤户的需求和权限,提供定制的 kubeconfig ⽂件。这种改变增强了系统的安全,因为我们可以更精细地控制谁可以访问什么资源,以及他们可以进⾏什么操作。
-
其次,去掉 Tiller 后,Helm 的架构和部署流程都变得更简洁、更清晰,这使得使⽤ Helm 变得更加简单和⽅便。
五、Helm 安装
访问 github,搜索 helm,然后获取对应下载地址:https://github.com/helm/helm/releases
下载对应的 helm 包,然后解压:(在 master 节点安装)
[root@k8s-master1 ~]# wget https://get.helm.sh/helm-v3.13.3-linux-amd64.tar.gz
[root@k8s-master1 ~]# tar -zxvf helm-v3.13.3-linux-amd64.tar.gz
[root@k8s-master1 ~]# mv linux-amd64/helm /usr/local/bin/
helm 命令补全:
[root@k8s-master1 ~]# helm completion bash > /etc/bash_completion.d/helm
[root@k8s-master1 ~]# source /etc/bash_completion.d/helm
查看当前 helm 版本:
[root@k8s-master1 ~]# helm version
version.BuildInfo{Version:"v3.13.3", GitCommit:"c8b948945e52abba22ff885446a1486cb5fd3474", GitTreeState:"clean", GoVersion:"go1.20.11"}
六、Helm 仓库管理
6.1 查看仓库
[root@k8s-master1 ~]# helm repo list
目前没有任何仓库:
6.2 添加仓库
添加其中一两个即可:
# azure 软源
helm repo add stable http://mirror.azure.cn/kubernetes/charts/
# 阿⾥云源
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
# bitnami 源
helm repo add bitnami https://charts.bitnami.com/bitnami
# appstore 仓库
helm repo add appstore https://charts.grapps.cn
6.3 更新仓库
[root@k8s-master1 ~]# helm repo update
6.4 删除仓库
[root@k8s-master1 ~]# helm repo remove bitnami