时间救星
Helm将一个应用所需要声明的所有Kubernetes资源,以模板的形式打包到一个文件夹下,然后通过预定义的或用户自定义的K-V文件进行渲染,最后排序后一并提交到Kubernetes执行。Helm还提供一个额外的抽象release,它存在的形式是ConfigMap
,记录每一次应用的发布。如果你对如何利用Kubernetes部署不同类型的应用没有经验,那么可以先行阅读官方文档。如果你无需了解如何使用Helm部署你的复杂应用,那么了解上述内容已经足够。
Helm & Kubernetes
Helm
是一款服务于Kubernetes生态的工具。根据官方文档的解释,Helm是一个管理Kubernetes Chart
的工具。而Chart是预配置Kubernetes资源的包。从功能上来说,Helm是一个生成预定义全栈应用
配置包,根据自定义的参数来渲染配置包,并在Kubernetes集群中声明对应的资源对象的工具。Chart全栈地定义了一个应用,不仅仅是应用本身,包括它依赖的DB、消息组件、一致性组件等其他应用,结合自定义的参数,Chart可以渲染为Kubernetes认识的资源对象描述文件,例如deployment.yaml。
熟悉Kubernetes的同学应该清楚,Kubernetes没有定义一个类型叫做Application
。Kubernetes倡导微服务架构,一个复杂应用应当是一个抽象的概念,由若干个松散耦合的微服务共同组成。虽然Kubernetes在DevOps上做得非常好,但对于用户来说,手动地定义、部署、运维若干个微服务,而不是一个应用,代价是相当高昂的。Helm的出现就是为了解决微服务架构的这个痛点,通过预定义文件
与自定义配置文件
的组合,来定义一个复杂应用,并在Kubernetes中声明它。
有了Helm、Chart、Kubernetes,我们可以做到类似一键建站
的敏捷性,并且在拆分应用、实践微服务架构的过程中,避开松散耦合带来的管理痛点。
使用Helm
先前条件:
安装Helm命令行工具,并在Kubernetes集群中安装Tiller。
-
编写或获取Charts
我们可以从Repository获取Charts,也可以从零开始或基于Repository的成品或半成品自定义自己需要的Charts。
自定义:➜ ~ helm create test-andy Creating test-andy ➜ ~ cd test-andy ➜ test-andy ls Chart.yaml charts templates values.yaml ➜ test-andy cat Chart.yaml apiVersion: v1 description: A Helm chart for Kubernetes name: test-andy version: 0.1.0 ➜ test-andy ls templates NOTES.txt _helpers.tpl deployment.yaml ingress.yaml service.yaml ➜ test-andy cat values.yaml # Default values for test-andy. # This is a YAML-formatted file. # Declare variables to be passed into your templates. replicaCount: 1 ...
获取:
➜ ~ helm search wordpress NAME VERSION DESCRIPTION stable/wordpress 2.0.0 Web publishing platform for building blogs and ... ➜ ~ helm fetch stable/wordpress --untar=true # untar=true 可以解开 ➜ ~ ls wordpress Chart.yaml charts requirements.yaml values.yaml README.md requirements.lock templates
-
安装
helm可以通过命令
helm install
安装Charts或Charts压缩包.tgz
。可以在参数中使用自定义的values.yaml
文件或自定义的k-v参数,它们总是会覆盖Charts或.tgz
文件中的值。可以通过命令helm list
查看已经安装的release。
➜ ~ helm install --name my-test-andy --set "key1=value1,key2=value2" ./test-andy
- 更新或卸载release
helm可以通过命令helm upgrade
和helm uninstall
来更新或卸载已经安装的release。
➜ ~ helm upgrade my-test-andy test-andy --set "key1=value1,key2=value2"
➜ ~ helm uninstall my-test-andy
Charts与模板
Helm使用Chart模板加上预定义或自定义的值来渲染出所需要的.yaml
文件,通过Kubernetes创建对应的资源。模板与参数共同决定了Helm应用的行为。Helm支持标准Go模板语言,支持约60个来自Go Template Language
以及Sprig template library
的自定义函数,同样支持管道、条件语句等特性。本节将在介绍WordPress
模板的过程中,简要介绍Helm使用的模板语言,并介绍Chart的一些特性。
➜ wordpress tree
.
|____Chart.yaml # 该Chart的描述文件
|____LICENSE
|____README.md
|____charts # 依赖的Chart的集合文件夹
|____requirements.yaml # 描述当前Chart依赖的其他Chart
|____templates # 该Chart所需的Kubernetes对象模板
| |____deployment.yaml # deployment模板
| |____NOTES.txt # 该模板在release安装完成后会打印到控制台
| |____secrets.yaml # 储存secrect敏感配置信息的对象模板
| |____svc.yaml # service对象模板
| |____tests