Helm Charts 一键安装云原生应用指南
技术
作者:邓洪超(阿里云)
译者:bot
2019-08-09 03:39

这是程序员小张普普通通的一个早晨,大家好像在讨论着什么:

“什么?听说隔壁公司在用 K8s 发布应用了?”

“据说在用 Helm !”

如果是往常,小张根本不关心这些无聊的讨论。他会稳稳地坐在办公桌前,打开公司内部自研的、魔改 GitLab 打造的项目管理系统,点击好几个 Button 之后,开始一天的辛勤劳作。

但不知道为何,这一次,小张的内心居然有点慌:Helm?啥是 Helm?!

Helm —— K8s 应用部署与打包工具

如果一个用户想要部署一个 K8s 应用,最快捷的方法是什么?

我们知道,Kubernetes(简称 K8s)是一个能够部署和管理容器的平台,然而,它还没有抽象到“应用”这一层概念:一个应用往往由多个 K8s 资源(Deployment、Service、ConfigMap 等)组成。为了部署应用,我们需要一个能在 K8s 之上部署和管理应用所包含的资源(K8s API Resource)的工具——这就是 Helm 所做的事情

除了资源,Helm 还定义了一套 Chart 格式来描述应用。怎么理解 Chart 呢?打个比方,如果把一个安卓程序打包成 APK 格式,它就可以被安装到任意一台运行安卓系统的手机上。如果我们把 K8s 比做安卓系统,把 K8s 应用比做安卓程序,那么 Chart 就可以比做 APK。

这也意味着,K8s 应用只要打包成 Chart ,就可以通过 Helm 部署到任意一个 K8s 集群上。

通常来说,我们可以直接使用别人已经做好的 Helm Chart ,就跟使用 Docker 镜像一样。也正因如此,Helm 社区已经维护了一个官方 Helm Hub,这个 Hub 里包含的应用非常丰富,是目前云原生开发者搜索和下载应用的主要站点。

AppHub —— Helm Hub 的中国小站

虽然 Helm Hub 听起来让人颇为心动,但遗憾的是,在国内使用 Helm Hub 对于绝大多数开发者来说是很痛苦的一件事情。

原因很简单,随便打开一个 Chart 文件,你就能看到文件里充斥着大量不可访问的镜像 URL :


或者是依赖根本访问不到的 Chart 库:

咱们软件工程师的时间这么宝贵(少),根本不想花时间在解决这些无聊的网络问题上(大雾)!

可是,看着国外的程序员们通过一条 helm install 命令就把应用部署起来,咱们怎么感觉还是有点酸呢……

所以在正式开始探索云原生应用管理之前,我们首先为你介绍一个叫做“开放云原生应用中心”(Cloud Native App Hub,简称 AppHub)的服务。

什么是“开放云原生应用中心”?

AppHub 是一个托管在国内公有云上、全公益性的 Helm Hub “中国站”。这个站点的一个重要职责,就是把所有 Helm Hub 官方托管的应用自动同步到国内,同时自动将 Charts 文件中的 gcr.io 等所有存在网络访问问题的 URL 替换成为稳定的国内镜像 URL 。

通过 AppHub,国内开发者终于也可以随心所欲地搜索 Charts,然后直接使用 helm install 命令将这些应用安装在全世界任何一个 Kubernetes 集群当中啦!

截至目前, Helm Hub 中国镜像站已经实时全量同步了 Helm Hub 北美 https://hub.helm.sh/ 的所有内容,还精选同步了多个热门第三方 Charts Repo(如 GitLab),总计上线 344 个 Charts,并且还在持续增加中。

接下来,我们就进入喜闻乐见的实践环节! 

实例:用最快的速度部署 Guestbook

首先,当然是安装 Helm 。这里强烈推荐你使用 Helm v3 版本。

Helm v3 跟 Helm v2 的区别就好比 Python 2 和 Python 3 ,Helm v3 比 Helm v2 好用多了(比如不需要安装服务端组件 Tiller)。为了方便国内开发者使用,我们已经自动同步了 Helm  v3 二进制文件的下载链接到国内(一定要试,真的是秒下,在公众号后台回复“Helm”即可获取打包好的文件): 

  • MacOS amd64 tar.gz
  • MacOS amd64 zip
  • Linux 386
  • Linux amd64
  • Linux arm64
  • Windows amd64

下载到 Helm 二进制文件,直接解压到 $PATH 下就可以使用了。

接下来,我们使用 Helm 快速部署一个 Guestbook 应用。这里假设你已经有一个阿里云 Kubernetes 服务在运行了(如果没有的话也没关系,下面还有自建 K8s 集群的例子)。

第一步是添加 AppHub 作为你的 Helm Hub Repo:


可以直接在命令行搜索 Guestbook:


然后,只需一行命令即可:

访问 Guestbook 服务

部署完成后,运行以下命令来查询并等待 Pods 启动完毕(Running):

查询服务地址:

通过 External IP 即可访问 Guestbook 服务:


使用 Minikube 或者自建 K8s 集群?

实际上,K8s 本身是不区分云上服务还是自建集群的。只不过如果没有云提供的负载均衡服务,Service 的访问方式会稍微麻烦一些,比如使用 NodePort :

这条命令执行完之后,应用会自动提示你接下来的访问方式。而通过 --set 这种方式设置应用参数到底是怎么回事,我们在后面会细聊。 

如果是 Minikube,还需要把这个 NodePort Service 从 Minikube 里映射出来才能访问:

试用“一键安装”

(体验功能)除了正常的部署方法, AppHub 上也可以通过网页 UI 来体验一键部署 Chart 到任何云的 K8s 上。举个例子,只需打开 Guestbook 应用详情页面,点击 “一键安装”:

然后在“安装参数”弹窗里填写相应的服务器 URL 和 base64 编码的证书数据后,点击“确认”,AppHub 就会尝试安装 guestbook chart 到对应 K8s 集群上,成功后会弹窗通知。

不过,这个功能目前只是“体验”,因为你现在还没办法在 AppHub 上直接修改应用的配置参数。在线进行“应用定制”的功能就在 AppHub 的 Roadmap 里,预计近几个月内会上线。

请注意!AppHub 6 个月内的 Roadmap 都已在 Github 上开源!是的,你可以通过 Github 随时对这个 Helm Hub 中国小站点提出你的改进思路,比如如何更好地做“应用定制”,如何对接和托管你自己的 Charts Repo 等等。

我们的口号是:每一位中国开发者,都是我们的 PM!(认真脸)

远不止 Helm !

可以看到,通过 Helm 快速部署 K8s 应用的技术门槛和心智负担都非常低。相比传统的应用构建、编排和发布流程,Helm + K8s 的自动化组合正在迅速成为云时代提升开发者效率的不二法宝。

上文中介绍到的所有同步自官方 Hub Repo 的应用 Charts,全都托管在这个 Github 上:cloudnativeapp/charts。如果大家对 AppHub 有任何吐槽,欢迎来这个 Repo 提 issue。也欢迎大家通过提交 pull requests,把你的 Charts 和 Repo 分享到 AppHub 上。

193 comCount 0