Helm 是查找、分享和使用软件构建 Kubernetes 的最优方式!
Helm
帮助您管理 Kubernetes
应用 —— Helm
图表,即使是最复杂的 Kubernetes
应用程序,都可以帮助您定义,安装和升级。图表 Chart
易于创建、发版、分享和发布,所以停止复制粘贴,开始使用 Helm
吧。
Helm
是什么?Kubernetes
包管理器,可以简单理解为apt
或yml
工具。
工具特性
Helm 是 CNCF 的毕业项目,由 Helm 社区维护。
- 复杂性管理
即使是最复杂的应用,图表 Charts
依然可以描述, 提供使用单点授权的可重复安装应用程序。
- 易于升级
随时随地升级和自定义的钩子消除您升级的痛苦。
- 分发简单
图表 Charts
很容易在公共或私有化服务器上发版,分发和部署站点。
- 回滚
使用 helm rollback
可以轻松回滚到之前的发布版本。
安装使用
工具安装提供多种安装方式
https://helm.sh/zh/docs/topics/plugins/
- [1] 获取 Helm 工具 - 包管理器安装
- 安装完成后,解压二进制包并添加到
PATH
,就可以使用了!
- 安装完成后,解压二进制包并添加到
1 | # homebrew(macOS) |
- [2] 获取 Helm 工具 - 使用脚本安装
Helm
现在有个安装脚本可以自动拉取最新的Helm
版本并在本地安装!
1 | # 直接执行安装 |
- [3] 获取 Helm 工具 - 二进制版本安装
- 每个
Helm
版本都提供了各种操作系统的二进制版本!
- 每个
1 | # 下载需要的版本 |
- [4] 获取 Charts 图表
- 访问 Helm 应用中心 浏览公共库大量的图表!
- [5] 简单上手使用
- 安装好了
Helm
之后,可以添加一个chart
仓库!
- 安装好了
1 | # 添加:有效的Helm-chart仓库 |
三大概念
Helm
安装 charts
到 Kubernetes
集群中,每次安装都会创建一个新的 release
。
- Chart
Chart
代表着Helm
包。- 你可以把它看作是
Apt
或Yum
在Kubernetes
中的等价物。 - 它包含在
Kubernetes
集群内部运行应用程序,工具或服务所需的所有资源定义。
- Repository
Repository
(仓库)是用来存放和共享charts
的地方。- 它就像
Fedora
的软件包仓库,只不过它是供Kubernetes
包所使用的。
- Release
Release
是运行在Kubernetes
集群中的chart
的实例。- 一个
chart
通常可以在同一个集群中安装多次,每一次安装都会创建一个新的release
。
Helm
按照以下顺序安装资源(这里列出主要的一些):
- Namespace
- NetworkPolicy
- ResourceQuota
- LimitRange
- ServiceAccount
- Secret
- SecretList
- ConfigMap
- StorageClass
- PersistentVolume
- PersistentVolumeClaim
- Role
- RoleList
- RoleBinding
- RoleBindingList
- Service
- DaemonSet
- Pod
- ReplicationController
- ReplicaSet
- Deployment
- HorizontalPodAutoscaler
- StatefulSet
- Job
- CronJob
- Ingress
- APIService
组织架构
常用操作
命令实例 | 对应功能介绍 |
---|---|
helm repo add bitnami https://charts.bitnami.com/bitnami |
添加有效的 Helm-chart 仓库 |
helm repo list |
查看配置的 chart 仓库 |
helm search repo wordpress |
从添加的仓库中查找 chart 的名字 |
helm install happy-panda bitnami/wordpress |
安装一个新的 helm 包 |
helm status happy-panda |
来追踪展示 release 的当前状态 |
helm show values bitnami/wordpress |
查看 chart 中的可配置选项 |
helm uninstall happy-panda |
从集群中卸载一个 release |
helm list |
看到当前部署的所有 release |
helm pull bitnami/wordpress |
下载和查看一个发布的 chart |
helm upgrade |
升级 release 版本 |
helm rollback |
恢复 release 版本 |
值传递方式
安装前自定义 chart
上述安装方式只会使用 chart 的默认配置选项。很多时候,我们需要自定义 chart 来指定我们想要的配置。
使用 helm show values
可以查看 chart 中的可配置选项:
1 | $ helm show values bitnami/wordpress |
然后,你可以使用 YAML 格式的文件覆盖上述任意配置项,并在安装过程中使用该文件。
1 | $ echo '{mariadb.auth.database: user0db, mariadb.auth.username: user0}' > values.yaml |
上述命令将为 MariaDB 创建一个名称为 user0
的默认用户,并且授予该用户访问新建的 user0db
数据库的权限。chart 中的其他默认配置保持不变。
安装过程中有两种方式传递配置数据:
--values
(或-f
):使用 YAML 文件覆盖配置。可以指定多次,优先使用最右边的文件。--set
:通过命令行的方式对指定项进行覆盖。
如果同时使用两种方式,则 --set
中的值会被合并到 --values
中,但是 --set
中的值优先级更高。在--set
中覆盖的内容会被被保存在 ConfigMap 中。可以通过 helm get values <release-name>
来查看指定 release 中 --set
设置的值。也可以通过运行 helm upgrade
并指定 --reset-values
字段来清除 --set
中设置的值。
--set
的格式和限制
--set
选项使用 0 或多个 name/value 对。最简单的用法类似于:--set name=value
,等价于如下 YAML 格式:
1 | name: value |
多个值使用逗号分割,因此 --set a=b,c=d
的 YAML 表示是:
1 | a: b |
支持更复杂的表达式。例如,--set outer.inner=value
被转换成了:
1 | outer: |
列表使用花括号({}
)来表示。例如,--set name={a, b, c}
被转换成了:
1 | name: |
从 2.5.0 版本开始,可以使用数组下标的语法来访问列表中的元素。例如 --set servers[0].port=80
就变成了:
1 | servers: |
多个值也可以通过这种方式来设置。--set servers[0].port=80,servers[0].host=example
变成了:
1 | servers: |
如果需要在 --set
中使用特殊字符,你可以使用反斜线来进行转义;--set name=value1\,value2
就变成了:
1 | name: "value1,value2" |
类似的,你也可以转义点 序列(英文句号)。这可能会在 chart 使用 toYaml
函数来解析 annotations,labels,和 node selectors 时派上用场。--set nodeSelector."kubernetes\.io/role"=master
语法就变成了:
1 | nodeSelector: |
深层嵌套的数据结构可能会很难用 --set
表达。我们希望 Chart 的设计者们在设计 values.yaml
文件的格式时,考虑到 --set
的使用。(更多内容请查看 Values 文件)
模板的使用
自定义开发
chart 开发指南 介绍了如何开发你自己的 chart。 但是你也可以通过使用 helm create
命令来快速开始:
1 | $ helm create deis-workflow |
现在,./deis-workflow
目录下已经有一个 chart 了。你可以编辑它并创建你自己的模版。
在编辑 chart 时,可以通过 helm lint
验证格式是否正确。
当准备将 chart 打包分发时,你可以运行 helm package
命令:
1 | $ helm package deis-workflow |
然后这个 chart 就可以很轻松的通过 helm install
命令安装:
1 | $ helm install deis-workflow ./deis-workflow-0.1.0.tgz |
打包好的 chart 可以上传到 chart 仓库中。查看 Helm chart 仓库获取更多信息。
钩子的使用
仓库的创建
自动化发布
Chart 发布操作用以自动化 GitHub 的页面 Chart
新版本变化
参考链接
本文转载自:「 Escapelife 的博客 」,原文:https://tinyurl.com/53hjshe2 ,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。