0%

Helm学习

Helm 3的学习

官网:https://helm.sh

什么是Helm?

Helm is a tool for managing Kubernetes packages called charts.

Kubernetes包管理器,是查找、分享和使用软件构建Kubernetes的最优方式

Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。你可以在 Helm 的 chart repositories 中寻找新的 chart。

The package manager for Kubernetes

Helm is the best way to find, share, and use software built for Kubernetes

(something like pip, wegt)

Helm helps you manage Kubernetes applications — Helm Charts help you define, install, and upgrade even the most complex Kubernetes application.

Charts are easy to create, version, share, and publish — so start using Helm and stop the copy-and-paste.

优点

Manage Complexity

Charts describe even the most complex apps, provide repeatable application installation, and serve as a single point of authority.

Easy Updates

Take the pain out of updates with in-place upgrades and custom hooks.

Simple Sharing

Charts are easy to version, share, and host on public or private servers.

Rollbacks

Use helm rollback to roll back to an older version of a release with ease.

Helm Architecture

Helm管理名为chart的Kubernetes包的工具

Functions

  • Create new charts from scratch

    从头开始创建新的chart

  • Package charts into chart archive (tgz) files

    将chart打包成归档(tgz)文件

  • Interact with chart repositories where charts are stored

    与存储chart的仓库进行交互

  • Install and uninstall charts into an existing Kubernetes cluster

    在现有的Kubernetes集群中安装和卸载chart

  • Manage the release cycle of charts that have been installed with Helm

    管理与Helm一起安装的chart的发布周期

Important concepts

Chart

The chart is a bundle of information necessary to create an instance of a Kubernetes application.

chart 创建Kubernetes应用程序所必需的一组信息

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


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

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

如果你想下载和查看一个发布的chart,但不安装它,你可以用这个命令:

helm pull chartrepo/chartname

chart文件结构

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

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

1
2
3
4
5
6
7
8
9
10
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/目录,以及列举出的文件名。其他文件保持原样。

chart.yaml

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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: 按名称输入的批注列表 (可选).

v3.3.2,不再允许额外的字段。推荐的方法是在 annotations 中添加自定义元数据

Config

The config contains configuration information that can be merged into a packaged chart to create a releasable object.

config 包含了可以合并到打包的chart中的配置信息,用于创建一个可发布的对象。

Repository

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

Release

A release is a running instance of a chart, combined with a specificconfig.

release 是一个与特定配置相结合的chart的运行实例

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

Components

Helm是一个可执行文件

Helm is an executable which is implemented into two distinct parts:

Helm Client

Helm客户端 是终端用户的命令行客户端

The Helm Client is a command-line client for end users. The client is responsible for the following:

  • Local chart development 本地chart开发
  • Managing repositories 管理仓库
  • Managing releases 管理发布
  • Interfacing with the Helm library 与Helm库建立接口
    1. Sending charts to be installed 发送安装的chart
    2. Requesting upgrading or uninstalling of existing releases 发送升级或卸载现有发布的请求

Helm Library

Helm库 提供执行所有Helm操作的逻辑。

The Helm Library provides the logic for executing all Helm operations. It interfaces with the Kubernetes API server and provides the following capability:

  • Combining a chart and configuration to build a release 结合chart和配置来构建版本
  • Installing charts into Kubernetes, and providing the subsequent release object 将chart安装到Kubernetes中,并提供后续发布对象
  • Upgrading and uninstalling charts by interacting with Kubernetes 与Kubernetes交互升级和卸载chart

The standalone Helm library encapsulates the Helm logic so that it can be leveraged by different clients.

独立的Helm库封装了Helm逻辑以便不同的客户端可以使用它

Implementation

The Helm client and library is written in the Go programming language.

The library uses the Kubernetes client library to communicate with Kubernetes. Currently, that library uses REST+JSON. It stores information in Secrets located inside of Kubernetes. It does not need its own database.

Configuration files are, when possible, written in YAML.

