侧边栏壁纸
博主头像
孔子说JAVA博主等级

成功只是一只沦落在鸡窝里的鹰,成功永远属于自信且有毅力的人!

  • 累计撰写 297 篇文章
  • 累计创建 134 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

Helm3入门教程-3:Helm 3初步使用

孔子说JAVA
2022-04-13 / 0 评论 / 7 点赞 / 693 阅读 / 6,158 字 / 正在检测是否收录...

Helm3入门教程全系列,26小时轻松掌握Helm

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仓库

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仓库。

通过 helm repo add 命令添加一个 chart 仓库:

$ helm repo add bitnami https://charts.bitnami.com/bitnami

当添加完成后,通过 helm search repo 命令能够看到可以被您安装的charts列表:

$ helm search repo bitnami

微信图片_20220413111657

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

24

在上面的例子中,bitnami/mysql这个chart被发布,名字是 mysql-1649844740 。

  • 您可以通过执行 helm show chart bitnami/mysql 命令简单的了解到这个chart的基本信息。 或者您可以执行 helm show all bitnami/mysql 获取关于该chart的所有信息。

  • 每当您执行 helm install 的时候,都会创建一个新的发布版本。 所以一个chart在同一个集群里面可以被安装多次,每一个都可以被独立的管理和升级。

3)查看release

通过 helm listhelm 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 仓库中。

7

评论区