首先在原來項目中都是基於yaml文件來進行部署發佈的,而目前項目大部分微服務化或者模塊化,會分紅不少個組件來部署,每一個組件可能對應一個deployment.yaml,一個service.yaml,一個Ingress.yaml還可能存在各類依賴關係,這樣一個項目若是有5個組件,極可能就有15個不一樣的yaml文件,這些yaml分散存放,若是某天進行項目恢復的話,很難知道部署順序,依賴關係等,而全部這些包括html
均可以經過helm來進行解決。mysql
Helm 能夠理解爲 Kubernetes 的包管理工具,能夠方便地發現、共享和使用爲Kubernetes構建的應用,它包含幾個基本概念linux
Helm 是包管理工具,這裏的包就是指的 chart。Helm 可以:git
從零建立新 chart。github
與存儲 chart 的倉庫交互,拉取、保存和更新 chart。web
在 Kubernetes 集羣中安裝和卸載 release。sql
更新、回滾和測試 release。數據庫
Helm 採用客戶端/服務器架構,有以下組件組成:vim
Helm 客戶端是終端用戶使用的命令行工具,用戶能夠:api
在本地開發 chart。
管理 chart 倉庫。
與 Tiller 服務器交互。
在遠程 Kubernetes 集羣上安裝 chart。
查看 release 信息。
升級或卸載已有的 release。
Tiller 服務器運行在 Kubernetes 集羣中,它會處理 Helm 客戶端的請求,與 Kubernetes API Server 交互。Tiller 服務器負責:
監聽來自 Helm 客戶端的請求。
經過 chart 構建 release。
在 Kubernetes 中安裝 chart,並跟蹤 release 的狀態。
經過 API Server 升級或卸載已有的 release。
簡單的講:Helm 客戶端負責管理 chart;Tiller 服務器負責管理 release。
一般,咱們將 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 子命令和參數了。
對於已開啓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
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,如何獲取數據庫密碼,以及如何鏈接數據庫等
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 安裝成功後會顯示此文檔內容。
官方介紹文檔: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包