charts 是 Helm 要使用的包格式。它是一个描述 Kubernetes 相关资源的文件集合。一个 charts 可以用来部署一个简单的或者复杂的应用。例如数据库、消息队列、web 服务等等。通过创建一个特定目录树和文件来形成 chart,并将他们打包到一个带有版本号的压缩包中就可以进行部署了。
- 开发者按照 Helm Chart 的格式,将应用所需的资源文件包装起来,通过模版化 (Templating) 的方式将一些可变字段(比如我们之前提到的暴露哪个端口、使用多少副本)暴露给用户,最后将封装好的应用包,也就是 Helm Chart,集中存放在统一的仓库中供用户浏览下载。
- 站在用户角度,用户只需要一行简单的命令就可以完成应用的安装、卸载与升级。对于安装之后状态,也可以通过 helm list 或者是原生的 kubectl 进行查询。
1、Helm三大概念
1.1 chart(Helm 包)
Helm 使用的包格式称为 chart,它是一个描述 Kubernetes 相关资源对象的文件集合,包含 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。
- 可以把它看作是 Homebrew formula,Apt dpkg,或 Yum RPM 在Kubernetes 中的等价物。它的技术特点类似 jinja模版,以渲染模版的方式,生成运行一个服务实例所需的一系列资源对象文件,并以此进行服务的发布。通过这种方式,我们也可以十分简单的制作自定义的 chart。
Chart 有自已特定的目录布局,我们以官方提供的 wordpress为例说明,chart 的文件目录结构如下:
- Helm Chart 基本元素为 charts/、Chart.yaml、templates/、values.yaml,并保留 crds/ ,要正确的使用 chart 进行发布,该元素是必不可少的。
wordpress/
Chart.yaml # 包含了chart信息的YAML文件
LICENSE # 可选: 包含chart许可证的纯文本文件
README.md # 可选: 可读的README文件
values.yaml # chart 默认的配置值
values.schema.json # 可选: 一个使用JSON结构的values.yaml文件
charts/ # 包含chart依赖的其他chart
crds/ # 自定义资源的定义
templates/ # 模板目录, 当和values 结合时,可生成有效的Kubernetes manifest文件
templates/NOTES.txt # 可选: 包含简要使用说明的纯文本文件
1.2 Repository(仓库)
Repository(仓库) 是用来存放和共享 charts 的地方。它就像 Perl 的 CPAN 档案库网络 或是 Fedora 的 软件包仓库,只不过它是供 Kubernetes 包所使用的。
- Helm chart 可以被存储在专用的 HTTP 服务器上,称为 chart 仓库(repositories),和 yum repository类似,chart 仓库提供了一个 index.yaml 来描述一批 chart,并且提供了每个 chart 的下载地址信息。
- Helm 客户端可以指向多个 chart 仓库,默认情况下是没有配置仓库的,需要使用
helm repo add
来进行添加。helm3 中对于一些常用服务的下载安装,用 bitnami 仓库 取代了原来的stable 仓库,但是仍保留了 stable 仓库的使用。
1.3 Release(发布实例)
Release 是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。以 MySQL chart为例,如果你想在你的集群中运行两个数据库,你可以安装该chart两次。每一个数据库都会拥有它自己的 release 和 release name。
- 当 chart 被发布后,Helm 库会创建一个 release 来跟踪这个发布的对象,它的实质是在 Kubernetes 中运行的各种资源,service、deployment、configmap、secret 等,在 K8S 集群中的直接的表现就是一个或多个 pod。
- Helm 的 release 是允许启动多个不同服务的,且每个服务之间遵循依赖关系,这点就比较类似 docker compose。
在了解了上述这些概念以后,我们就可以这样来解释 Helm:
Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。你可以在 Helm 的 chart repositories 中寻找新的 chart。
2、Helm3环境初始化 - 添加chart仓库
2.1 查找 Charts命令 helm search
Helm 自带一个强大的搜索命令,可以用来从两种来源中进行搜索:
helm search hub
从 Artifact Hub 中查找并列出 helm charts。 Artifact Hub中存放了大量不同的仓库。helm search repo
从你添加(使用 helm repo add)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网。
1)运行 helm search hub
命令找到公开可用的charts:
root@xnzysq20210118001:/opt# helm search hub wordpress
URL CHART VERSION APP VERSION DESCRIPTION
https://artifacthub.io/packages/helm/kube-wordp... 0.1.0 1.1 this is my wordpress package
https://artifacthub.io/packages/helm/bitnami/wo... 13.2.0 5.9.3 WordPress is the world's most popular blogging ...
https://artifacthub.io/packages/helm/bitnami-ak... 13.1.12 5.9.2 WordPress is the world's most popular blogging ...
https://artifacthub.io/packages/helm/riftbit/wo... 12.1.16 5.8.1 Web publishing platform for building blogs and ...
https://artifacthub.io/packages/helm/sikalabs/w... 0.2.0 Simple Wordpress
...
上述命令从 Artifact Hub 中搜索所有的 wordpress charts。如果不进行过滤,helm search hub 命令会展示所有可用的 charts。
2)运行 helm search repo
命令从你所添加的仓库中查找charts:
Helm 搜索使用模糊字符串匹配算法,所以你可以只输入名字的一部分:
root@xnzysq20210118001:/opt# helm search repo bitnami
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/bitnami-common 0.0.9 0.0.9 DEPRECATED Chart with custom templates used in ...
bitnami/airflow 12.1.8 2.2.5 Apache Airflow is a tool to express and execute...
bitnami/apache 9.0.15 2.4.53 Apache HTTP Server is an open-source HTTP serve...
bitnami/argo-cd 3.1.12 2.3.3 Argo CD is a continuous d
搜索是用来发现可用包的一个好办法。一旦你找到你想安装的 helm 包,你便可以通过使用 helm install 命令来安装它。
2.2 添加chart仓库命令 helm repo add
当您安装好Helm之后就可以添加一个 chart 仓库了。从 官网chart: Artifact Hub中查找有效的Helm chart仓库。
- 官网chart旧地址:https://github.com/helm/charts
- 官网chart新地址:https://artifacthub.io/
通过 helm repo add
命令添加一个 chart 仓库:
$ helm repo add bitnami https://charts.bitnami.com/bitnami
当添加完成后,通过 helm search repo
命令能够看到可以被您安装的charts列表:
$ helm search repo bitnami
3、安装/发布Chart
您可以通过 helm install
命令安装chart。 Helm可以通过多种途径查找和安装chart,但最简单的是安装官方的bitnami charts。
helm install 命令可以从多个来源进行安装:
- chart 的仓库(如本例)
- 本地 chart 压缩包(helm install foo foo-0.1.1.tgz)
- 解压后的 chart 目录(helm install foo path/to/foo)
- 完整的 URL(helm install foo https://example.com/charts/foo-1.2.3.tgz)
1)获取最新的charts列表
$ helm repo update # 确定我们可以拿到最新的charts列表
2)安装/发布chart
使用 helm install
命令来安装/发布一个新的 helm 包。最简单的使用方法只需要传入两个参数:你命名的release名字和你想安装的chart的名称。
- 安装chart时创建了一个新的 release 对象。如果想让Helm生成一个名称,发布时使用–generate-name。
- 在安装过程中,helm 客户端会打印一些有用的信息,其中包括:哪些资源已经被创建,release当前的状态,以及你是否还需要执行额外的配置步骤。
- Helm 客户端不会等到所有资源都运行才退出。许多 charts 需要大小超过 600M 的 Docker 镜像,可能需要很长时间才能安装到集群中。
# 指定名字为happy-panda
$ helm install happy-panda bitnami/wordpress
# Helm生成一个名称
$ helm install bitnami/mysql --generate-name
在上面的例子中,bitnami/mysql这个chart被发布,名字是 mysql-1649844740 。
-
您可以通过执行
helm show chart bitnami/mysql
命令简单的了解到这个chart的基本信息。 或者您可以执行helm show all bitnami/mysql
获取关于该chart的所有信息。 -
每当您执行
helm install
的时候,都会创建一个新的发布版本。 所以一个chart在同一个集群里面可以被安装多次,每一个都可以被独立的管理和升级。
3)查看release
通过 helm list
或 helm ls
命令会列出所有被发布的Chart:
- helm list --all 会展示 Helm 保留的所有 release 记录,包括失败或删除的条目(指定了 --keep-history)
root@xnzysq20210118001:/opt# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
mysql-1649844740 default 1 2022-04-13 18:12:29.095265597 +0800 CST deployedmysql-8.9.0 8.0.28
4)卸载release
您可以使用 helm uninstall
命令卸载你发布的版本
root@xnzysq20210118001:/opt# helm uninstall mysql-1649844740
release "mysql-1649844740" uninstalled
- 该命令会从Kubernetes卸载 mysql-1612624192, 它将删除和该版本相关的所有相关资源(service、deployment、 pod等等)甚至版本历史。
- 如果您在执行 helm uninstall 的时候提供
--keep-history
选项, Helm将会保存版本历史。 您可以通过命令查看该版本的信息
5)查看release状态
您可以使用 helm status
命令查看 release 的状态,或是重新读取配置信息:
- 若卸载Chart时使用了
--keep-history
选项,helm会跟踪你的版本(即使你卸载了他们),所以你可以审计集群历史甚至使用helm rollback
回滚版本。
root@xnzysq20210118001:/opt# helm status mysql-1649844740
Status: UNINSTALLED
...
- 如果没有使用 --keep-history 选项,使用
helm status
命令,结果如下:
root@xnzysq20210118001:/opt# helm status mysql-1649844740
Error: release: not found
6)‘helm repo list’:查看配置的仓库
Helm 3 不再附带一个默认的 chart 仓库。helm repo 提供了一组命令用于添加、列出和移除仓库。
- 使用 helm repo list 来查看配置的仓库:
root@xnzysq20210118001:/opt# helm repo list
NAME URL
bitnami https://charts.bitnami.com/bitnami
- 使用 helm repo add 来添加新的仓库:
$ helm repo add dev https://example.com/dev-charts
因为 chart 仓库经常在变化,在任何时候你都可以通过执行 helm repo update
命令来确保你的 Helm 客户端是最新的。
使用 helm repo remove
命令来移除仓库。
7)查看帮助信息
如果您想通过Helm命令查看更多的有用的信息,请使用 helm help
命令,或者在任意命令后添加 -h
选项:
$ helm help
$ helm get -h
4、创建你自己的charts
可以通过使用 helm create 命令来快速开始:
$ helm create deis-workflow
Creating deis-workflow
现在,./deis-workflow 目录下已经有一个 chart 了。你可以编辑它并创建你自己的模版。
- 在编辑 chart 时,可以通过 helm lint 验证格式是否正确。
当准备将 chart 打包分发时,你可以运行 helm package
命令:
$ helm package deis-workflow
deis-workflow-0.1.0.tgz
然后这个 chart 就可以很轻松的通过 helm install
命令安装:
$ helm install deis-workflow ./deis-workflow-0.1.0.tgz
...
打包好的 chart 可以上传到 chart 仓库中。
评论区