本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

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 的更新的貢獻。請透過以下方式加入我們,參與其中: