1. Helm3 快速入门

Helm 是 Kubernetes 包管理器。帮助您管理 Kubernetes 应用 -- Helm Chart,即使是最复杂的 Kubernetes 应用程序,都可以帮助您定义、安装和升级。

结合传统应用的认知,Helm Chart 云原生应用包与传统应用包有以下几个维度的差异:

属性维度 Helm Chart 传统应用
硬件平台 ARM、X86 ARM、X86
系统平台 Kubernetes Linux、Windows
可运行文件 java 程序、C 程序、Python 程序 java 程序、C 程序,Python 程序
可运行文件封装 Image 镜像、HelmChart rpm、deb、exe
管理工具 Helm YUM、APT
配置及环境信息 values.yaml /etc/nginx/nginx.conf、JVM 启动参数
说明文档 NOTES.txt、 README.md help 帮助、man 文档

1.1. Helm 核心概念

在 Helm 生态中,有以下几个核心概念需要了解

1.1.1. Helm

Helm 是 Kubernetes 的包管理器。

按照惯例,当指项目时,Helm 使用首字母大写。

当指命令行时, helm 所有字母使用小写。

1.1.2. Helm Chart

Helm Chart 代表着 Helm 包。包涵盖了将 Kubernetes 应用安装到 Kubernetes 集群所需要的足够多的信息。它基于一定的模板规范、目录结构和文件格式进行打包后的 tar 和 gzip 压缩包(并且可选签名) 。

1.1.3. Chart Release

Helm Release 是运行在 Kubernetes 集群中的 Chart 的实例。一个 Chart 通常可以在同一个集群中安装多次,每一次安装都会创建一个新的 Release。

以 MySQL Chart 为例,如果你想在你的集群中运行两个数据库,你可以安装该 Chart 两次。每一个数据库都会拥有它自己的 Release 和 Release Name。

1.1.4. Chart Repository

Helm Repository(仓库) 是用来存放和共享 Charts 的地方。它就像 Perl 的 CPAN 档案库网络 或是 Fedora 的 软件包仓库,只不过它是供 Kubernetes 包所使用的。

Helm 官方默认的 Repository 是 https://artifacthub.io/

1.2. 前置要求

Helm 通过 Kubernetes 的上下文 ~/.kube/config 来访问和管理 Kubernetes 集群中的 Chart Release。

想成功和正确地使用 Helm,需要以下前置条件。

1.3. Helm 安装与配置

根据 Kuberentes 的版本来选择对应的 Helm 版本。如,Helm 的 3.7.x 版本可以兼容 Kuberentes 的 1.22.x - 1.19.x 版本。

每一个版本的 Helm 提供多种操作系统的二进制版本,支持选择 Linux、Mac OS、Windows平台,以及 amd64、arm、i386、ppc64le、s390x 的 CPU 类型。这些二进制版本可以手动下载和安装。

所有历史版本管理地址:

选择需要的版本进行下,例如 Linux amd64 版的下载地址

下载完成后,解压安装:

wget https://get.helm.sh/helm-v3.7.2-linux-amd64.tar.gz
tar xf helm-v3.7.2-linux-amd64.tar.gz
cp linux-amd64/helm /usr/local/bin/helm
chmod +x /usr/local/bin/helm

安装完成后,可以判断是否可正常使用。

可正常运行的输出示例:

$ helm version
version.BuildInfo{Version:"v3.7.2", GitCommit:"663a896f4a815053445eec4153677ddc24a0a361", GitTreeState:"clean", GoVersion:"go1.16.10"}

如果环境已经安装了 Kubernetes 集群,并配置了 /root/.kube/config 时,验证是否能够正常连接的方式可以通过 helm ls 命令。

异常连接时返回

$ helm ls
Error: Kubernetes cluster unreachable

正常连接时返回

$ helm ls
NAME     NAMESPACE    REVISION    UPDATED      STATUS      CHART     APP VERSION

1.4. 配置 Helm Repository

当您已经安装并配置好 Helm 之后,可以添加一个 Helm Chart Repository 仓库。可从默认的 Artifact Hub 中查找有效的 Helm Chart 仓库,也可以自行添加一个新的 Repository 仓库

可以通过 helm repo add 来添加一个新的 Repository 仓库。例如,添加 bitnami 的 repo 仓库

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

添加成功后,可以通过 helm repo list 来查看本地已经支持的 Repository 仓库列表。

$ helm repo list
NAME            URL                                              
stable          https://charts.helm.sh/stable                    
bitnami         https://charts.bitnami.com/bitnami  

