Helm操作指南
- Helm 简介
- 我们可以将helm看作Kubernetes下的yum(centos 下负责安装包管理的工具)。helm是一个用于Kubernetes包管理器,每一个包称为chart,一个chart是一个目录(一般会打包为name-version.tgz包,便于传输管理)。
- helm提供应用部署、删除、升级、回滚等功能。
- Helm 组件及相关术语
- Helm
- helm是命令行下的客户端工具。主要用于kubernetes应用程序chart的创建、打包、创建、和管理本地和远程的chart仓库。
- Tiller
- tiller是helm的服务器,部署在kubernetes集群中,tiller用于接收helm 的请求。并根据chart生成kunernetes的部署文件(helm称为release),然后交给kubernetes创建应用。tiller还提供release的升级、删除、回滚等一系列功能。
- Chart
- chart是helm的软件包,采用tar格式。 其中包含一组kubernetes资源相关的yaml文件。
- Repoistory
- repoistory是helm的软件仓库,repoistory本质上是一个web服务器。该服务器保存了一系列chart软件包以给用户下载,并提供了一个该repoistory的chart包的清单以供查询。helm可以同时管理多个不同的repoistory。
- Release
- 使用helm install 命令在kubernetes集群部署的chart称为release。
- 注意:helm提到的release和通常概念的版本不同,这里的release可以理解为helm使用chart打包部署的一个应用实例。
- Helm
- Helm 工作原理
- Chart install 过程:
- helm从指定的目录或者.tgz文件解析出chart结构信息。
- helm将指定的chart结构和values信息通过grpc传递给tiller。
- tiller根据chart和values生成一个relesae。
- tiller将release传递给kunernetes用于生成release。
- Chart Update过程:
- helm从指定的目录或者.tgz文件解析出chart结构信息。
- helm将要更新的relsase的名称、结构信息、values信息传递给tiller。
- tiller生成release并更新指定名称的release的history。
- tiller将release发送给kubernetes用于更新release。
- Chart Rollback过程:
- helm将要回滚的release名称传递给tiller。
- tiller将根据release名称查找history。
- tiller将从history中获取一个release。
- tiller将上一个release发送给kubernetes用于替换当前的release。
- Helm 部署
- helm 客户端安装
- helm init #安装helm客户端(默认是谷歌镜像)
- helm init --client-only --stable-repo-url https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/ #使用国内镜像安装
- helm 服务端安装tiller
- 给 tiller 授权
- 验证 tiller是否安装成功
- kubectl -n kube-system get pods|grep tille
- helm version
- 卸载 helm 服务端 tiller
- helm reset --force
- helm 使用
- 更换仓库:
- 若遇到Unable to get an update from the “stable” chart repository (https://kubernetes-charts.storage.googleapis.com) 错误 手动更换stable 存储库为阿里云的存储库
- helm repo remove stable #移除原先的仓库。
- helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts #添加新的仓库地址
- helm repo update #更新仓库
- 若遇到Unable to get an update from the “stable” chart repository (https://kubernetes-charts.storage.googleapis.com) 错误 手动更换stable 存储库为阿里云的存储库
- 查看存储库中可用的所有 helm chart:
- helm search #查看所有chart
- 更新 charts 列表:
- helm repo update #更新charts列表
- 安装 charts
- Monocular是一个开源软件,用于管理kubernetes上以helm charts形式创建的服务。可以通过它来安装
- helm charts
- Nginx ingress controller
- Monocular是一个开源软件,用于管理kubernetes上以helm charts形式创建的服务。可以通过它来安装
- 查看 kubernetes 已经安装的 charts
- helm list #查看charts列表
- 删除安装的 chart
- helm delete xxx #删除指定的chart
- 更换仓库:
- helm 客户端安装
- Helm Chart 结构
- chart 目录结构
-
├── charts # 这个 charts 依赖的其他 charts,始终被安装
├── Chart.yaml # 描述这个 Chart 的相关信息、包括名字、描述信息、版本等
├── LICENSE # [可选]协议
├── Requirements.yaml # [可选] 用于存放当前Chart依赖的其它Chart的说明文件
├── Readme.md # [可选]当前chart的介绍
├── templates # 模板目录
│ ├── deployment.yaml # deployment 控制器的 Go 模板文件
│ ├── _helpers.tpl # 以 _ 开头的文件不会部署到 k8s 上,可用于定制通用信息
│ ├── ingress.yaml # ingress 的模板文件
│ ├── NOTES.txt # Chart 部署到集群后的一些信息,例如:如何使用、列出缺省值
│ ├── service.yaml # service 的 Go 模板文件
│ ├── secrets.yaml # secrets的 Go 模板文件
│ └── tests
│ └── test-connection.yaml
└── values.yaml # 模板的值文件,这些值会在安装时应用到 GO 模板生成部署文件 - Chart.yaml 文件
- name : [必须] chart的名称
- apiVersion :[可选] api版本和版本号
- version : [必须] chart的版本号,版本号必须符合SemVer 2 简书 https://www.jianshu.com/p/e2619a7aa60e
- description : [可选] 文档描述
- keywords:
- - [可选]关键字列表
- home : [可选] 项目地址
- sources :
- - [可选]当前chart的下载地址列表
- Chart 目录和 Requirements.yaml
- chart支持两种方式表示依赖关系,可以使用Requirements.yaml或直接将依赖的chart放置到chart目录中。
- dependencies:
- name: example
version: 1.2.3
repository: http://example.com/charts
- name: Chart名称
version: Chart版本
repository: 该Chart所在的仓库地址
- templates 目录
- templates目录存放了kubernetes部署文件的模板。
- yaml文件模板遵循 go template语法 官网链接 https://golang.org/pkg/text/template/
- 模板语法扩展了 golang/text/template的语法:
-
- chart 目录结构
# 这种方式定义的模版,会去除test模版尾部所有的空行
{{- define "test"}}
模版内容
{{- end}}
# 去除test模版头部的第一个空行
{{- template "test" }}
{{- define "test"}}
模版内容
{{- end}}
# 去除test模版头部的第一个空行
{{- template "test" }}
- 检查配置和模板是否有效
- helm install --dry-run --debug <chart_dir> #验证配置的模板变量与渲染的yaml是否一致
- 部署到kubernetes
- 在mychart目录下执行命令
- helm install . #安装到默认命名空间
- helm install
--namespace gitlab --name gitlab-runner *.tgz
#安装到指定命名空间
- 查看部署的relaese
- helm list #查看relaese list
- 删除部署的relaese
- helm delete XXX #执行删除命令
- 查看部署relaese相信信息
- helm get XXX #查看详细信息
- 在mychart目录下执行命令
- 打包分享
- 我们可以修改chart.yaml中的配置信息,然后使用下列命令将chart打包成一个压缩文 件。
- helm pakaage . #打包文件,得到xxx-version.tgz
- 将应用包发布到 Repository
- 虽然我们打包了 chart 并且发布到了helm本地目录中,但通过helm search找不到刚刚生成的chart包。
- helm search XXX #查找包
- 这是因为 repository目录中的 chart包还没有被helm管理。但是通过helm repo list 命令可以查看目前 helm中配置的repository信息。
- helm repo list #查看repository信息
- 注意:在新版中,使用helm init 命令会默认配置一个名为local的本地仓库。
- 虽然我们打包了 chart 并且发布到了helm本地目录中,但通过helm search找不到刚刚生成的chart包。
- 第三方的chart存储库
- 随着helm的普及,可以使用的第三方chart库也越来越多,使用以下命令添加第三方存储库
- helm repo add 存储库名 库存库url #添加存储库
- helm repo update
- 第三方存储库资源
- https://github.com/coreos/prometheus-operator/tree/master/helm # Prometheus Operator
- https://github.com/bitnami/charts # Bitnami Library for Kubernetes
- https://github.com/att-comdev/openstack-helm # Openstack-Helm
- https://github.com/sapcc/openstack-helm # Openstack-Helm
- https://github.com/jackzampolin/tick-charts # Tick-Charts
- 随着helm的普及,可以使用的第三方chart库也越来越多,使用以下命令添加第三方存储库
- helm 升级和回退一个应用
- helm history xxx #查看发布的历史版本
- helm search XXX -l #查看chart包版本
- 升级一个应用
- 我们可以指定升到某一个版本,如果不指定,默认是最新版。
- helm upgrade XXX local/XXX #升级
- 回退一个应用
- helm rollback XXX #默认回退到上一个版本
- 删除一个应用
- helm delete XXX #删除
- helm ls -a XXX #确认是否已经删除,状态为delete
- helm ls -deleted #列出删除的relaese
- helm 如何结合CI/CD?
- 采用helm可以把零散的kubernetes应用配置文件作为一个chart管理。chart源码和源代码一起放到Git库中管理。通过把chart参数化,可以在测试环境和生成环境采用不同的chart参数。
- helm CD/CD流程图:
- helm 如何在多环境下(Test、Staging、Production)的业务配置?
- chart是支持参数替换的,可以把业务配置的相关参数设置为模板变量,使用helm install 命令部署的时候指定一个值,这样就可以把业务参数从chart中剥离了。
- 例如:helm install --values=values-production.yaml wordpress