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

Helm Charts:簡化在 Kubernetes 上封裝和部署常見應用程式的流程

有成千上萬的人和公司正在封裝他們的應用程式,以便部署在 Kubernetes 上。這通常涉及撰寫一些不同的 Kubernetes 資源定義,以配置應用程式執行階段,以及定義使用者和其他應用程式用來與應用程式溝通的機制。使用者經常尋求關於部署一些非常常見的應用程式的指南,例如資料庫、CI 工具和內容管理系統。這些類型的應用程式通常不是由終端使用者開發和迭代的,而是它們的配置經過客製化以符合特定的使用案例。一旦部署了這些應用程式,使用者就可以將其連結到現有的系統,或利用它們的功能來解決他們的痛點。

為了獲得關於如何配置這些應用程式的最佳實務,使用者可以參考許多可用的資源,例如:Kubernetes 儲存庫中的 examples 資料夾、Kubernetes contrib 儲存庫Helm Charts 儲存庫Bitnami Charts 儲存庫。雖然這些不同的位置提供了指南,但它們並不總是正式或一致,以至於使用者可以在不同的應用程式之間利用類似的安裝程序。

那麼,當有太多地方可以找到東西時,你該怎麼辦呢?

xkcd 標準

在這種情況下,我們不是在建立「又一個應用程式存放處」,而是在推廣一個現有的存放處作為標準位置。作為特殊興趣小組 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。

Charts 主要存放在兩個資料夾中。stable 資料夾 託管那些符合最低要求的應用程式,例如適當的文件和僅包含 Beta 或更高版本的 Kubernetes 資源。incubator 資料夾 提供了一個地方,讓 charts 可以被提交和迭代,直到它們準備好晉升到 stable,屆時它們將自動被推送到預設儲存庫。有關儲存庫結構和 stable 要求的更多資訊,請查看 README 中的這個章節

以下應用程式現在可用

Stable 儲存庫Incubating 儲存庫
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 重新啟動不會遺失資料。今天大多數需要這樣做的 charts 都在使用 動態磁碟區佈建,從使用者那裡抽象出底層儲存細節,這允許單一配置適用於 Kubernetes 安裝。
  6. 提交一個 Pull Request 到 Kubernetes Charts 儲存庫。一旦經過測試和審查,PR 將被合併。
  7. 一旦合併到 master 分支,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 更新的貢獻。加入以下地方與我們互動