Helm 是 Kubernetes 的包管理工具,类似于 Ubuntu 的 apt
或 Python 的 pip
,用于简化 Kubernetes 应用的部署、升级和管理。它的核心功能是定义、安装和升级复杂的 K8s 应用,通过模板化(Charts)实现可重复部署,即可动态生成k8s的资源配置文件。
一、核心概念
1、Chart
Helm 的软件包格式,包含预配置的 K8s 资源(Deployment、Service 等)。
本质是一个文件目录,可理解为Helm这个包管理器中的安装包
类似容器的镜像
2、Release
Chart 的运行实例。同一个 Chart 可多次安装到集群,每次安装都会生成独立的 Release
类似按镜像生成的容器
3、Repository(Repo)
Chart 的存储库,类似 Docker Hub。官方仓库为 Artifact Hub。
4、Helm 版本
Helm 2:已废弃,依赖 Tiller(服务端组件,存在安全风险)。
Helm 3(推荐):移除 Tiller,纯客户端架构,更安全。
下载v3版本的Helm(提供一种方法):
1、手动下载二进制包(适合自定义版本)
# 下载指定版本的 Helm(例如 v3.12.3)
wget https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz
# 解压
tar -zxvf helm-v3.12.3-linux-amd64.tar.gz
# 将 helm 移动到可执行路径
sudo mv linux-amd64/helm /usr/local/bin/helm
# 清理临时文件
rm -rf linux-amd64 helm-v3.12.3-linux-amd64.tar.gz
2、验证安装
helm version --short
# 得到类似输出:v3.12.3+g3a31588
3、配置Helm仓库
# 添加常用仓库(如 Bitnami)
helm repo add bitnami https://charts.bitnami.com/bitnami
# 查看当前已下载的仓库
helm repo ls
# 更新仓库索引
helm repo update
# 搜索 Chart ,查看已下载的包
helm search repo bitnami
二、Helm常见命令
# Helm 搜索采用的是模糊字符串匹配算法
# 在当前配置的仓库内查找 Charts
helm search repo <keyword>
# 在官方的大仓库内查找 Charts(范围更广)
helm search hub <keyword>
# 安装一个 Helm Chart
helm install <release-name> <chart-name>
# 列出当前集群中所有已安装的 Helm Releases
helm list
# 查看 Helm Chart 的默认配置文件
helm show values <chart-name>
# 查看已安装的 Helm Release 的所有信息,包括配置和状态
helm get all <release-name>
# 创建一个新的 Helm Chart
helm create <chart-name>
三、Chart 目录结构
mychart/ ├── Chart.yaml # 包含 Chart 的元数据 ├── values.yaml # 包含默认配置值 ├── .helmignore # 包含应该忽略的文件 ├── templates/ # 包含 Kubernetes 资源模板 │ ├── NOTES.txt # 包含安装后显示的说明信息 │ ├── _helpers.tpl # 包含模板助手函数 │ ├── deployment.yaml # 包含 Deployment 资源定义 │ ├── service.yaml # 包含 Service 资源定义 │ └── ingress.yaml # 包含 Ingress 资源定义 └── charts/ # 包含依赖的子 Chart
Chart.yaml
这是 Helm Chart 的元数据文件,包含 Chart 的基本信息,例如名称、版本、描述等
values.yaml
这是 Helm Chart 的默认配置文件,包含默认的配置值。这些值可以在安装或升级时被覆盖。
helmignore
这是一个类似于
.gitignore
的文件,用于指定在打包时应该忽略的文件。templates/
这个目录包含 Kubernetes 资源的模板文件。这些文件在安装或升级时会被渲染成实际的 Kubernetes 资源。
charts/
这个目录用于存放依赖的子 Chart。如果你的 Chart 依赖其他 Helm Chart,可以将它们放在这个目录下。
NOTES.txt
这个文件包含安装后显示的说明信息,例如如何访问应用等。
_helpers.tpl
这个文件包含模板助手函数,可以在模板中重复使用。
四、Redis主从模式搭建
1、修改helm源
# 查看已配置的仓库列表
helm repo list
# 增加阿里云等仓库(可选)
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add aliyunmirror https://mirrors.aliyun.com/bitnami-charts/
# 更新本地仓库索引
helm repo update
2、查找并安装 redis chart
# 搜索 redis chart,选择合适的版本
helm search repo redis
# 查看安装说明(可选)
helm show readme bitnami/redis
# 将 redis chart 拉取到本地
helm pull bitnami/redis
# 查看是否拉取成功
ls
# 找到拉取的 chart 包即拉取成功
3、解压并修改配置
# 解压下载的 chart 包
tar -xvf <你下载的 chart 包>
# 查看是否解压成功
ls
# 找到解压缩出来的 redis 文件夹即解压缩成功
# 删除压缩包
rm -rf <你下载的 chart 包>
# 进入解压缩出来的文件
cd redis
# 编辑 values.yaml 文件
vi values.yaml
# 按自己的需求配置,以下给出配置例子
# storageClass 修改为自己已创建的
# redis 的密码是否需要设置,如果需要则将 password 改为自己要设置的密码,比如123456
# 诸如此类有很多可进行修改的,根据自己情况选择修改即可,改好之后:wq即可
# 为了之后操作方便,我们可以单独为redis设置一个命名空间
kubectl create ns redis
4、安装redis release
# 基于当前目录下的 redis 文件在名为 redis 的命名空间创建一个叫 redis 的 release
# 如果 redis 文件不是在当前目录,可以修改至导入 redis 文件的路径
helm install redis ./redis/ -n redis
5、回滚与升级
# 将你的 chart 升级为你想设置的版本,如1.2.3
helm upgrade <你的chart名> bitnami/my-chart --version 1.2.3
# 或通过指定文件升级
helm upgrade <你的chart名> bitnami/my-chart -f <指定文件>
# 查看升级历史
helm history <你的chart名>
# 回滚到之前的版本
helm rollback <你的chart名> <之前的版本>
# 如:将我的一个名为 my-release 的 chart 升级到之前的1.2.2版本
# helm rollback my-release 1.2.2
总结:Helm无非就是一个整合了大量不同软件的yaml文件的工具包,我们可以直接下载其中的软件,下载下来的是chart,我们需要将其解压并按自己环境需求配置对应的 values.yaml 文件,只需要修改你要修改的部分即可,和Helm给我们的相同的部分不需要动,修改完之后便可按照你配置的文件进行安装,安装出来的就是release,他会自动按照你修改后的配置文件帮你创建一些svc、pod等等。
Helm就是简化了我们配置多个软件写多份yaml文件的过程。