[!TIP|style:flat] BitNami 是一个开源项目,该项目产生的开源软件包括安装 Web 应用程序和解决方案堆栈,以及虚拟设备。

当完成 Repository 添加,您将可以通过 helm search 看到可安装使用的 Charts 列表:

$ 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                      8.0.2            2.0.0            Apache Airflow is a platform to programmaticall...
bitnami/apache                       8.2.3            2.4.46           Chart for Apache HTTP Server
bitnami/aspnet-core                  1.2.3            3.1.9            ASP.NET Core is an open-source framework create...
# ... and many more

1.5. 安装 Chart 示例

在安装具体 Chart 前,建议先通过 helm repo update 命令同步本地缓存信息,核心是更新本地 Repository 的 index.yaml 缓存文件,该文件中包含可以获取到的最新 Charts 列表以及仓库中每个 Chart 的 Metadata 信息,以及相关的版本信息等。

$ helm repo update 

通过 helm install 命令安装 Chart。 Helm 可以通过多种途径查找和安装 Chart, 但最简单的是安装方式还是直接安装在线的 Charts。

$ helm install bitnami/mysql --generate-name
NAME: mysql-1612624192
LAST DEPLOYED: Sat Feb  6 16:09:56 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES: ...

在上面的例子中,bitnami/mysql 这个 Chart 被安装发布成 Release,名字是 mysql-1612624192

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

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

1.6. 管理 Release

通过 helm list 您可以很容易看到哪些 Chart 被发布安装到 Kubernetes 集群中:

$ helm list
NAME                NAMESPACE    REVISION    UPDATED                                 STATUS      CHART          APP VERSION
mysql-1612624192    default      1           2021-02-06 16:09:56.283059 +0100 CET    deployed    mysql-8.3.0    8.0.23

如果环境中的 Release 已经达到目的或不满足使用需求时,可以使用 helm uninstall 命令卸载你的 Release

$ helm uninstall mysql-1612624192
release "mysql-1612624192" uninstalled

该命令会从 Kubernetes 中卸载 mysql-1612624192, 它将删除和该版本相关的所有相关资源(service、deployment、 pod等等)甚至版本历史。

如果您在执行 helm uninstall 的时候提供 --keep-history 选项, Helm 将会保存版本历史。

可以通过 helm status 命令查看指定的 Release 版本信息

$ helm status mysql-1612624192
Status: UNINSTALLED
...

在删除 Release 指定的 --keep-history 选项会让 Helm 跟踪你的版本(即使你卸载了他们), 所以你可以审计集群历史甚至使用 helm rollback 回滚版本。

如果您想通过 Helm 命令查看更多的有用的信息,请使用 helm help 命令,或者在任意命令后添加 -h 选项:

$ helm get -h

1.7. Helm Chart

Helm Chart 代表着 Helm 包。包涵盖了将 Kubernetes 应用安装到 Kubernetes 集群所需要的足够多的信息。它基于一定的模板规范、目录结构和文件格式进行打包后的 tar 和 gzip 压缩包(并且可选签名) 。

1.7.1. Helm Chart 组成

基于模板创建示例(helm create)

helm create mychart
Creating mychart

Helm Chart 组成

$ tree mychart
mychart
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml

3 directories, 10 files

Helm 主要有以下几种文件:

1.7.2. Chart 模板内置对象

对象从模板引擎传递到模板中。你的代码可以传递对象(我们将在说明 with 和 range 语句时看到示例)。甚至有几种方法在模板中创建新对象,就像我们稍后会看的 tuple 函数一样。

对象可以很简单,只有一个值。或者他们可以包含其他对象或函数。例如,Release 对象包含多个对象(如 Release.Name)并且 Files 对象具有一些函数。

目前 Helm 支持以下内置对象:

1.7.3. Chart 模板函数

Helm Chart 在开发时通过利用一些模板函数能够提供更加复杂逻辑的 Chart。

1.8. 总结

Helm 的贡献者来自遍布五大洲的二十多个国家。Helm 的贡献者包括许多世界上最大的科技公司,如谷歌、微软、三星、VMware 和 IBM 等,以及快速增长的中型公司,如 Datadog。贡献还来自数十家小型企业和初创公司,例如以代码为中心的 AG。Helm 的贡献组织在供应商和最终用户之间分布良好,供应商贡献者的多样性也在扩大。

目前 Helm 已经是 CNCF 的毕业项目,在大量企业中获得实践经验,已经逐渐成为云原生标准应用的定义与打包规范。

Copyright © 温玉 2021 | 浙ICP备2020032454号 all right reserved,powered by Gitbook该文件修订时间: 2022-06-22 01:56:22

results matching ""

    No results matching ""