1、Helm介绍
在Kubernetes中部署容器云的应用也是一项有挑战性的工作,Helm就是为了简化在Kubernetes中安装部署容器云应用的一个客户端工具。通过helm能够帮助开发者定义、安装和升级Kubernetes中的容器云应用,同时,也可以通过helm进行容器云应用的分享。在Kubeapps Hub中提供了包括Redis、MySQL和Jenkins等参见的应用,通过helm可以使用一条命令就能够将其部署安装在自己的Kubernetes集群中。
helm的整体架构如下图所示,Helm架构由Helm客户端、Tiller服务器端和Chart仓库所组成;Tiller部署在Kubernetes中,Helm客户端从Chart仓库中获取Chart安装包,并将其安装部署到Kubernetes集群中。
Helm是管理Kubernetes包的工具,Helm能提供下面的能力:
- 创建新的charts
- 将charts打包成tgz文件
- 与chart仓库交互
- 安装和卸载Kubernetes的应用
- 管理使用Helm安装的charts的生命周期
在Helm中,有三个需要了解的重要概念:
- chart:是创建Kubernetes应用实例的信息集合;
- config:创建发布对象的chart的配置信息
- release:chart的运行实例,包含特定的config
1.1 Helm组件
在Helm中有两个主要的组件,既Helm客户端和Tiller服务器:
Helm客户端:这是一个供终端用户使用的命令行工具,客户端负责如下的工作:
- 本地chart开发
- 管理仓库
- 与Tiller服务器交互
-
- 发送需要被安装的charts
- 请求关于发布版本的信息
- 请求更新或者卸载已安装的发布版本
Tiller服务器: Tiller服务部署在Kubernetes集群中,Helm客户端通过与Tiller服务器进行交互,并最终与Kubernetes API服务器进行交互。 Tiller服务器负责如下的工作:
- 监听来自于Helm客户端的请求
- 组合chart和配置来构建一个发布
- 在Kubernetes中安装,并跟踪后续的发布
- 通过与Kubernetes交互,更新或者chart
客户端负责管理chart,服务器发展管理发布。
1.2 Helm技术实现
Helm客户端是使用Go语言编写的,它通过gRPC协议与Tiller服务器交互。
Tiller服务器也是使用Go语言编写的,它使用Kubernetes客户端类库(当前是哦那个REST+JSON)与Kubernetes进行通讯。
Tiller服务器通过Kubernetes的ConfigMap存储信息,因此本身没有用于存储数据库。
2、Helm安装部署
2.1 安装Helm客户端
在进行Helm客户端安装前,请确认已有可用的Kubernetes集群环境,并已安装了kubectl。
通过访问:https://github.com/kubernetes/helm/releases,下载Helm的合适的版本。
1)此文下载helm-v2.8.0-linux-amd64.tgz版本;
2)解压缩文件:tar -zxvf helm-v2.8.0-linux-amd64.tgz
3)将解压缩后的helm移至/usr/local/bin目录下:mv linux-amd64/helm /usr/local/bin/helm
注意:
- 本文使用的操作系统为Centos 7.3;
- 最好在安装kubectl命令行工具的机器上安装Helm客户端;或者将安装kubectl命令行工具生成的配置文件($HOME/.kube/config)复制到Helm客户端所安装的机器上($HOME/.kube/config)。
2.2 安装Tiller服务器
2.2.1 使用默认配置文件安装
通过在Helm客户端中执行如下的命令来安装Tiller服务器:
$ helm init
注意:
- helm init命令通过$HOME/.kube/config配置文件确定在哪个Kubernetes集群中按照Tiller服务器。
- 此命令会将Tiller服务器安装Kubernetes的kube-system命名空间中。
2.2.2 使用Service Account安装
1)创建一个名为tiller的Service Account
$ kubectl create serviceaccount tiller --namespace kube-system
2)授予名为tiller的Service Account集群管理员角色cluster-admin:
将tiller绑定至集群管理员角色的的yaml文件如下所示:
apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: tiller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system
通过执行kubectl create -f将授予tiller集群管理员角色:
$ kubectl create -f rbac-config.yaml
3)安装Tiller服务器
$ helm init --service-account tiller
2.3 验证安装
在安装完成后,可以通过执行如下命令来检查是安装成功:
$ helm version
如果正确显示Helm客户端和Tiller服务器的版本,这表示安装成功。
或者通过执行kubectl的如下命令来查看是否已正常按照Tiller服务器:
$ kubectl get pods -n kube-system
3、使用Helm
Helm所使用的包格式为chart,chart是描述Kubernetes资源的文件集合。通过chart能够部署类似于memcache等简单的应用,或者能够部署类似于Http服务器、数据库等复杂的应用。此文主要就chart目录、chart.yaml文件和values.yaml文件进行介绍。
3.1 Chart目录结构
在使用Helm之前,先以wordpress为例来看一下一个Chart都包含哪些内容:
wordpress/ Chart.yaml # 必需::包含关于chart信息的YAML文件 LICENSE # 可选: chart的license描述文件 README.md # 可选:可读的说明文件 requirements.yaml # 可选:列示chart依赖的YAML文件 values.yaml # 必需:chart默认的配置值文件 charts/ # 可选:包含chart所有依赖的目录 templates/ # 可选:包含模板文件的目录 templates/NOTES.txt # 可选:部署后的使用说明
3.2 chart.yaml文件介绍
对于chart来说,chart.yaml文件是必需的文件,此文件的内容如下:
name: 必需,chart的名称 version: 必需,SemVer 2的版本 description: 可选,此项目的一句话描述 keywords: – 可选,此项目的关键词列表 home: 可选,此项目主页面的URL sources: – 可选,此项目的源代码URL列表 maintainers: # 可选 – name: 维护者的名字
email: 维护者的email地址 url: 维护者的URL engine: gotpl # 可选,模板引擎的名称 icon: 可选,被使用的SVG或者PNG格式图标的URL appVersion: 可选,应用的版本 deprecated: 可选,标识吃chart是否将要被废弃 tillerVersion: chart所要求的Tiller服务器的版本
3.3 values.yaml文件介绍
chart的配置文件values.yaml所包含的内容如下例子所示:
imageRegistry: "quay.io/deis" dockerTag: "latest" pullPolicy: "Always" storage: "s3"
在chart中可以包含一个默认的values.yaml文件,Helm安装命令也允许通过–values参数指定应该YAML文件:
$ helm install --values=myvals.yaml wordpress
通过给定–values参数的方式,helm会将此参数给定的YAML文件的内容与默认values.yaml文件的内容进行合并,例如在myvals.yaml文件的内容是:
storage: "gcs"
合并后的文件内容将如下所示:
imageRegistry: "quay.io/deis" dockerTag: "latest" pullPolicy: "Always" storage: "gcs"
注意:默认的值文件必需被命名为values.yaml。在Kubernetes中,对于如何使用helm安装部署容器化应用,请参考《基于Helm安装部署高可用的Redis》。
4 Chart应用仓库
Kubeapps Hub(https://hub.kubeapps.com)作为公共的chart应用仓库,目前在上面已经以chart的格式提供Nginx、Jenkins、Redis等常用应用。在此仓库中可以发现符合自己需要的Kubernetes应用,或者发布自己以chart格式构建的Kubernetes应用。
参考资料
作者简介:
季向远,北京神舟航天软件技术有限公司产品经理。本文版权归原作者所有。