Helm入门
Helm入门
1、基本功能
1.1 Helm 是什么?
helm 是 Kubernetes 的包管理器。类似于yum安装指令,统一对安装服务进行管理,使得用户不需要关心服务之间的依赖关系。Helm 由客户端组件 helm 和服务端组件 Tiller 组成,能够将一组K8S资源打包统一管理,是查找、共享和使用为Kubernetes构建的软件的最佳方式。
这个时候,如果一键部署所有应用,使用 Helm 是一个很不错的选择,它具备如下的能力:
- 简化部署
- 高度可配置:Helm Charts提供了高度可配置的选项,可以轻松自定义和修改应用程序的部署配置;
- 版本控制
- 模板化:Helm Charts使用YAML模板来定义Kubernetes对象的配置,从而简化了配置过程,并提高了可重复性和可扩展性;
- 应用程序库:Helm具有应用程序库的概念,可以轻松地共享和重用Helm Charts,从而简化了多个应用程序的部署和管理;
- 插件系统:Helm拥有一个强大的插件系统,允许您扩展和定制Helm的功能,以满足特定的需求和要求。
1.2 Helm 相关组件及概念
在使用Helm的过程中,需要理解如下的几个核心的概念:
概念 | 描述 |
---|---|
helm | 是一个命令行工具,用于本地开发及管理chart,chart仓库管理等 |
Tiller(3.0之后它去掉了tiller,而直接与k8s通讯) | 是 Helm 的服务端。Tiller 负责接收 Helm 的请求,与 k8s 的 apiserver 交互,根据chart 来生成一个 release 并管理 release |
Chart | 一个Helm包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含Kubernetes集群中的服务定义,类似Homebrew中的formula、APT的dpkg或者Yum的rpm文件 |
Release | 使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Releas。可以将这个Chart安装两次,并在每次安装中生成自己的Release以及Release名称 |
Repository | Helm chart 的仓库,Helm 客户端通过 HTTP 协议来访问存储库中 chart 的索引文件和压缩包 |
Value | Helm Chart的参数,用于配置Kubernetes对象 |
Template | 使用Go模板语言生成Kubernetes对象的定义文件 |
Namespace | Kubernetes中用于隔离资源的逻辑分区 |
1.3 Helm工作流程
以下是Helm的工作流程(注意:这里使用的是Helm的v3版本,该版本没有了tiller并并使用更加简单和灵活的架构,直接通过kubeconfig连接apiserver,简化安全模块,降低了用户的使用壁垒)
如上图所示,Helm的工作流程总结如下:
- 开发者首先创建并编辑chart的配置;
- 接着打包并发布至Helm的仓库(Repository);
- 当管理员使用helm命令安装时,相关的依赖会从仓库下载;
- 接着helm会根据下载的配置部署资源至k8s;
2、安装部署
2.1 环境准备
在此之前,请先确保环境中已经部署 Kubernetes 集群
主机名称 | 物理IP | 服务器版本 | k8s版本 | Helm 版本 |
---|---|---|---|---|
master | 172.16.20.10 | Centos7.9 | v1.31 | v3.16.2 |
worker | 172.16.20.11 | Centos7.9 | v1.31 | v3.16.2 |
2.2 快速安装
# 通过脚本安装
[root@master ~]# curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 查看版本
[root@master ~]# helm version
version.BuildInfo{Version:"v3.16.2", GitCommit:"13654a52f7c70a143b1dd51416d633e1071faffb", GitTreeState:"clean", GoVersion:"go1.22.7"}
2.3 仓库
Helm 3 不再附带一个默认的 chart 仓库
# 添加仓库
[root@master ~]# helm repo add bitnami https://charts.bitnami.com/bitnami
# 查看仓库列表
[root@master ~]# helm repo ls
NAME URL
bitnami https://charts.bitnami.com/bitnami
# 查看可以被安装的charts列表
[root@master ~]# helm search repo bitnami
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/airflow 20.0.0 2.10.2 Apache Airflow is a tool to express and execute...
bitnami/apache 11.2.21 2.4.62 Apache HTTP Server is an open-source HTTP serve...
...
# 更新charts列表
[root@master ~]# helm repo update
使用
helm repo remove
命令来移除仓库
3、常用命令
3.1 常用命令简介
常用命令 | 描述 |
---|---|
helm create | 创建Chart示例 |
helm install | 部署 |
helm status | 状态 |
helm ls | 列出已经部署的 Release |
helm upgrade | 更新 |
helm rollback | 回滚 |
helm delete | 移除 |
helm uninstall | 卸载 |
helm repo update | 更新charts列表 |
3.2 创建Chart示例
# 创建Chart示例
[root@master ~]# helm create myapp
[root@master ~]# tree myapp/
myapp/
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
- 如果你查看一下
mychart/templates/
目录,你会注意到那里已经有一些文件了。
- charts:目录里存放这个chart依赖的所有子chart。
- Chart.yaml:用于描述这个 Chart的基本信息,包括名字、描述信息以及版本等。#只用于描述。
- values.yaml :用于存储 templates 目录中模板文件中用到变量的值。
- templates: 目录里面存放所有yaml模板文件。#deployment.yaml service.yaml ingress.yaml等
- NOTES.txt :用于介绍Chart帮助信息, helm install 部署后展示给用户。例如:如何使用这个 Chart、列出缺省的设置等。
- _helpers.tpl:放置模板的地方,可以在整个chart中重复使用。
3.3 安装Chart示例
# 安装Chart示例
[root@master ~]# helm install mywordpress bitnami/wordpress
# 查询这个chart的基本信息
[root@master ~]# helm show chart bitnami/wordpress
annotations:
category: CMS
images: |
- name: apache-exporter
image: docker.io/bitnami/apache-exporter:1.0.9-debian-12-r3
- name: os-shell
image: docker.io/bitnami/os-shell:12-debian-12-r32
- name: wordpress
image: docker.io/bitnami/wordpress:6.6.2-debian-12-r19
licenses: Apache-2.0
apiVersion: v2
appVersion: 6.6.2
...
# 查看发布版本
[root@master ~]# helm ls
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
mywordpress default 1 2024-11-12 17:34:32.660117686 +0800 CST deployed wordpress-23.1.29 6.6.2
# 查看该版本的信息
[root@master ~]# helm status mywordpress
NAME: mywordpress
LAST DEPLOYED: Tue Nov 12 17:34:32 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: wordpress
CHART VERSION: 23.1.29
APP VERSION: 6.6.2
...
- 每当执行
helm install
的时候,都会创建一个新的发布版本。 所以一个chart在同一个集群里面可以被安装多次,每一个都可以被独立的管理和升级
3.4 安装前自定义 chart
# 使用 helm show values 可以查看 chart 中的可配置选项
[root@master ~]# helm show values bitnami/wordpress
...
global:
imageRegistry: ""
## E.g.
## imagePullSecrets:
## - myRegistryKeySecretName
##
...
# 然后,你可以使用 YAML 格式的文件覆盖上述任意配置项,并在安装过程中使用该文件
[root@master ~]# echo '{mariadb.auth.database: user0db, mariadb.auth.username: user0}' > values.yaml
[root@master ~]# helm install mywordpress-2 -f values.yaml bitnami/wordpress
# 查看发布版本
[root@master ~]# helm ls | grep mywordpress-2
mywordpress-2 default 1 2024-11-12 17:36:07.573493833 +0800 CST deployed wordpress-23.1.29 6.6.2
- 安装过程中有两种方式传递配置数据:
- --values (或 -f):使用 YAML 文件覆盖配置。可以指定多次,优先使用最右边的文件。
- --set:通过命令行的方式对指定项进行覆盖。
如果同时使用两种方式,则 --set
中的值会被合并到 --values
中,但是 --set 中的值优先级更高
。在 --set 中覆盖的内容会被被保存在 ConfigMap 中。可以通过 helm get values
[root@master ~]# helm get values mywordpress-2
USER-SUPPLIED VALUES:
mariadb.auth.database: user0db
mariadb.auth.username: user0
3.5 更新
当你想升级到 chart 的新版本,或是修改 release 的配置,你可以使用 helm upgrade 命令
# 修改配置
[root@master ~]# echo '{mariadb.auth.database: user1db, mariadb.auth.username: user1}' > values.yaml
# 更新
[root@master ~]# helm upgrade -f values.yaml mywordpress-2 bitnami/wordpress
# 查看新修改的配置是否生效
[root@master ~]# helm get values mywordpress-2
USER-SUPPLIED VALUES:
mariadb.auth.database: user1db
mariadb.auth.username: user1
3.6 回滚
现在,假如在一次发布过程中,发生了不符合预期的事情,也很容易通过 helm rollback [RELEASE] [REVISION] 命令回滚到之前的发布版本
# 查看历史版本号
[root@master ~]# helm history mywordpress-2
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Tue Nov 12 17:36:07 2024 superseded wordpress-23.1.29 6.6.2 Install complete
2 Tue Nov 12 17:39:49 2024 deployed wordpress-23.1.29 6.6.2 Upgrade complete
# 回滚到指定的版本
[root@master ~]# helm rollback mywordpress-2 1
# 查看配置信息
[root@master ~]# helm get values mywordpress-2
USER-SUPPLIED VALUES:
mariadb.auth.database: user0db
mariadb.auth.username: user0
3.7 卸载一个版本
# 卸载一个版本
[root@master ~]# helm uninstall mywordpress
# 如果卸载一个版本时候提供 `--keep-history` 选项, Helm将会保存版本历史
[root@master ~]# helm uninstall mywordpress-2 --keep-history
[root@master ~]# helm history mywordpress-2
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Tue Nov 12 17:36:07 2024 superseded wordpress-23.1.29 6.6.2 Install complete
2 Tue Nov 12 17:39:49 2024 superseded wordpress-23.1.29 6.6.2 Upgrade complete
3 Tue Nov 12 17:42:51 2024 uninstalled wordpress-23.1.29 6.6.2 Uninstallation complete
# 但是下次创建新的版本不能与此名字重复,除非不加`--keep-history`彻底删除