1. 程式人生 > >容器雲應用的安裝部署工具Helm_Kubernetes中文社群

容器雲應用的安裝部署工具Helm_Kubernetes中文社群

1Helm介紹

在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。

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應用。

參考資料

  1. 《The package manager for Kubernetes》,作者:Microsoft,地址:https://docs.helm.sh/
  2. 《簡化Kubernetes應用部署工具-Helm簡介》,作者:frognew,地址:https://www.kubernetes.org.cn/3435.html

作者簡介:
季向遠,北京神舟航天軟體技術有限公司產品經理。本文版權歸原作者所有。