本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。
Helm Charts:简化在 Kubernetes 上打包和部署常见应用程序
有成千上万的人和公司正在将其应用程序打包,以便部署在 Kubernetes 上。这通常涉及制作一些不同的 Kubernetes 资源定义,这些定义配置应用程序运行时,以及定义用户和其他应用程序用于与应用程序通信的机制。有些非常常见的应用程序,用户经常需要部署指南,例如数据库、CI 工具和内容管理系统。这些类型的应用程序通常不是由最终用户开发和迭代的,而是它们的配置被定制以适应特定的用例。一旦应用程序部署完毕,用户就可以将其链接到其现有系统,或利用其功能来解决其痛点。
关于如何配置这些应用程序的最佳实践,用户可以查阅许多可用资源,例如:Kubernetes 仓库中的示例文件夹、Kubernetes contrib 仓库、Helm Charts 仓库和Bitnami Charts 仓库。虽然这些不同的位置提供了指导,但它并不总是形式化或一致的,以至于用户可以在不同的应用程序中利用类似的安装过程。
那么,当查找内容的地方太多时,您该怎么办?
在这种情况下,我们不是在为应用程序创建一个新的地方,而是将一个现有地方提升为规范位置。作为应用程序特别兴趣小组(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 中的此部分。
以下应用程序现已可用
稳定仓库 | 孵化中仓库 |
---|---|
Drupal | Consul |
Jenkins | Elasticsearch |
MariaDB | etcd |
MySQL | Grafana |
Redmine | MongoDB |
Wordpress | Patroni |
Prometheus | |
Spark | |
ZooKeeper |
Chart 开发者的工作流程示例
- 创建 Chart
- 开发者通过 values.yaml 文件提供参数,允许用户自定义其部署。这可以看作是 Chart 开发者和 Chart 用户之间的 API。
- 编写一份 README 文件,以帮助描述应用程序及其参数化值。
- 一旦应用程序正确安装且值适当自定义了部署,开发者会添加一个 NOTES.txt 文件,该文件会在用户安装后立即显示。此文件通常会指出用户连接或使用应用程序的后续步骤。
- 如果应用程序需要持久存储,开发者会添加一种机制来存储数据,以确保 Pod 重启后数据不会丢失。目前大多数需要此功能的 Chart 都使用动态卷配置,以向用户抽象底层存储细节,从而允许单个配置在 Kubernetes 安装中工作。
- 向 Kubernetes Charts 仓库提交拉取请求。经过测试和审查后,拉取请求将被合并。
- 一旦合并到主分支,Chart 将被打包并发布到 Helm 的默认仓库,供用户安装。
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 ...
- 4.安装 Chart
$ helm install stable/jenkins
- 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 中的密码和用户名:admin 登录
有关在 Kubernetes 上运行 Jenkins 的更多信息,请访问此处。
结论
现在您已经看到了开发者和用户的工作流程,我们希望您能加入我们,将应用程序部署知识的广度整合到一个更集中的地方。我们可以共同提高 Kubernetes 应用程序开发者和用户的质量标准。我们一直在寻求关于如何改进流程的反馈。此外,我们正在寻求新的 Charts 或对现有 Charts 的更新的贡献。请通过以下方式加入我们,参与其中:
SIG Apps - Slack 频道
SIG Apps - 每周会议
提交 Kubernetes Charts 问题 衷心感谢 Bitnami、Deis、Google 和其他贡献者的帮助,使 Charts 仓库达到了今天的成就。我们还有很多工作要做,但作为一个社区共同推动这项工作令人非常愉快。
下载 Kubernetes
在 GitHub 上参与 Kubernetes 项目
在 Stack Overflow 上提问(或回答问题)
在 Slack 上与社区联系
在 Twitter 上关注我们 @Kubernetesio 获取最新更新