Helm介紹

1.爲何要用Helm?

首先在原來項目中都是基於yaml文件來進行部署發佈的,而目前項目大部分微服務化或者模塊化,會分紅不少個組件來部署,每一個組件可能對應一個deployment.yaml,一個service.yaml,一個Ingress.yaml還可能存在各類依賴關係,這樣一個項目若是有5個組件,極可能就有15個不一樣的yaml文件,這些yaml分散存放,若是某天進行項目恢復的話,很難知道部署順序,依賴關係等,而全部這些包括html

  • 基於yaml配置的集中存放
  • 基於項目的打包
  • 組件間的依賴

均可以經過helm來進行解決。mysql

2.Helm 基本概念

Helm 能夠理解爲 Kubernetes 的包管理工具,能夠方便地發現、共享和使用爲Kubernetes構建的應用,它包含幾個基本概念linux

  • Chart:一個 Helm 包,其中包含了運行一個應用所須要的鏡像、依賴和資源定義等。chart 是建立一個應用的信息集合,包括各類 Kubernetes 對象的配置模板、參數定義、依賴關係、文檔說明等。chart 是應用部署的自包含邏輯單元。能夠將 chart 想象成 apt、yum 中的軟件安裝包。
  • Release: 在 Kubernetes 集羣上運行的 Chart 的一個實例。在同一個集羣上,一個 Chart 能夠安裝不少次。每次安裝都會建立一個新的 release。例如一個 MySQL Chart,若是想在服務器上運行兩個數據庫,就能夠把這個 Chart 安裝兩次。每次安裝都會生成本身的 Release,會有本身的 Release 名稱。
  • Repository:用於發佈和存儲 Chart 的倉庫。

Helm 是包管理工具,這裏的包就是指的 chart。Helm 可以:git

  1. 從零建立新 chart。github

  2. 與存儲 chart 的倉庫交互,拉取、保存和更新 chart。web

  3. 在 Kubernetes 集羣中安裝和卸載 release。sql

  4. 更新、回滾和測試 release。數據庫

3.Helm 組件及架構

Helm 採用客戶端/服務器架構,有以下組件組成:vim

  • Helm CLI 是 Helm 客戶端,能夠在本地執行
  • Tiller 是服務器端組件,在 Kubernetes 羣集上運行,並管理 Kubernetes 應用程序的生命週期
  • Repository 是 Chart 倉庫,Helm客戶端經過HTTP協議來訪問倉庫中Chart的索引文件和壓縮包。

Helm 客戶端是終端用戶使用的命令行工具,用戶能夠:api

  1. 在本地開發 chart。

  2. 管理 chart 倉庫。

  3. 與 Tiller 服務器交互。

  4. 在遠程 Kubernetes 集羣上安裝 chart。

  5. 查看 release 信息。

  6. 升級或卸載已有的 release。

Tiller 服務器運行在 Kubernetes 集羣中它會處理 Helm 客戶端的請求,與 Kubernetes API Server 交互。Tiller 服務器負責:

  1. 監聽來自 Helm 客戶端的請求。

  2. 經過 chart 構建 release。

  3. 在 Kubernetes 中安裝 chart,並跟蹤 release 的狀態。

  4. 經過 API Server 升級或卸載已有的 release。

簡單的講:Helm 客戶端負責管理 chart;Tiller 服務器負責管理 release

4.Helm客戶端的安裝

一般,咱們將 Helm 客戶端安裝在可以執行 kubectl 命令的節點上,只須要下面一條命令進行安裝

# curl https://raw.githubusercontent.com/helm/helm/master/scripts/get | bash

  % Total % Received % Xferd Average Speed Time Time Time Current
  Dload Upload Total Spent Left Speed
  100 7236 100 7236 0 0 10536 0 --:--:-- --:--:-- --:--:-- 10532
  Downloading https://kubernetes-helm.storage.googleapis.com/helm-v2.11.0-linux-amd64.tar.gz
  Preparing to install helm and tiller into /usr/local/bin
  helm installed into /usr/local/bin/helm
  tiller installed into /usr/local/bin/tiller
  Run 'helm init' to configure helm.

 

執行 helm version 驗證。

helm 有不少子命令和參數,爲了提升使用命令行的效率,一般建議安裝 helm 的 bash 命令補全腳本,方法以下:

echo "source <(helm completion bash)" >>.bashrc

從新登陸後就能夠經過 Tab 鍵補全 helm 子命令和參數了。

 5.Tiller服務器安裝

對於已開啓RBAC訪問控制的集羣,首先須要新建賬戶和綁定

參考:https://github.com/helm/helm/blob/master/docs/rbac.md

vim tiller-rbac-config.yaml

apiVersion: v1 kind: ServiceAccount metadata: name: tiller
namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 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 apply -f tiller-rbac-config.yaml

# helm init --service-account tiller  -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.11.0  #鏡像地址更換

# helm version

Client: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b146b", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.11.0", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b146b", GitTreeState:"clean"}

查看生成的賬戶和POD

# kubectl get sa -n kube-system |grep tiller

# kubectl get pods -n kube-system |grep tiller

6.Helm的使用 

Helm 安裝成功後,可執行 helm search 查看當前可安裝的 chart。

Helm 安裝時已經默認配置好了兩個倉庫:stable 和 local。stable 是官方倉庫,local 是用戶存放本身開發的 chart 的本地倉庫。

# helm repo list
NAME    URL                                             
stable  https://kubernetes-charts.storage.googleapis.com
local   http://127.0.0.1:8879/charts

用戶能夠經過 helm repo add 添加更多的倉庫,好比企業的私有倉庫,倉庫的管理和維護方法請參考官網文檔 https://docs.helm.sh

# helm repo update 更新倉庫中可使用的鏡像倉庫

安裝 chart 也很簡單,執行以下命令便可安裝 MySQL。

# helm install --name mysql stable/mysql  #可以使用--name自定義名稱

helm list 顯示已經部署的 release,helm delete 能夠刪除 release

輸出分爲三部分:

① chart 本次部署的描述信息:

NAME 是 release 的名字,由於咱們沒用 -n 參數指定,Helm 隨機生成了一個,這裏是 fun-zorse。

NAMESPACE 是 release 部署的 namespace,默認是 default,也能夠經過 --namespace 指定。

STATUS 爲 DEPLOYED,表示已經將 chart 部署到集羣。

② 當前 release 包含的資源:Service、Deployment、Secret 和 PersistentVolumeClaim,其名字都是 fun-zorse-mysql,命名的格式爲 ReleasName-ChartName。

③ NOTES 部分顯示的是 release 的使用方法。好比如何訪問 Service,如何獲取數據庫密碼,以及如何鏈接數據庫等

7.Chart目錄結構

Chart 由一系列文件組成,這些文件描述了 Kubernetes 部署應用時所須要的資源,好比 Service、Deployment、PersistentVolumeClaim、Secret、ConfigMap 等。

單個的 chart 能夠很是簡單,只用於部署一個服務,好比 Memcached;chart 也能夠很複雜,部署整個應用,好比包含 HTTP Servers、 Database、消息中間件、cache 等。

chart 將這些文件放置在預約義的目錄結構中,一般整個 chart 被打成 tar 包,並且標註上版本信息,便於 Helm 部署。

已安裝過的release的tar包默認存放在 ~/.helm/cache/archive 目錄下,解壓後通常大體相同,主要包含:

# helm create hello #這裏的手動新建初始化一個release

# tree hello

hello
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── ingress.yaml
│   ├── NOTES.txt
│   └── service.yaml
└── values.yaml

2 directories, 7 files

Chart.yaml : YAML 文件,描述 chart 的概要信息。name 和 version 是必填項,其餘都是可選。

values.yaml : Chart 支持在安裝的時根據參數進行定製化配置,而 values.yaml 則提供了這些配置參數的默認值。 

templates 目錄 :
各種 Kubernetes 資源的配置模板都放置在這裏。Helm 會將 values.yaml 中的參數值注入到模板中生成標準的 YAML 配置文件。

模板是 chart 最重要的部分,也是 Helm 最強大的地方。模板增長了應用部署的靈活性,可以適用不一樣的環境。

templates/NOTES.txt : Chart 的簡易使用文檔,chart 安裝成功後會顯示此文檔內容。

 8.Helm之建立自定義Chart

官方介紹文檔:https://docs.helm.sh/developing_charts/#charts

 # helm serve

在本地啓動一個倉庫,端口:8879,http://127.0.0.1:8879/charts ,固然使用其它的web服務器進行取代也是能夠的

# helm status myapp

對應的NOTE.txt信息

# helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com 

添加倉庫

# helm fetch incubator/elasticsearch

拉取chart,下載taz包

相關文章
相關標籤/搜索