Kubernetes包管理器:Helm

Kubernetes Helm

Helm是k8s的包管理器,可将它看作k8s的apt-get/yum。Helm仓库里面只有配置清单文件,没有镜像,镜像还是由镜像仓库提供。

对于使用者而言,使用Helm的好处在于,不需要了解k8s的yaml应用部署文件,可以通过Helm下载文件并在k8s上安装相应的应用。目前Helm分为Helm 2和Helm 3,我这面用的是Helm 3。

官方网址:https://helm.sh/

1. 先决条件

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

  • 一个Kubernetes集群
  • 确定安装版本的安全配置
  • 安装和配置Helm

使用Helm,需要一个Kubernetes集群,对于Helm的最新版本,建议使用Kubernetes的最新稳定版,然后,也应该有一个本地的kubectl。

2. 支持的版本

Helm的版本用 x.y.z 描述,x是主版本,y是次版本,z是补丁版本。

从Helm 3开始,Helm编译时假定与针对n-3版本的Kubernetes兼容。由于Helm 2对Kubernetes次版本变更的支持严格一些,则假定与Kubernetes的n-1版本兼容。

例如,如果在使用Kubernetes 1.17客户端API版本编译的Helm 3版本,那么它应该可以安全地使用Kubernetes 1.17,1.16,1.15,以及1.14。如果在使用Kubernetes 1.16客户端API版本编译的Helm 2版本,那么它应该可以安全地使用Kubernetes 1.16和1.15。

不推荐将Helm用于比编译它所依赖的版本更高的Kubernetes版本,因为Helm并没有做出任何向前兼容的保证。

3. Helm相关术语

① Helm

Helm是一个命令行下的客户端工具,主要用于Kubernetes应用程序Chart的创建、打包、发布以及创建和管理本地和远程的Chart仓库。

② Chart

Chart 代表着Helm包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。你可以把它看作是 Homebrew formula,Apt dpkg,或 Yum RPM 在Kubernetes 中的等价物。

③ Repository

Repository(仓库)是用来存放和共享 charts 的地方。它就像 Perl 的 CPAN 档案库网络 或是 Fedora 的 软件包仓库,只不过它是供 Kubernetes 包所使用的。Repository本质是一个Web服务器,该服务器保存了一系列的Chart软件包供用户下载,并且提供了一个该Repository的Chart包的清单文件以供查询。Helm可以同时管理多个不同的Repository。

④ Release

Release 是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。以 MySQL chart为例,如果想在集群中运行两个数据库,你可以安装该chart两次。每一个数据库都会拥有它自己的 release 和 release name。

4. 安装Helm

Helm项目提供了两种获取和安装Helm的方式。

4.1 用二进制版本安装

每个Helm版本都提供了各种操作系统的二进制版本,这些版本可以手动下载和安装。

① 下载需要的版本

② 解压

[root@k8s-master mysoft]# tar -zxvf helm-v3.11.3-linux-amd64.tar.tar

③ 在解压目录中找到helm程序,移动到需要的目录中

[root@k8s-master linux-amd64]# mv linux-amd64/helm /usr/local/bin/

然后就可以执行客户端程序并添加稳定仓库

[root@k8s-master linux-amd64]# helm version
version.BuildInfo{Version:"v3.11.3", GitCommit:"323249351482b3bbfc9f5004f65d400aa70f9ae7", GitTreeState:"clean", GoVersion:"go1.20.3"}
[root@k8s-master linux-amd64]# helm -h
The Kubernetes package manager

Common actions for Helm:

- helm search:    search for charts
- helm pull:      download a chart to your local directory to view
- helm install:   upload the chart to Kubernetes
- helm list:      list releases of charts

Environment variables:
......

4.2 使用脚本安装

Helm现在有个安装脚本可以自动拉取最新的Helm版本并在本地安装。

可以获取这个脚本并在本地执行。

$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh

如果想直接执行安装,运行 curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash。

5. 配置仓库

① 添加公用的仓库

[root@k8s-master ~]# helm repo add bitnami https://charts.bitnami.com/bitnami

② 配置helm阿里源地址

[root@k8s-master ~]# helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

③ 查看仓库

[root@k8s-master ~]# helm repo list
NAME    URL                                                   
azure   http://mirror.azure.cn/kubernetes/charts              
moikot  https://moikot.github.io/helm-charts                  
harbor  https://helm.goharbor.io                              
bitnami https://charts.bitnami.com/bitnami                    
aliyun  https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

完成后,我们可以查看可以被安装的Charts列表:

[root@k8s-master ~]# helm search repo bitnami

[root@k8s-master ~]# helm search repo aliyun

6. Chart

Helm使用的包格式称为chart。chart就是一个描述Kubernetes相关资源的文件集合。单个chart可以用来部署一些简单的,类似于memcache pod,或者某些复杂的HTTP服务器以及Web全栈应用、数据库、缓存等等。

Chart是作为特定目录布局的文件被创建的,它们可以打包到要部署的版本存档中。

如果想下载和查看一个发布的chart,但不安装它,那么可以用这个命令:helm pull chartrepo/chartname。

6.1 Chart文件结构

chart是一个组织在文件目录中的集合。目录名称就是chart名称(没有版本信息)。比如,描述WordPress的chart可以存储在wordpress/目录下。

在这个目录中,Helm可以匹配如下结构:

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 # 可选: 包含简要使用说明的纯文本文件

Helm保留使用charts/,crds/,templates/目录,以及列举出的文件名,其它文件保持原样。

6.2 Chart.yaml文件

Chart.yaml文件是chart必需的。包含如下字段:

apiVersion: chart API 版本 (必需)
name: chart名称 (必需)
version: 语义化2 版本(必需)
kubeVersion: 兼容Kubernetes版本的语义化版本(可选)
description: 一句话对这个项目的描述(可选)
type: chart类型 (可选)
keywords:
  - 关于项目的一组关键字(可选)
home: 项目home页面的URL (可选)
sources:
  - 项目源码的URL列表(可选)
dependencies: # chart 必要条件列表 (可选)
  - name: chart名称 (nginx)
    version: chart版本 ("1.2.3")
    repository: (可选)仓库URL ("https://example.com/charts") 或别名 ("@repo-name")
    condition: (可选) 解析为布尔值的yaml路径,用于启用/禁用chart (e.g. subchart1.enabled )
    tags: # (可选)
      - 用于一次启用/禁用 一组chart的tag
    import-values: # (可选)
      - ImportValue 保存源值到导入父键的映射。每项可以是字符串或者一对子/父列表项
    alias: (可选) chart中使用的别名。当你要多次添加相同的chart时会很有用
maintainers: # (可选)
  - name: 维护者名字 (每个维护者都需要)
    email: 维护者邮箱 (每个维护者可选)
    url: 维护者URL (每个维护者可选)
icon: 用做icon的SVG或PNG图片URL (可选)
appVersion: 包含的应用版本(可选)。不需要是语义化,建议使用引号
deprecated: 不被推荐的chart (可选,布尔值)
annotations:
  example: 按名称输入的批注列表 (可选).

One thought on “Kubernetes包管理器:Helm

  1. This is really attention-grabbing, You’re an excessively skilled blogger. I’ve joined your rss feed and look forward to in the hunt for more of your wonderful post. Also, I’ve shared your web site in my social networks!

回复 tlovertonet 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注