Skip to content

k8s学习笔记(8)——Helm

一、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

二、安装

参考Installing Helm

安装完成后执行 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的模板语言。