本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
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 獲取最新更新