1、Helm介紹
在Kubernetes中部署容器雲的應用也是一項有挑戰性的工作,Helm就是爲了簡化在Kubernetes中安裝部署容器雲應用的一個客戶端工具。通過helm能夠幫助開發者定義、安裝和升級Kubernetes中的容器雲應用,同時,也可以通過helm進行容器雲應用的分享。在Kubeapps Hub中提供了包括Redis、MySQL和Jenkins等參見的應用,通過helm可以使用一條命令就能夠將其部署安裝在自己的Kubernetes集羣中。
helm的整體架構如下圖所示,Helm架構由Helm客戶端、Tiller服務器端和Chart倉庫所組成;Tiller部署在Kubernetes中,Helm客戶端從Chart倉庫中獲取Chart安裝包,並將其安裝部署到Kubernetes集羣中。
Helm是管理Kubernetes包的工具,Helm能提供下面的能力:
- 創建新的charts
- 將charts打包成tgz文件
- 與chart倉庫交互
- 安裝和卸載Kubernetes的應用
- 管理使用Helm安裝的charts的生命週期
在Helm中,有三個需要了解的重要概念:
- chart:是創建Kubernetes應用實例的信息集合;
- config:創建發佈對象的chart的配置信息
- release:chart的運行實例,包含特定的config
1.1 Helm組件
在Helm中有兩個主要的組件,既Helm客戶端和Tiller服務器:
Helm客戶端:這是一個供終端用戶使用的命令行工具,客戶端負責如下的工作:
- 本地chart開發
- 管理倉庫
- 與Tiller服務器交互
-
- 發送需要被安裝的charts
- 請求關於發佈版本的信息
- 請求更新或者卸載已安裝的發佈版本
Tiller服務器: Tiller服務部署在Kubernetes集羣中,Helm客戶端通過與Tiller服務器進行交互,並最終與Kubernetes API服務器進行交互。 Tiller服務器負責如下的工作:
- 監聽來自於Helm客戶端的請求
- 組合chart和配置來構建一個發佈
- 在Kubernetes中安裝,並跟蹤後續的發佈
- 通過與Kubernetes交互,更新或者chart
客戶端負責管理chart,服務器發展管理髮布。
1.2 Helm技術實現
Helm客戶端是使用Go語言編寫的,它通過gRPC協議與Tiller服務器交互。
Tiller服務器也是使用Go語言編寫的,它使用Kubernetes客戶端類庫(當前是哦那個REST+JSON)與Kubernetes進行通訊。
Tiller服務器通過Kubernetes的ConfigMap存儲信息,因此本身沒有用於存儲數據庫。
2、Helm安裝部署
2.1 安裝Helm客戶端
在進行Helm客戶端安裝前,請確認已有可用的Kubernetes集羣環境,並已安裝了kubectl。
通過訪問:https://github.com/kubernetes/helm/releases,下載Helm的合適的版本。
1)此文下載helm-v2.8.0-linux-amd64.tgz版本;
2)解壓縮文件:tar -zxvf helm-v2.8.0-linux-amd64.tgz
3)將解壓縮後的helm移至/usr/local/bin目錄下:mv linux-amd64/helm /usr/local/bin/helm
注意:
- 本文使用的操作系統爲Centos 7.3;
- 最好在安裝kubectl命令行工具的機器上安裝Helm客戶端;或者將安裝kubectl命令行工具生成的配置文件($HOME/.kube/config)複製到Helm客戶端所安裝的機器上($HOME/.kube/config)。
2.2 安裝Tiller服務器
2.2.1 使用默認配置文件安裝
通過在Helm客戶端中執行如下的命令來安裝Tiller服務器:
$ helm init
注意:
- helm init命令通過$HOME/.kube/config配置文件確定在哪個Kubernetes集羣中按照Tiller服務器。
- 此命令會將Tiller服務器安裝Kubernetes的kube-system命名空間中。
2.2.2 使用Service Account安裝
1)創建一個名爲tiller的Service Account
$ kubectl create serviceaccount tiller --namespace kube-system
2)授予名爲tiller的Service Account集羣管理員角色cluster-admin:
將tiller綁定至集羣管理員角色的的yaml文件如下所示:
apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: tiller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system
通過執行kubectl create -f將授予tiller集羣管理員角色:
$ kubectl create -f rbac-config.yaml
3)安裝Tiller服務器
$ helm init --service-account tiller
2.3 驗證安裝
在安裝完成後,可以通過執行如下命令來檢查是安裝成功:
$ helm version
如果正確顯示Helm客戶端和Tiller服務器的版本,這表示安裝成功。
或者通過執行kubectl的如下命令來查看是否已正常按照Tiller服務器:
$ kubectl get pods -n kube-system
3、使用Helm
Helm所使用的包格式爲chart,chart是描述Kubernetes資源的文件集合。通過chart能夠部署類似於memcache等簡單的應用,或者能夠部署類似於Http服務器、數據庫等複雜的應用。此文主要就chart目錄、chart.yaml文件和values.yaml文件進行介紹。
3.1 Chart目錄結構
在使用Helm之前,先以wordpress爲例來看一下一個Chart都包含哪些內容:
wordpress/ Chart.yaml # 必需::包含關於chart信息的YAML文件 LICENSE # 可選: chart的license描述文件 README.md # 可選:可讀的說明文件 requirements.yaml # 可選:列示chart依賴的YAML文件 values.yaml # 必需:chart默認的配置值文件 charts/ # 可選:包含chart所有依賴的目錄 templates/ # 可選:包含模板文件的目錄 templates/NOTES.txt # 可選:部署後的使用說明
3.2 chart.yaml文件介紹
對於chart來說,chart.yaml文件是必需的文件,此文件的內容如下:
name: 必需,chart的名稱 version: 必需,SemVer 2的版本 description: 可選,此項目的一句話描述 keywords: – 可選,此項目的關鍵詞列表 home: 可選,此項目主頁面的URL sources: – 可選,此項目的源代碼URL列表 maintainers: # 可選 – name: 維護者的名字
email: 維護者的email地址 url: 維護者的URL engine: gotpl # 可選,模板引擎的名稱 icon: 可選,被使用的SVG或者PNG格式圖標的URL appVersion: 可選,應用的版本 deprecated: 可選,標識吃chart是否將要被廢棄 tillerVersion: chart所要求的Tiller服務器的版本
3.3 values.yaml文件介紹
chart的配置文件values.yaml所包含的內容如下例子所示:
imageRegistry: "quay.io/deis" dockerTag: "latest" pullPolicy: "Always" storage: "s3"
在chart中可以包含一個默認的values.yaml文件,Helm安裝命令也允許通過–values參數指定應該YAML文件:
$ helm install --values=myvals.yaml wordpress
通過給定–values參數的方式,helm會將此參數給定的YAML文件的內容與默認values.yaml文件的內容進行合併,例如在myvals.yaml文件的內容是:
storage: "gcs"
合併後的文件內容將如下所示:
imageRegistry: "quay.io/deis" dockerTag: "latest" pullPolicy: "Always" storage: "gcs"
注意:默認的值文件必需被命名爲values.yaml。在Kubernetes中,對於如何使用helm安裝部署容器化應用,請參考《基於Helm安裝部署高可用的Redis》。
4 Chart應用倉庫
Kubeapps Hub(https://hub.kubeapps.com)作爲公共的chart應用倉庫,目前在上面已經以chart的格式提供Nginx、Jenkins、Redis等常用應用。在此倉庫中可以發現符合自己需要的Kubernetes應用,或者發佈自己以chart格式構建的Kubernetes應用。
參考資料
- 《The package manager for Kubernetes》,作者:Microsoft,地址:https://docs.helm.sh/
- 《private Ethereum network Helm chart for Kubernetes》,作者:jpoon,地址:https://hub.kubeapps.com/charts/stable/ethereum
- 《簡化Kubernetes應用部署工具-Helm簡介》,作者:frognew,地址:https://www.kubernetes.org.cn/3435.html