目录
?
????????在早期的 Linux 系统中,维护和安装软件包是?件极其麻烦的事情。为了安装?个应?程序,我们需要使?到编译的?式,?编译软件包,?先有?定的技术?槛,同时对于?些?较挑剔的应?程序,它可能在编译过程中对内核版本或系统环境有特定的要求。为了解决这个问题,就引?了包管理?具 rpm,虽然 rpm 能在?定程度上减轻安装应?的压?,但任然会?临应?程序间依赖关系的困扰。直到后来 yum 的出现,我们才能轻松地解决依赖关系,实现?键安装应?程序。
????????然?,当我们将应?迁移到 Kubernetes 系统时,我们部署应?通常需要编写?份配置清单?件。?每个清单?件都对应集群中的?个资源,如 Deployment、 Service、Ingress 等。但在实际?产环境中,我们需要部署和维护?量的应?,且每个应?都需要多个 YAML 资源清单。这意味着我们需要编写和维护?量的 YAML 清单?件。因此,我们迫切需要在 Kubernetes 中引??个类似 yum 这样的?具,通过?条特定的命令就可以在系统上完成应?的安装、升级、以及后期的维护。?这个?具就是 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 的核?组成部分包括 Chart、Repository 和 Release,我们可以将其分别理解为应?程序包、应?程序包商店和已安装的应?。
Chart(应?程序包):Chart 是 Helm 的?种打包格式,就像 APK ?件? 样。它包含了部署?个应?所有的必要资源清单?件和配置。
Repository(应?商店):Repository 是存储和分享 Chart 的地?,就像?个应?商店?样。你可以在这?找到并下载你需要的 Chart,然后进?安装。
Release(已安装的应?):当你? Chart 在 Kubernetes 集群上部署?个应?或服务,这就产?了?个 Release,就像你在?机上安装了?个 APP。通过你也可以根据同?份 Chart 在集群上部署多次,每次都会?成?个新的 Release,就像同?个 APK 可以在?机上安装多次(例如安装多个微信、淘 宝、京东) 。
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 变得更加简单和?便。?
访问 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"}
[root@k8s-master1 ~]# helm repo list
目前没有任何仓库:
?
添加其中一两个即可:
# 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
[root@k8s-master1 ~]# helm repo update
[root@k8s-master1 ~]# helm repo remove bitnami
?