Helm快速入门

本章介绍如何快速开始使用 Helm,里面的很多细节会在其他的文章中介绍,本章是一个概述,我们先学习一下把。

Helm是舵的意思,表示掌控k8s的舵。helm是用来在k8s上安装程序的软件安装程序。

举例来说,从头到尾安装mysql会很复杂,而使用helm却很简单。

helm现在有V3这个版本了,但是使用较为复杂,资料少,所以,我们这里还是使用helm2来给大家介绍。掌握了V2,就基本等于掌握了V3。


前提条件

Helm的使用需要有以下前提条件:

  1. 一个 Kubernetes 集群,版本无所谓,希望你会安装k8s。
  2. 确定使用哪种安全配置,无所谓了,不懂也没关系。
  3. 安装和配置 Helm 和 服务端 Tiller。Tiller是什么,后面再说。

安装 Kubernetes 或有权访问群集

  • 必须已安装 Kubernetes。我们推荐最新的 Kubernetes 稳定版本,注意一定是稳定版本,如果你已经有kubernetes了,那么就用你现在的版本也行的。我们使用的是v1.15.3版本。

怎么安装k8s,需要你自己解决。本教程重点在于介绍helm的使用方法。

注意: 1.6 之前的 Kubernetes 版本对于基于角色的访问控制(RBAC),要么有限制,或者不支持。哈哈,也许你看不懂这句话,那么就略过吧,这句话看不看得懂无所谓。

Helm 将通过 Kubernetes 配置文件(通常是 $HOME/.kube/config)来确定在哪里安装 Tiller 。这个配置文件也是 kubectl 使用的文件。

要找出 Tiller 将安装到哪个集群,可以运行 kubectl config current-contextkubectl cluster-info

$ kubectl config current-context
my-cluster

了解集群配置的安全上下文

与所有强大的工具一样,需要确保为你的场景正确安装它。

如果你在完全控制的群集上使用 Helm,如 minikube 或专用网络中的不考虑共享的群集,则默认安装(不采用安全配置)很合适,并且是最容易的。要在无需额外安全措施的场景下安装 Helm,请参考 [安装 Helm](# 安装 Helm),然后 [初始化 Helm](# 初始化 Helm 并安装 Tiller)。

但是,如果集群暴露于更大的网络中,或者集群与他人共享 - 生产集群属于此类别 - 则必须采取额外步骤来确保安装安全,以防止不小心或恶意的操作者损坏集群或其集群数据。在生产环境和其他多租户方案中,要使用安全配置安装 Helm,请参阅 Helm 安全安装

如果群集启用了基于角色的访问控制(RBAC),在继续之前配置 服务帐户 (service account) 和规则


安装Helm

下载 Helm 客户端的二进制版本,解压就可以安装helm了。

有关更多详细信息或其他选项,请参阅 安装指南


初始化 Helm

helm3初始化比helm2简单,只需要执行:

helm init

执行结构:

$HELM_HOME has been configured at /root/.helm.
Warning: Tiller is already installed in the cluster.
(Use --client-only to suppress this message, or --upgrade to upgrade Tiller to the current version.)
Happy Helming!

这里代码已经安装了Tiller,也就是helm的服务器端。


初始化Helm并安装Tiller

有了 Helm 安装文件,就可以初始化本地 CLI,并将 Tiller 安装到 Kubernetes 集群中:

$ helm init --history-max 200

TIP: 推荐带 --history-max 200 参数, 因为 configmaps 和其他对象的历史记录会增长到很大的数量。没有这个参数的话,历史记录为永久保留,这样 Helm 和 Tiller 需要维护大量的历史数据.

这会将 Tiller 安装到对应的 Kubernetes 群集中, 集群同 kubectl config current-context

提示: 想要安装到不同的群集中?使用 --kube-context 参数。

提示: 如果要升级 Tiller,请运行 helm init --upgrade。

$ helm init --upgrade
$HELM_HOME has been configured at /root/.helm.
Error: error when upgrading: current Tiller version is newer, use --force-upgrade to downgrade

上面说明如果是最新版本,升级会失败。

默认情况下,安装 Tiller 时,没有启用身份验证。要了解有关为 Tiller 配置增强 TLS 身份验证的更多信息,请参阅 Tiller TLS 指南


安装示例 Chart

要安装一个 chart,可以运行 helm install 命令。Helm 有几种方法来查找和安装 chart,但最简单的方法是使用其中一个官方 stable 稳定版本的 chart。

$ helm repo update               #确保我们获得最新的 chart 清单
$ helm install stable/mysql
Released smile-penguin
NAME:   wintering-rodent
LAST DEPLOYED: Thu Oct 18 14:21:18 2018
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/Secret
NAME                    AGE
wintering-rodent-mysql  0s

==> v1/ConfigMap
wintering-rodent-mysql-test  0s

==> v1/PersistentVolumeClaim
wintering-rodent-mysql  0s

==> v1/Service
wintering-rodent-mysql  0s

==> v1beta1/Deployment
wintering-rodent-mysql  0s

==> v1/Pod(related)

NAME                                    READY  STATUS   RESTARTS  AGE
wintering-rodent-mysql-6986fd6fb-988x7  0/1    Pending  0         0s


NOTES:
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
wintering-rodent-mysql.default.svc.cluster.local

To get your root password run:

    MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default wintering-rodent-mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo)

To connect to your database:

1. Run an Ubuntu pod that you can use as a client:

    kubectl run -i --tty ubuntu --image=ubuntu:16.04 --restart=Never -- bash -il

2. Install the mysql client:

    $ apt-get update && apt-get install mysql-client -y

3. Connect using the mysql cli, then provide your password:
    $ mysql -h wintering-rodent-mysql -p

To connect to your database directly from outside the K8s cluster:
    MYSQL_HOST=127.0.0.1
    MYSQL_PORT=3306

    # Execute the following command to route the connection:
    kubectl port-forward svc/wintering-rodent-mysql 3306

    mysql -h ${MYSQL_HOST} -P${MYSQL_PORT} -u root -p${MYSQL_ROOT_PASSWORD}


在上面的例子中,stable/mysql 已经安装,安装版本的 release 的名字是 wintering-rodent。通过运行 helm inspect stable/mysql 可以简单了解这个 MySQL chart 的功能。

无论何时安装 chart,都会创建一个新 release 版本。所以一个 chart 可以多次安装到同一个群集中。而且每个都可以独立管理和升级。

helm install 命令功能非常丰富,具有很多强大功能。要了解更多信息,请查看 使用 Helm 指南


了解安装的 release

很容易通过如下命令查看已使用 Helm 安装的 release:

$ helm ls
+NAME            	REVISION	UPDATED                 	STATUS  	CHART       	APP VERSION	NAMESPACE
+wintering-rodent	1       	Thu Oct 18 15:06:58 2018	DEPLOYED	mysql-0.10.1	5.7.14     	default

卸载安装的 release

要卸载安装的 release,请使用以下 helm delete 命令:

$ helm delete wintering-rodent
release "wintering-rodent" deleted

wintering-rodent release 将从 Kubernetes 卸载,但仍然可以查询有关该 release 的信息:

$ helm status wintering-rodent
LAST DEPLOYED: Thu Oct 18 14:21:18 2018
NAMESPACE: default
STATUS: DELETED

NOTES:
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
wintering-rodent-mysql.default.svc.cluster.local

To get your root password run:

    MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default wintering-rodent-mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo)

To connect to your database:

1. Run an Ubuntu pod that you can use as a client:

    kubectl run -i --tty ubuntu --image=ubuntu:16.04 --restart=Never -- bash -il

2. Install the mysql client:

    $ apt-get update && apt-get install mysql-client -y

3. Connect using the mysql cli, then provide your password:
    $ mysql -h wintering-rodent-mysql -p

To connect to your database directly from outside the K8s cluster:
    MYSQL_HOST=127.0.0.1
    MYSQL_PORT=3306

    # Execute the following command to route the connection:
    kubectl port-forward svc/wintering-rodent-mysql 3306

    mysql -h ${MYSQL_HOST} -P${MYSQL_PORT} -u root -p${MYSQL_ROOT_PASSWORD}

由于 Helm 在删除它们之后也会跟踪该 release,因此可以审核群集的历史记录,甚至可以取消删除动作(使用 helm rollback)。


阅读帮助文本

要了解有关 Helm 命令的更多信息,请使用 helm help 或键入一个后跟 -h 标志的命令:

$ helm get -h