全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
容器服务

利用 Helm 简化应用部署

更新时间:2017-09-27 22:57:17

在 Kubernetes 中,应用管理是需求最多、挑战最大的领域。Helm 项目提供了一个统一软件打包方式,支持版本控制,可以大大简化 Kubernetes 应用分发与部署中的复杂性。

本文档介绍 Helm 的基本概念和使用方式,演示在阿里云的 Kubenetes 集群上利用 Helm 来部署应用。

Helm 基本概念

Helm 是由 Deis 发起的一个开源工具,有助于简化部署和管理 Kubernetes 应用。

Helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现、共享和使用为 Kubernetes 构建的应用,它包含几个基本概念

  • Chart:一个 Helm 包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含 Kubernetes 集群中的服务定义,类似 Homebrew 中的 formula、APT 的 dpkg 或者 Yum 的 rpm 文件。
  • Release:在 Kubernetes 集群上运行的 Chart 的一个实例。在同一个集群上,一个 Chart 可以安装很多次。每次安装都会创建一个新的 release。例如一个 MySQL Chart,如果想在服务器上运行两个数据库,就可以把这个 Chart 安装两次。每次安装都会生成自己的 Release,会有自己的 Release 名称。
  • Repository:用于发布和存储 Chart 的仓库。

Helm 组件

Helm 采用客户端/服务器架构,有如下组件组成:

  • Helm CLI 是 Helm 客户端,可以在本地执行。
  • Tiller 是服务器端组件,在 Kubernetes 集群上运行,并管理 Kubernetes 应用程序的生命周期。
  • Repository 是 Chart 仓库,Helm 客户端通过 HTTP 协议来访问仓库中 Chart 的索引文件和压缩包。

前提条件

通过 Helm 部署 WordPress 之前,您需要完成以下操作:

  1. 利用阿里云容器服务来创建 Kubernetes 集群。

    参见部署 Kubernetes 集群

  2. 在本地计算机上安装和配置 kubectl。

    参见 通过 kubectl 连接 Kubernetes 集群

    若要查看 Kubernetes 目标群集的信息,键入以下命令:kubectl cluster-info

  3. 在本地计算机上安装 Helm。

    安装方法,参见 Install Helm

  4. 安装好 Helm 后,键入如下命令,在 Kubernetes 群集上安装 Tiller。

    helm init --upgrade

    在缺省配置下, Helm 会利用 gcr.io/kubernetes-helm/tiller 镜像在Kubernetes 集群上安装配置 Tiller;并且利用 https://kubernetes-charts.storage.googleapis.com 作为缺省的 stable repository 的地址。

    由于在国内可能无法访问 gcr.io, storage.googleapis.com 等域名,阿里云容器服务为此提供了镜像站点。

    请执行如下命令利用阿里云的镜像来配置 Helm。

    1. helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.5.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

    安装成功完成后,将看到如下输出:

    1. $ helm init --upgrade
    2. $HELM_HOME has been configured at /Users/test/.helm.
    3. Tiller (the helm server side component) has been installed into your Kubernetes Cluster.
    4. Happy Helming!

通过 Helm 部署 WordPress

下面我们将利用 Helm,来部署一个 WordPress 博客网站。

输入如下命令。

  1. helm install --name wordpress-test --set "persistence.enabled=false,mariadb.persistence.enabled=false" stable/wordpress

注意:目前阿里云 Kubernetes 服务中还没有开启块存储的 PersistentVolume 支持,所以在示例中禁止了数据持久化。

得到如下的结果。

  1. NAME: wordpress-test
  2. LAST DEPLOYED: Sat Aug 5 18:54:02 2017
  3. NAMESPACE: default
  4. STATUS: DEPLOYED
  5. ...

利用如下命令获得 WordPress 的访问地址。

  1. echo http://$(kubectl get svc wordpress-test-wordpress -o jsonpath='{.status.loadBalancer.ingress[0].ip}')

通过上面的 URL,可以在浏览器上看到熟悉的 WordPress 站点。

也可以根据 Charts 的说明,利用如下命令获得 WordPress 站点的管理员用户和密码。

  1. echo Username: user
  2. echo Password: $(kubectl get secret --namespace default wordpress-test-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)

Helm 基础操作

  • 若要查看在存储库中可用的所有 Helm charts,请键入以下命令:

    helm search

    将看到如下输出:

    1. $ helm search
    2. NAME VERSION DESCRIPTION
    3. stable/aws-cluster-autoscaler 0.2.1 Scales worker nodes within autoscaling groups.
    4. ...
  • 若要更新 charts 列表以获取最新版本,请键入:

    helm repo update

  • 若要查看在群集上安装的 Charts 列表,请键入:

    helm list

    或者缩写

    helm ls

  • 自 Kubernetes 1.6 版本开始,API Server 启用了 RBAC 授权。而目前的 Tiller 部署没有定义授权的 ServiceAccount,这会导致访问 API Server 时被拒绝。可以采用如下方法,明确为 Tiller 部署添加授权。

    1. kubectl create serviceaccount --namespace kube-system tiller
    2. kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
    3. kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

有关利用 Helm 使用的详细信息,请参阅 文档

参考信息

Helm 催生了社区的发展壮大,越来越多的软件提供商,如 Bitnami 等公司,开始提供高质量的 Charts。您可以在 https://kubeapps.com/ 中寻找和发现已有的 Charts。

本文导读目录