Helm簡介

什麼是Helm

微服務和容器化給複雜應用部署與管理帶來了極大的挑戰。Helm是目前Kubernetes服務編排領域的惟一開源子項目,做爲Kubernetes應用的一個包管理工具,可理解爲Kubernetes的apt-get / yum,由Deis 公司發起,該公司已經被微軟收購。Helm經過軟件打包的形式,支持發佈的版本管理和控制,很大程度上簡化了Kubernetes應用部署和管理的複雜性。node

隨着業務容器化與向微服務架構轉變,經過分解巨大的單體應用爲多個服務的方式,分解了單體應用的複雜性,使每一個微服務均可以獨立部署和擴展,實現了敏捷開發和快速迭代和部署。但任何事情都有兩面性,雖然微服務給咱們帶來了不少便利,但因爲應用被拆分紅多個組件,致使服務數量大幅增長,對於Kubernetest編排來講,每一個組件有本身的資源文件,而且能夠獨立的部署與伸縮,這給採用Kubernetes作應用編排帶來了諸多挑戰:git

  • 管理、編輯與更新大量的K8s配置文件
  • 部署一個含有大量配置文件的複雜K8s應用
  • 分享和複用K8s配置和應用
  • 參數化配置模板支持多個環境
  • 管理應用的發佈:回滾、diff和查看發佈歷史
  • 控制一個部署週期中的某一些環節
  • 發佈後的驗證

Helm把Kubernetes資源(好比deployments、services或 ingress等) 打包到一個chart中,而chart被保存到chart倉庫。經過chart倉庫可用來存儲和分享chart。Helm使發佈可配置,支持發佈應用配置的版本管理,簡化了Kubernetes部署應用的版本控制、打包、發佈、刪除、更新等操做。github

Helm解決的問題

利用Kubernetes部署一個應用,須要Kubernetes原生資源文件如deployment、replicationcontroller、service或pod 等。而對於一個複雜的應用,會有不少相似上面的資源描述文件,若是有更新或回滾應用的需求,可能要修改和維護所涉及的大量資源文件,且因爲缺乏對發佈過的應用版本管理和控制,使Kubernetes上的應用維護和更新等面臨諸多的挑戰,而Helm能夠幫咱們解決這些問題。數據庫

Helm原理

Helm架構

helm-arch

Helm功能

做爲Kubernetes的一個包管理工具,Helm具備以下功能:markdown

  • 建立新的chart
  • chart打包成tgz格式
  • 上傳chart到chart倉庫或從倉庫中下載chart
  • 在Kubernetes集羣中安裝或卸載chart
  • 管理用Helm安裝的chart的發佈週期

Helm三個重要概念

  • chart:包含了建立Kubernetes的一個應用實例的必要信息
  • config:包含了應用發佈配置信息
  • release:是一個chart及其配置的一個運行實例

Helm組件

Helm有兩部分組成:網絡

  • Helm Client
  • Tiller Server

簡單的說,client管理charts,而server管理髮布release。架構

Helm Client

Helm Client是用戶命令行工具,其主要負責以下:curl

  • 本地chart開發
  • 倉庫管理
  • 與Tiller sever交互
  • 發送預安裝的chart
  • 查詢release信息
  • 要求升級或卸載已存在的release

Tiller Server

Tiller Server是一個部署在Kubernetes集羣內部的server,其與Helm client、Kubernetes API server進行交互。Tiller server主要負責以下:微服務

  • 監聽來自Helm client的請求
  • 經過chart及其配置構建一次發佈
  • 安裝chart到Kubernetes集羣,並跟蹤隨後的發佈
  • 經過與Kubernetes交互升級或卸載chart

Helm實現

  • Helm client採用go語言編寫,採用gRPC協議與Tiller server交互。
  • Tiller server也一樣採用go語言編寫,提供了gRPC server與client進行交互,利用Kubernetes client 庫與Kubernetes進行通訊,當前庫使用了REST+JSON格式。
  • Tiller server 沒有本身的數據庫,目前使用Kubernetes的ConfigMaps存儲相關信息

 --------------------------------------------------------------工具

 

 

安裝helm 

1. 首先須要安裝helm客戶端
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
chmod 700 get_helm.sh
./get_helm.sh
網絡不行的話手動下載二進制包,把相關命令放到/usr/bin下面


2. 建立tiller的serviceaccount和clusterrolebinding
kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller


3. 而後安裝helm服務端tiller
helm init -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.11.0


4. 爲應用程序設置serviceAccount:
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

5. 檢查是否安裝成功:kubectl -n kube-system get pods|grep tillerhelm version ##若是報錯須要在node節點安裝socat. yum install socathelm ls

相關文章
相關標籤/搜索