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

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

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

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

那么,当查找内容的地方太多时,您该怎么办?

xkcd 标准

在这种情况下,我们不是在为应用程序创建一个新的地方,而是将一个现有地方提升为规范位置。作为应用程序特别兴趣小组(SIG Apps)为 Kubernetes 1.4 版本所做工作的一部分,我们开始为这些可部署在 Kubernetes 上的应用程序提供一个家,该家提供持续发布的文档完善且用户友好的软件包。这些软件包正以 Helm Charts 的形式创建,并可以使用 Helm 工具进行安装。Helm 允许用户轻松地将 Kubernetes 清单模板化,并提供一组配置参数,允许用户自定义其部署。

Helm 是包管理器(类似于 yum 和 apt),Charts 是软件包(类似于 debs 和 rpms)。这些 Charts 的家是Kubernetes Charts 仓库,它为拉取请求提供持续集成,以及主分支中 Charts 的自动化发布。

Charts 主要位于两个文件夹中。稳定文件夹托管那些符合最低要求(例如适当的文档和仅包含 Beta 或更高版本的 Kubernetes 资源)的应用程序。孵化器文件夹提供了一个 Charts 提交和迭代的地方,直到它们准备好升级到稳定版,届时它们将自动推送到默认仓库。有关仓库结构和进入稳定版的要求的更多信息,请参阅 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 重启后数据不会丢失。目前大多数需要此功能的 Chart 都使用动态卷配置,以向用户抽象底层存储细节,从而允许单个配置在 Kubernetes 安装中工作。
  6. Kubernetes Charts 仓库提交拉取请求。经过测试和审查后,拉取请求将被合并。
  7. 一旦合并到主分支,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 应用程序开发者和用户的质量标准。我们一直在寻求关于如何改进流程的反馈。此外,我们正在寻求新的 Charts 或对现有 Charts 的更新的贡献。请通过以下方式加入我们,参与其中: