本文发布已超过一年。较旧的文章可能包含过时内容。请检查页面中的信息自发布以来是否已失效。

Helm Charts:简化在 Kubernetes 上打包和部署常见应用

成千上万的人和公司正在将其应用打包以便在 Kubernetes 上部署。这通常涉及精心制作一些不同的 Kubernetes 资源定义,用于配置应用运行时,以及定义用户和其他应用用来与应用通信的机制。有一些非常常见的应用,用户经常寻求部署指导,例如数据库、CI 工具和内容管理系统。这些类型的应用通常不是由终端用户开发和迭代的,而是通过定制配置来适应特定的用例。一旦部署了这些应用,用户可以将其链接到现有系统或利用其功能解决痛点。

关于如何配置这些应用的最佳实践,用户可以查阅许多可用资源,例如:Kubernetes 仓库中的 examples 文件夹、Kubernetes contrib 仓库Helm Charts 仓库 以及 Bitnami Charts 仓库。虽然这些不同的位置提供了指导,但它们并不总是规范化或一致的,导致用户无法在不同应用之间利用相似的安装过程。

那么,当查找资料的地方太多时,该怎么办呢?

xkcd 标准

在这种情况下,我们并不是要创建又一个存放应用的地方,而是将一个现有位置提升为规范(canonical)位置。作为特别兴趣小组 Apps (SIG Apps) 为 Kubernetes 1.4 发布 所做工作的一部分,我们开始为这些可在 Kubernetes 上部署的应用提供一个归宿,该归宿提供了持续发布的、文档完善且用户友好的软件包。这些软件包被创建为 Helm Charts,并且可以使用 Helm 工具安装。Helm 允许用户轻松地将他们的 Kubernetes manifest 模板化,并提供一组配置参数,使用户可以自定义部署。

Helm 是包管理器(类似于 yum 和 apt),Charts 是软件包(类似于 debs 和 rpms)。这些 Charts 的归宿是 Kubernetes Charts 仓库,它为 pull request 提供持续集成,并自动化发布 master 分支中的 Charts。

Chart 位于两个主要文件夹中。stable 文件夹托管满足最低要求的应用,例如文档齐全且只包含 Beta 或更高版本的 Kubernetes 资源。incubator 文件夹提供了一个提交 Chart 并进行迭代的地方,直到它们可以升级到 stable,届时它们将自动推送到默认仓库。有关仓库结构和进入 stable 阶段要求的更多信息,请参阅 README 中的这一部分

以下应用现已可用

Stable 仓库Incubating 仓库
DrupalConsul
JenkinsElasticsearch
MariaDBetcd
MySQLGrafana
RedmineMongoDB
WordpressPatroni
Prometheus
Spark
ZooKeeper

Chart 开发者的示例工作流程

  1. 创建 Chart
  2. 开发者通过 values.yaml 文件提供参数,允许用户自定义部署。这可以被视为 Chart 开发者和 Chart 用户之间的 API。
  3. 编写一个 README 来描述应用及其参数化值。
  4. 一旦应用正确安装并且值适当地自定义了部署,开发者会添加一个 NOTES.txt 文件,该文件在用户安装后立即显示。此文件通常指出用户连接或使用应用的下一步操作。
  5. 如果应用需要持久存储,开发者会添加一个机制来存储数据,以便 Pod 重启时不会丢失数据。目前大多数需要此功能的 Chart 使用 动态卷供给 来抽象底层存储细节,使得单一配置可以在各种 Kubernetes 安装上工作。
  6. Kubernetes Charts 仓库提交 Pull Request。测试和审查通过后,PR 将被合并。
  7. 合并到 master 分支后,Chart 将被打包并发布到 Helm 的默认仓库,供用户安装。

Chart 用户的示例工作流程

  1. 1.安装 Helm
  2. 2.初始化 Helm
  3. 3.搜索 Chart
$ helm search  
NAME VERSION DESCRIPTION stable/drupal 0.3.1 One of the most versatile open source content m...stable/jenkins 0.1.0 A Jenkins Helm chart for Kubernetes. stable/mariadb 0.4.0 Chart for MariaDB stable/mysql 0.1.0 Chart for MySQL stable/redmine 0.3.1 A flexible project management web application. stable/wordpress 0.3.0 Web publishing platform for building blogs and ...
  1. 4.安装 Chart
$ helm install stable/jenkins
  1. 5.安装后
Notes:



1. Get your 'admin' user password by running:

  printf $(printf '\%o' `kubectl get secret --namespace default brawny-frog-jenkins -o jsonpath="{.data.jenkins-admin-password[*]}"`);echo



2. Get the Jenkins URL to visit by running these commands in the same shell:

\*\*\*\* NOTE: It may take a few minutes for the LoadBalancer IP to be available.                      \*\*\*\*

\*\*\*\*       You can watch the status of by running 'kubectl get svc -w brawny-frog-jenkins' \*\*\*\*

  export SERVICE\_IP=$(kubectl get svc --namespace default brawny-frog-jenkins -o jsonpath='{.status.loadBalancer.ingress[0].ip}')

  echo http://$SERVICE\_IP:8080/login
  1. 使用步骤 1 中的密码和用户名 admin 登录

有关在 Kubernetes 上运行 Jenkins 的更多信息,请访问此处

结论

现在您已经了解了开发者和用户的工作流程,希望您能加入我们,将广泛的应用部署知识整合到更集中的地方。我们可以一起提高 Kubernetes 应用开发者和用户的质量标准。我们一直在寻求关于如何改进流程的反馈。此外,我们也在寻找新的 Chart 贡献或现有 Chart 的更新。请通过以下方式加入我们并参与其中