第一章:Helm 简介
1.1 为什么需要 Helm ?
- Kubernetes 上的应用对象,都是由特定的资源描述组成,包括 Deployment、Service 等,都保存在各自的文件中或者集中写在一个配置文件,然后通过
kubectl apply -f
部署。
- 如果应用只由一个或几个这样的服务组成,上面的部署方式就足够了。
- 但是对于一个复杂的应用,会有很多类似上面的资源描述文件,如:微服务架构应用,组成应用的服务可能多达几十、上百个,如果有更新或回滚应用的需求,可能要修改和维护所涉及到大量的资源文件,而这种组织和管理应用的方式就显得力不从心了。并且由于缺少对发布过的应用进行版本管理和控制,使得 Kubernetes 上的应用维护和更新面临诸多的挑战,主要面临以下的问题:
- ① 如何将这些服务作为一个整体管理?
- ② 这些资源文件如何高效复用?
- ③ 应用级别的版本如何管理?
1.2 Helm 介绍
- Helm 是 Kubernetes 的包管理工具,就像 Linux 下的包管理器,如:yum、apt 等,可以很方便的将之前打包好的 yaml 文件部署到 Kubernetes 上。
1.3 Helm 的三大概念
Chart
代表着 Helm 包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。你可以把它看作是 Homebrew formula,Apt dpkg,或 Yum RPM 在Kubernetes 中的等价物。
Repository(仓库)
是用来存放和共享 charts 的地方。它就像 Perl 的 CPAN 档案库网络 或是 Fedora 的 软件包仓库,只不过它是供 Kubernetes 包所使用的。
Release
是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release 。以 MySQL chart为例,如果你想在你的集群中运行两个数据库,你可以安装该 chart 两次。每一个数据库都会拥有它自己的 release 和 release name 。
- Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。你可以在 Helm 的 chart repositories 中寻找新的 chart。
- 可以类比 Docker 来理解,Chart 就类似于 Docker 中的镜像(Docker 中的镜像就是一系列文件的集合,Chart 也是一系列文件的集合),Repository(仓库)就类似于 Docker Hub,Release 就类似于 Docker 中的容器(可以根据镜像 run 多个容器)。
第二章:Helm 安装
2.1 Helm 安装的提前准备
- 想成功和正确地使用 Helm ,需要以下前置条件:
- ① 一个 Kubernetes 集群。
- ② 确定你安装版本的安全配置。
- ③ 安装和配置 Helm 。
- 安装或者使用现有的 Kubernetes 集群:
- 使用 Helm ,需要一个 Kubernetes 集群。对于 Helm 的最新版本,我们建议使用 Kubernetes 的最新稳定版, 在大多数情况下,它是
倒数第二个次版本
。
- 应该有一个本地的
kubectl
2.2 Helm 安装
- 下载 helm :
wget https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz
- 解压 Helm :
tar -zxvf helm-v3.6.3-linux-amd64.tar.gz
- 移动到指定目录:
mv linux-amd64/helm /usr/local/bin/helm
- helm 命令补全:
helm completion bash | sudo tee /etc/bash_completion.d/helm > /dev/null
source /usr/share/bash-completion/bash_completion
2.3 Helm 常用命令
2.4 Helm 的 chart 仓库
- 微软仓库:http://mirror.azure.cn/kubernetes/charts,推荐。
- 阿里云仓库:https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts。
2.4.1 添加 chart 仓库
helm repo add 仓库名 仓库URL地址
第三章:Helm 的基本使用
3.1 使用 chart 部署一个应用
3.1.1 查找 chart
# 在Artifact Hub https://artifacthub.io/ 或自己的hub实例中搜索chart
helm search hub xxx
# 在本地 helm 客户端中的仓库中搜索chart
helm search repo xxx
helm search repo mysql
3.1.2 查看 chart 信息
# 检查chart(目录、文件或URL)并显示所有的内容(values.yaml, Chart.yaml, README)
helm show all [CHART]
# 检查chart(目录、文件或URL)并显示Chart.yaml文件的内容
helm show chart [CHART]
# 检查chart(目录、文件或URL)并显示values.yaml文件的内容
helm show values [CHART]
# 检查chart(目录、文件或URL)并显示README文件内容
helm show readme [CHART] [flags]
3.1.3 安装 chart ,形成 release
helm install [NAME] [CHART]
注意:
● 每执行一次 install 命令,就会形成一个 release 。
● mysql 是有状态的应用,如果要想执行成功,必须设置持久化存储,并设置默认的动态供应。
3.1.4 查看 release 列表
helm list
状态可能是 unknown, deployed, uninstalled, superseded, failed, uninstalling, pending-install, pending-upgrade 或 pending-rollback 。
3.1.5 查看 release 状态
helm status RELEASE_NAME
状态包括:
● 最后部署时间
● 发布版本所在的k8s命名空间
● 发布状态(可以是: unknown, deployed, uninstalled, superseded, failed, uninstalling, pending-install, pending-upgrade 或 pending-rollback)
● 发布版本修订
● 发布版本描述(可以是完成信息或错误信息,需要用--show-desc启用)
● 列举版本包含的资源,按类型排序
● 最后一次测试套件运行的详细信息(如果使用)
● chart提供的额外的注释
3.2 安装前自定义chart配置选项
3.2.1 概述
- 自定义选项是因为并不是所有的 chart 都能按照默认配置运行成功,可能会需要一些环境依赖,例如 PV 。
- 所以我们需要自定义 chart 配置选项,安装过程中有两种方法可以传递配置数据:
- ①
--values
(或-f
):指定带有覆盖的 YAML 文件。这里可以多次指定,最右边的文件优先。
- ②
--set
:在命令行上指定替代。如果两种都用,那么--set
的优先级高。
3.3 构建一个 Chart
3.3.1 Chart 的文件结构
- chart 是一个组织在文件目录中的集合。目录名称就是 chart 名称(没有版本信息),因此描述 wordpress 的 chart 可以存储在
wordpress/
目录中。
wordpress/
├── charts # 包含chart依赖的其他chart
├── Chart.yaml # 用于描述这个 Chart 的基本信息,包括名字、描述信息以及版本等。
├── templates # 模板目录, 当和 values 结合时,可生成有效的Kubernetes manifest文件
│ ├── deployment.yaml
│ ├── _helpers.tpl # 放置可以通过 chart 复用的模板辅助对象
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt # 用于介绍 Chart 帮助信息, helm install 部署后展示给用户。例如:如何使用这个 Chart、列出缺省的设置等。
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml # chart 默认的配置值
3.3.2 安装自定义 chart
helm install [NAME] [CHART]
3.3.3 对自定义 chart 进行打包
helm package [CHART_PATH]
3.3.4 升级
helm upgrade --set xxx=xxx [RELEASE] [CHART]
3.3.5 回滚
helm rollback <RELEASE> [REVISION]
3.3.5 卸载
helm uninstall RELEASE_NAME