Helm客户端和库是使用Go编程语言编写的

这个库使用Kubernetes客户端库与Kubernetes通信。现在,这个库使用REST+JSON。它将信息存储在Kubernetes的密钥中。 不需要自己的数据库。

如果可能,配置文件是用YAML编写的。

操作

快速入门

先决条件

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

  1. 一个 Kubernetes 集群
  2. 确定你安装版本的安全配置
  3. 安装和配置Helm。

image-20220311145650121

安装

脚本、源码、包管理器等

mac:

image-20220309233820458

1
brew install helm

image-20220309233753099

初始化

安装好helm后,可以添加一个chart库。(可以从Artifact Hub中查找)

1
2
3
helm repo add bitnami https://charts.bitnami.com/bitnami
helm search repo bitnami
helm repo update #拿到最新的charts列表

image-20220311142518343

image-20220311143842518

安装chart

您可以通过helm install 命令安装chart。 Helm可以通过多种途径查找和安装chart, 但最简单的是安装官方的bitnamichart

image-20220311144048799

命令行

环境变量

image-20220312181042463

常用指令:

1
2
3
4
helm search:   搜索chart
helm pull:    下载chart到本地目录查看
helm install:   上传chart到Kubernetes
helm list:     列出已发布的chart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
helm completion - 为指定的shell生成自动补全脚本
helm create - 使用给定的名称创建chart
helm dependency - 管理chart依赖
helm env - helm客户端环境信息
helm get - 下载命名版本的扩展信息
helm history - 检索发布历史
helm install - 安装chart
helm lint - 验证chart是否存在问题
helm list - 列举发布版本
helm package - 将chart目录打包
helm plugin - 安装、列举或卸载Helm插件
helm pull - 从仓库下载chart并(可选)在本地目录中打开
helm push - 推送chart到远程
helm registry - 从注册表登录或登出
helm repo - 添加、列出、删除、更新和索引chart仓库
helm rollback - 回滚发布到上一个版本
helm search - helm中搜索关键字
helm show - 显示chart信息
helm status - 显示命名版本的状态
helm template - 本地渲染模板
helm test - 执行发布的测试
helm uninstall - 卸载版本
helm upgrade - 升级版本
helm verify - 验证给定路径的chart已经被签名且是合法的
helm version - 打印客户端版本信息

操作示范

Helm 搜索使用模糊字符串匹配算法,可以只输入名字的一部分

用–keep-history甚至可以回滚版本

helm install 你命名的release名字/你想安装的chart的名称

安装chart时创建了一个新的 release 对象。上述发布被命名为 happy-panda。 (如果想让Helm生成一个名称,删除发布名称并使用--generate-name。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
helm version # 检查版本
helm search hub #从 Artifact Hub 中查找并列出 helm charts
helm repo add bitnami https://charts.bitnami.com/bitnami #添加chart仓库,可以从Artifact Hub中查找(Artifact Hub中会列出说明)
helm repo list #查看配置的仓库
helm search repo bitnami #查看安装的charts列表
helm search repo #从所添加的仓库中查找chart·
helm repo update #拿到最新的charts列表
helm install bitnami/mysql --generate-name #安装chart,生成名字
helm show chart bitnami/mysql #显示基本信息
helm show all bitnami/mysql #显示全部信息
helm list #查看被发布的chart
helm ls #同上
helm uninstall mysql-1612624192 #卸载chart版本(上一条列出来的)
helm uninstall mysql-1612624192 --keep-history #也是卸载但是会保存版本历史,甚至可以用helm roll把车开回滚历史
helm show values mysql-1612624192 #查看chart中的可配置选项
helm rollback happy-panda 1 #第一次 revision 的值永远是1
helm history #查看特定release 的修订版本号
helm list --all #展示 Helm 保留的所有 release 记录,包括失败或删除的条目(指定了 --keep-history)


helm create #开发chart
helm lint #验证格式是否正确
helm package #将 chart 打包分发