一、Helm
Helm是k8s的包管理工具。简单举例来说,假如要部署一个MySQL,需要部署Service,Secret,PV,Deployment等多个对象,需要写在一个或多个yaml文件中。在现实的场景中,有非常多的应用需要部署,如果每次都是写这样一堆的yaml文件就会非常麻烦,同时也无法支持复用和配置化管理。
Helm主要有两个概念:chart和release。
- chart是一个信息集合,可用来创建一系列的k8s的资源,可类比于apt的软件安装包。一个chart中包含了一系列的yaml模板文件,以及描述文件和配置文件。
- release是chart的运行实例。当chart被安装到k8s集群,就会生成一个release实例。
Helm包含两个组件:Helm客户端和Tiller服务器。
- Helm客户端是一个命令行工具,用来与Tiller服务器交互,从而管理chart和release
- Tiller服务器安装在k8s集群内,用来接收Helm客户端的信息,安装chart,更新或卸载release
二、安装
安装完成后执行 helm init
即可安装tiller。
三、Chart
通过helm fetch stable/mysql
可以获取到mysql的chart包,然后解压,可以看到目录结构如下:
mysql
├── Chart.yaml
├── README.md
├── templates
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── configurationFiles-configmap.yaml
│ ├── deployment.yaml
│ ├── initializationFiles-configmap.yaml
│ ├── pvc.yaml
│ ├── secrets.yaml
│ ├── svc.yaml
│ └── tests
│ ├── test-configmap.yaml
│ └── test.yaml
└── values.yaml
其中Chart.yaml是对该chart的描述,该文件是必需的,内容如下:
yaml
appVersion: 5.7.14
description: Fast, reliable, scalable, and easy to use open-source relational database system.
engine: gotpl
home: https://www.mysql.com/
icon: https://www.mysql.com/common/logos/logo-mysql-170x115.png
keywords:
- mysql
- database
- sql
maintainers:
- email: o.with@sportradar.com
name: olemarkus
- email: viglesias@google.com
name: viglesiasce
name: mysql
sources:
- https://github.com/kubernetes/charts
- https://github.com/docker-library/mysql
version: 0.15.0
values.yaml是该chart的配置信息,包含了一些列的配置型和默认值。
templates目录是k8s资源的模板文件,通常来说包含Deployment,Service等模板。
Helm会将values.yaml中的配置注入到templates目录下的模板文件中,生成标准的yaml配置。
Helm使用的是Golang的模板语言。