舵 图表:使在Kubernetes上打包和部署常见应用程序变得简单

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

有关如何配置这些应用程序的最佳实践,用户可以查看许多可用资源,例如: 示例文件夹 在Kubernetes存储库中 贡献库舵图库Bitnami图表存储库。尽管这些不同的位置提供了指导,但它并不总是形式化或一致的,因此用户可以在不同的应用程序中利用类似的安装过程。

那么,当找不到东西的地方太多时,您该怎么办?

xkcd标准

在这种情况下,我们不是在创建另一个应用程序场所,而是将现有的位置提升为规范位置。作为特殊兴趣小组应用程序的一部分(SIG应用)为 Kubernetes 1.4版本,我们开始为这些Kubernetes可部署应用程序提供一个家,该应用程序提供了有据可查且用户友好的软件包的连续发行版。这些软件包被创建为Helm 图表 并可以使用Helm工具安装。 允许用户轻松地为其Kubernetes清单创建模板并提供一组配置参数,以允许用户自定义其部署。

舵是包裹经理 (类似于yum和apt)和 图表包 (类似于deb和rpm)。这些图表的来源是 Kubernetes图表存储库 它为拉取请求提供了持续集成,并在master分支中自动发布了Charts。

图表驻留在两个主要文件夹中。的 稳定文件夹 托管那些满足最低要求的应用程序,例如正确的文档说明以及仅包含Beta或更高版本的Kubernetes资源。的 孵化器文件夹 提供了一个提交和迭代图表的地方,直到准备好将其升级到稳定状态为止为止,此时它们将被自动推送到默认存储库中。有关存储库结构和稳定要求的更多信息,请查看 自述文件中的本节.

现在可以使用以下应用程序:

稳定的仓库孵化库
Drupal领事
詹金斯弹性搜索
玛丽亚数据库
的MySQL格拉法纳
红矿MongoDB
WordPress的帕特罗尼
普罗米修斯
火花
动物园管理员

图表开发人员的示例工作流程

  1. 创建图表
  2. 开发人员通过 values.yaml 文件,允许用户自定义其部署。可以将其视为图表开发者和图表用户之间的API。
  3. A 自述文件 旨在帮助描述应用程序及其参数化值。
  4. 一旦应用程序正确安装并且值适当地自定义了部署,开发人员就会添加一个 NOTES.txt 用户安装后立即显示的文件。该文件通常为用户指出了连接或使用该应用程序的下一步。
  5. 如果应用程序需要持久存储,则开发人员将添加一种存储数据的机制,以使pod重启不会丢失数据。今天大多数需要此功能的图表都在使用 动态卷配置 从用户那里提取底层存储详细信息,从而允许单个配置针对Kubernetes安装进行工作。
  6. 提交一个 将请求拉到Kubernetes图表仓库。一旦经过测试和审查,PR将被合并。
  7. 合并到主分支后,该图表将打包并发布到Helm的默认存储库中,供用户安装。

图表用户的示例工作流程

  1. 1.安装头盔
  2. 2.初始化头盔
  3. 3.搜索图表
$ 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 詹金斯 舵 chart for Kubernetes. stable/mariadb 0.4.0 Chart for 玛丽亚数据库 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.安装图表
$ 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 詹金斯 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应用程序的开发人员和用户的质量标准。我们一直在寻求有关如何改进流程的反馈。此外,我们正在寻找新图表或现有图表的更新内容。在以下地方加入我们,参与其中:

--Vic Iglesias,Google云解决方案架构师