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

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

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

为了获得关于如何配置这些应用程序的最佳实践,用户可以参考许多可用的资源,例如:Kubernetes 仓库中的示例文件夹、Kubernetes contrib 仓库Helm Charts 仓库以及Bitnami Charts 仓库。尽管这些不同的位置提供了指导,但并非总是正式或一致的,用户无法在不同的应用程序中利用类似的安装程序。

那么,当有太多地方可以找到东西时,你该怎么办呢?

xkcd 标准

在这种情况下,我们不是在创建又一个应用程序存放地,而是将现有的一个推广为规范位置。作为特殊兴趣小组 Apps (SIG Apps) 为Kubernetes 1.4 发布所做工作的一部分,我们开始为这些可部署的 Kubernetes 应用程序提供一个家,它提供持续发布的、文档齐全且用户友好的软件包。这些软件包被创建为 Helm Charts,可以使用 Helm 工具安装。Helm允许用户轻松地将 Kubernetes 清单模板化,并提供一组配置参数,允许用户自定义其部署。

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

Charts 主要位于两个文件夹中。stable 文件夹 存放那些满足最低要求的应用程序,例如,适当的文档以及仅包含 Beta 或更高版本的 Kubernetes 资源。incubator 文件夹 为 charts 的提交和迭代提供了一个场所,直到它们准备好晋升到 stable,届时它们将自动推送到默认仓库。有关仓库结构以及进入 stable 的要求的更多信息,请查看README 中的此部分

以下应用程序现在可用

稳定仓库孵化仓库
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 重启不会丢失数据。如今,大多数需要此功能的 charts 都使用动态卷配置来抽象用户底层的存储细节,从而允许单个配置在 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 更新的贡献。请加入以下位置参与进来