1. 程式人生 > >在 KubeCon 大會上備受關注的 K8S Helm 到底是什麼?

在 KubeCon 大會上備受關注的 K8S Helm 到底是什麼?

0?wxfrom=5&wx_lazy=1

?wx_fmt=jpeg

作者王青,JFrog 中國首席架構師,之前在 IBM,HPE,愛奇藝,新浪,VIPKID 等公司做過研發和架構,是有十多年開發經驗的網際網路老兵,專注於軟體生命週期管理,微服務架構,雲原生應用,容器化等領域。

什麼是 Helm Charts?

Helm Charts是 Kubernetes 專案中的一個子專案(https://github.com/kubernetes/helm)目的是提供 Kubernetes 的包管理平臺。Helm 能夠幫你管理 Kubernetes 的應用集合。Helm Charts 能夠幫你定義,安裝,升級最複雜的 Kubernetes 應用集合。

Helm Charts 很容易建立,做版本化,共享和釋出,最新版本的 Helm 由 CNCF 進行維護,目前在業界已經有大量的公司在使用 Helm,其中包括谷歌,微軟,Bitnami 等大型企業。

Helm 由兩部分組成:

  • Helm 客戶端。它用來建立,拉取,搜尋和驗證 Charts,初始化 Tiller 服務。

  • Tiller server。跑在 Kubernetes 叢集之內,管理這些應用的釋出。

為什麼需要 Helm Charts?

很多Kubernetes 的使用者在部署一些通用元件時,例如資料庫,CI 工具,快取元件,負載均衡等等,通常會需求一些業界統一的最佳實踐進行應用的配置。

目前市面上有很多倉庫提供這樣的最佳實踐,例如:Kubernetes 的contrib repository,Helm Charts Repository (https://github.com/kubernetes/charts),Bitnami Charts Repository. 面對如此眾多的來源,使用者更希望有一個統一的入口去管理所有 Helm Charts倉庫,於是就有了 Helm 私有倉庫的誕生。它的好處在於:

1、管理複雜的應用集合

Charts 能夠描述最複雜的應用,提供可重複,冪等性的安裝,以及提供統一的認證中心服務。

2、容易升級

為團隊提供實時的映象升級,以及自定義 webhook,解決映象升級的痛點。

3、企業內部共享

Charts能夠很容易的進行版本化,共享,在企業內部提供私有Heml 倉庫服務,解決了從官方源拉映象速度奇慢的痛點。

4、回滾

使用 Helm 可以方便的進行應用的回滾,回到之前的 Release 版本。

目前在Kubernetes Charts repository有兩個主要的目錄Stable 和Incubator,Stable 裡有近百種應用,例如:Artifactory, Jenkins,Mysql,MariaDB,Consul,Gitlab, Grafana,Nginx 等等。Incubator 裡也有cassandra,Kafka,zk 等等知名軟體,並且 Stable 倉庫會持續的更新,提供更為便捷的應用配置管理。

如何使用 Helm Charts?

1、Mac 下可以執行brew install kubernetes-helm。

2、定義一個 Chart

?wx_fmt=png

3、執行 Helm install

?wx_fmt=png

helm install . 會使用./templates 目錄下的Kubernetes manifests 去建立一個部署(deployment)和服務(service):

?wx_fmt=png

4、刪除一個 Release(Helm delete RELEASE_NAME)

?wx_fmt=png

5、回滾一個 Release

使用 helm rollback RELEASE_NAME REVISION_NUMBER 可以恢復一個被刪除的 Release。

?wx_fmt=png

6、使用模版管理Release

如果管理 Release?每次釋出 Release,你不可能手動的去修改 yaml 檔案去釋出,Helm Chart提供了 模版的方式去實現。Helm Charts 的模版由 Go模版語言實現,並提供了數十種公共模版供使用者使用。模版的值是從 value.yaml檔案讀取,例如:

?wx_fmt=png

一個模版檔案寫出來會是下面的樣子,deployment.yaml:

?wx_fmt=png

其中模版中的變數是從 value.yaml 檔案中讀取。你也可以使用helm install —set image.tag=’latest’命令去覆蓋 value.yaml 檔案中的值。

企業內部部署Helm Charts 的私服

隨著 5.8 版本的釋出,JFrog Artifactory不僅提供了高可用的 Docker 映象中心,而且現在原生支援 Kubernetes Helm Chart 倉庫, 為企業帶來 Kubernetes 部署流程完全的可控制性。

Artifactory 提供了企業內部的高可用 Docker 註冊中心叢集,當研發團隊達到100人以上之後,Docker 原生的映象中心,或者 Harbor 會變成單點瓶頸。Artifactory 能夠提供高併發 Docker Pull 的拉取,谷歌雲平臺每週併發拉取20億次映象,就是通過 Artifactory 實現的。

Artifactory 5.8版本之後,能夠讓你在公司內部擁有一個 Helm Charts 的本地私服。也就是說你的資料中心不會再依賴於網路下載外網的 Helm 倉庫,例如公有的 Helm 倉庫(https://kubernetes-charts.storage.googleapis.com/)。

Artifactory 的虛擬 Hem Chart 倉庫能夠聚合公司本地和遠端的倉庫成為一個倉庫,為開發者解析和安裝 Charts 時提供唯一的 URL。如下圖所示:

?wx_fmt=jpeg

Artifactory也支援提供全語言的二進位制包的管理, 能夠整合公司內部所有 CI/CD 工具,實現端到端的二進位制包管理,從而解決複雜的跨語言包交付的問題,例如 Docker,NPM,Java包的統一管理。

下面是詳細的 Kubernetes Helm 倉庫的支援文件:https://www.jfrog.com/confluence/display/RTF/Helm+Chart+Repositories

  • 安全,私有的 Helm Charts 倉庫,為公司所有的專案和開發團隊提供指紋級別的認證能力。

  • 為 Artifactory 本地倉庫 Host 的 Helm Charts 進行元資料的計算。

  • 通過Artifactory 的遠端倉庫實現對 Helm 公有源的統一訪問,並且將下載的檔案快取在本地,下次開發再拉取同樣的內容不會去訪問外網。

  • 提供企業級功能的支援:例如高可用,倉庫全球多地複製,水平擴容和一鍵容災備份。

參考文章:
https://jfrog.com/blog/enterprise-grade-helm-chart-repository-jfrog-artifactory
https://medium.com/@gajus/the-missing-ci-cd-kubernetes-component-helm-package-manager-1fe002aac680

歡迎關注 JFrog 傑蛙中國,獲取更多國外最新DevOps 乾貨!

?wx_fmt=jpeg