本文发布已超过一年。较旧的文章可能包含过时内容。请检查页面中的信息自发布以来是否已失效。
Helm Charts:简化在 Kubernetes 上打包和部署常见应用
成千上万的人和公司正在将其应用打包以便在 Kubernetes 上部署。这通常涉及精心制作一些不同的 Kubernetes 资源定义,用于配置应用运行时,以及定义用户和其他应用用来与应用通信的机制。有一些非常常见的应用,用户经常寻求部署指导,例如数据库、CI 工具和内容管理系统。这些类型的应用通常不是由终端用户开发和迭代的,而是通过定制配置来适应特定的用例。一旦部署了这些应用,用户可以将其链接到现有系统或利用其功能解决痛点。
关于如何配置这些应用的最佳实践,用户可以查阅许多可用资源,例如:Kubernetes 仓库中的 examples 文件夹、Kubernetes contrib 仓库、Helm Charts 仓库 以及 Bitnami Charts 仓库。虽然这些不同的位置提供了指导,但它们并不总是规范化或一致的,导致用户无法在不同应用之间利用相似的安装过程。
那么,当查找资料的地方太多时,该怎么办呢?
在这种情况下,我们并不是要创建又一个存放应用的地方,而是将一个现有位置提升为规范(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 仓库 |
---|---|
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 仓库提交 Pull Request。测试和审查通过后,PR 将被合并。
- 合并到 master 分支后,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 应用开发者和用户的质量标准。我们一直在寻求关于如何改进流程的反馈。此外,我们也在寻找新的 Chart 贡献或现有 Chart 的更新。请通过以下方式加入我们并参与其中
SIG Apps - Slack 频道
SIG Apps - 每周会议
提交 Kubernetes Charts Issue 非常感谢 Bitnami、Deis、Google 和 其他贡献者,他们帮助 Charts 仓库发展到今天的样子。我们还有很多工作要做,但社区齐心协力推动这项工作向前发展,这非常棒。
下载 Kubernetes
在 GitHub 上参与 Kubernetes 项目
在 Stack Overflow 上提问(或回答问题)
在 Slack 上与社区联系
在 Twitter 上关注我们 @Kubernetesio 获取最新动态