开始在 Kubernetes 中使用 Helm。

关于 Helm

Helm(意思:舵)是 Kubernetes(希腊语含义:舵手)的应用管理工具。Tiller(意思:舵柄)是 Helm 的服务器部分,通常运行在 K8s 集群内部。

基本概念

Chart

一个 chart 就是一个 Helm 包,包含应用所需要的各种资源、工具和服务,类似Homebrew 的 formula。

Repository

Repository(仓库)是存放 chart 的地方。

1
2
3
4
5
6
查看 Repository 列表
$ helm repo list
添加 Repository
$ helm repo add <repo_name> <repo_address>
更新各个 Repository 中的 chart 列表
$ helm repo update

Release

Release 是 K8s 集群内部运行的 chart 的一个实例,同一个 chart 可以创建多个独立的实例。

总结起来就是:Helm 往 Kubernetes 中安装 chart, 每一次安装都创建一个 release 实例。通过搜索 Helm chart 仓库可以找到你想要的 chart。

准备

  • 已经安装 Kubernetes,建议 1.4.1 版本或更新。
  • 本地有 kubectl 的配置文件,Helm 的服务端 Tiller 将安装在 kuberctl config 对应的集群中,可通过:

    1
    2
    $ kubectl config current-context
    minikube
  • 配置 Helm 命令行自动补全工具,在 .bashrc.zshrc 中添加:

    • $ source <(helm completion <shell_type>)shell_typebashzsh

安装 Helm

1. 通过二进制包安装:

  • 这里 下载需要的版本
  • 通过 tar -zxvf helm-v2.0.0-linux-amd64.tgz 解压缩文件
  • 将二进制文件移动到 /usr/local/bin/helm 文件夹: mv linux-amd64/helm /usr/local/bin/helm

2. MacOS 通过 homebrew 安装:

1
$ brew install helm

初始化 Helm 安装 Tiller

1
$ helm init
  • 如果想安装在指定的集群,使用 --kube-context
  • 升级 Tiller 可以直接运行:helm init --upgrade

查找 chart

搜索 chart,可使用正则,会匹配 chart 名和描述。

1
2
3
4
5
$ helm search <keyword>
-r, --regexp use regular expressions for searching
-v, --version string search using semantic versioning constraints
-l, --versions show the long listing, with each version of each chart on its own line
Options inherited from parent commands

查看某个具体 chart 的简介

1
2
3
$ helm inspect <chart_name>
$ helm inspect chart <chart_name>
$ helm inspect values <chart_name>

安装 chart

1
2
3
4
5
6
7
8
9
10
11
$ helm install stable/mysql
NAME: angry-kudu # 构建了一个叫 angry-kudu 的 release
LAST DEPLOYED: Thu Jul 20 14:50:53 2017
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
...

NOTES:
...

在安装 chart 之前,可以通过:

  • $ helm repo update 来更新仓库中的最新可用 charts 列表。
  • $ helm search xxx 来搜索想要安装的 chart 是否存在。

自定义 chart 配置

直接安装使用的是默认的配置,如果想自定义配置,可以根据 chart 提供的配置项,自定义配置文件,然后再创建 release。

1
2
3
$ helm inspect values <chart_name>
$ echo '{mariadbUser: user0, mariadbDatabase: user0db}' > config.yaml
$ helm install -f config.yaml stable/mariadb

查看 release 状态

1
2
3
4
5
6
7
8
9
10
$ helm status <release_name>
LAST DEPLOYED: Thu Jul 20 14:50:53 2017
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
...

NOTES:
...

查看 release 列表

1
2
3
4
5
6
7
查看 release
$ helm list
或简写为
$ helm ls

--all 可以查看所有 release(包括被删除的)
$ helm list --all

升级 release

1
2
3
4
$ helm upgrade <release_name> <chart_name>

$ helm upgrade -f update.yaml <release_name> <chart_name>
$ helm upgrade --set <key>=<value> <release_name> <chart_name>

回滚 release

使用 helm rollback 回滚到之前的版本,回滚之后也会创建一个 revision。

1
$ helm rollback <release_name> <revision_number>

查看 release 的各个 revision 版本

1
$ helm history <release_name>

删除 release

1
2
$ helm delete angry-kudu
release "dining-antelope" deleted

创建自己的 chart

1
2
3
4
5
6
7
8
9
10
11
12
创建 chart
$ helm create <chart_name>

检查 chart 是否符合规范
$ helm lint

打包 chart
$ helm package deis-workflow
deis-workflow-0.1.0.tgz

安装
$ helm install ./deis-workflow-0.1.0.tgz

获取帮助信息

1
$ helm <command_name> -h

参考资料

  1. Helm Documentation - Using Helm
  2. Helm Documentation - Helm Commands