Helm 3的学习
什么是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 | wordpress/ |
Helm保留使用 charts/
,crds/
, templates/
目录,以及列举出的文件名。其他文件保持原样。
chart.yaml
Chart.yaml
文件是chart必需的。包含了以下字段:
1 | apiVersion: chart API 版本 (必需) |
从 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两次。每一个数据库都会拥有它自己的 release 和 release 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库建立接口
- Sending charts to be installed 发送安装的chart
- 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,需要以下前置条件。
- 一个 Kubernetes 集群
- 确定你安装版本的安全配置
- 安装和配置Helm。
安装
脚本、源码、包管理器等
mac:
1 | brew install helm |
初始化
安装好helm后,可以添加一个chart库。(可以从Artifact Hub中查找)
1 | helm repo add bitnami https://charts.bitnami.com/bitnami |
安装chart
您可以通过helm install
命令安装chart。 Helm可以通过多种途径查找和安装chart, 但最简单的是安装官方的bitnami
chart
命令行
环境变量
常用指令:
1 | helm search: 搜索chart |
1 | helm completion - 为指定的shell生成自动补全脚本 |
操作示范
Helm 搜索使用模糊字符串匹配算法,可以只输入名字的一部分
用–keep-history甚至可以回滚版本
helm install 你命名的release名字/你想安装的chart的名称
安装chart时创建了一个新的 release 对象。上述发布被命名为 happy-panda
。 (如果想让Helm生成一个名称,删除发布名称并使用--generate-name
。)
1 | helm version # 检查版本 |