Helm安裝部署詳解

簡介

Helm是一個kubernetes應用的包管理工具,用來管理預先配置好的安裝包資源。
Helm chart是用來封裝kubernetes原生應用程序的yaml文件,可以在你部署應用的時候自定義應用程序的一些metadata,便與應用程序的分發。

名詞解釋

Helm:

是一個命令行下的客戶端工具。主要用於 Kubernetes 應用程序 Chart 的創建、打包、發佈以及創建和管理本地和遠程的 Chart 倉庫。

Tiller:

是 Helm 的服務端,部署在 Kubernetes 集羣中。Tiller 用於接收 Helm 的請求,並根據 Chart 生成 Kubernetes 的部署文件( Helm 稱爲 Release ),然後提交給 Kubernetes 創建應用。Tiller 還提供了 Release 的升級、刪除、回滾等一系列功能。

Chart:

Helm 的軟件包,採用 TAR 格式。類似於 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一組定義 Kubernetes 資源相關的 YAML 文件。

Repoistory:

Helm 的軟件倉庫,Repository 本質上是一個 Web 服務器,該服務器保存了一系列的 Chart 軟件包以供用戶下載,並且提供了一個該 Repository 的 Chart 包的清單文件以供查詢。Helm 可以同時管理多個不同的 Repository。

Release:

使用 helm install 命令在 Kubernetes 集羣中部署的 Chart 稱爲 Release。

--注:需要注意的是:Helm 中提到的 Release 和我們通常概念中的版本有所不同,這裏的 Release 可以理解爲 Helm 使用 Chart 包部署的一個應用實例. 

Chart Install 過程

Helm 從指定的目錄或者 TAR 文件中解析出 Chart 結構信息。
Helm 將指定的 Chart 結構和 Values 信息通過 gRPC 傳遞給 Tiller。
Tiller 根據 Chart 和 Values 生成一個 Release。
Tiller 將 Release 發送給 Kubernetes 用於生成 Release。

Chart Update 過程

Helm 從指定的目錄或者 TAR 文件中解析出 Chart 結構信息。
Helm 將需要更新的 Release 的名稱、Chart 結構和 Values 信息傳遞給 Tiller。
Tiller 生成 Release 並更新指定名稱的 Release 的 History。
Tiller 將 Release 發送給 Kubernetes 用於更新 Release。

Chart Rollback 過程

Helm 將要回滾的 Release 的名稱傳遞給 Tiller。
Tiller 根據 Release 的名稱查找 History。
Tiller 從 History 中獲取上一個 Release。
Tiller 將上一個 Release 發送給 Kubernetes 用於替換當前 Release。

Chart 處理依賴說明

Tiller 在處理 Chart 時,直接將 Chart 以及其依賴的所有 Charts 合併爲一個 Release,同時傳遞給 Kubernetes。因此 Tiller 並不負責管理依賴之間的啓動順序。Chart 中的應用需要能夠自行處理依賴關係。

Helm和charts的主要作用:

應用程序封裝
版本管理
依賴檢查
便於應用程序分發

安裝Helm

前提要求:

Kubernetes1.5以上版本;
集羣可訪問到的鏡像倉庫;
k8s 集羣可以正常工作,執行helm命令的主機可以訪問到kubernetes集羣。

腳本安裝

Helm 現在有一個安裝 shell 腳本,將自動獲取最新版本的 Helm 客戶端並在本地安裝。
可以獲取該腳本,然後在本地執行它。這種方法有文檔指導,以便可以在運行之前仔細閱讀並理解它在做什麼。

安裝方法

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.sh
chmod 700 get_helm.sh
./get_helm.sh
or
curl https://raw.githubusercontent.com/helm/master/scripts/get | bash

執行安裝

[root@kubm-01 ~]# ./get_helm.sh
Downloading https://get.helm.sh/helm-v2.14.3-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.
[root@kubm-01 ~]# 
[root@kubm-01 ~]# 
[root@kubm-01 ~]# helm init
Creating /root/.helm 
Creating /root/.helm/repository 
Creating /root/.helm/repository/cache 
Creating /root/.helm/repository/local 
Creating /root/.helm/plugins 
Creating /root/.helm/starters 
Creating /root/.helm/cache/archive 
Creating /root/.helm/repository/repositories.yaml 
Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com 
Adding local repo with URL: http://127.0.0.1:8879/charts 
$HELM_HOME has been configured at /root/.helm.

Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.

安裝

Helm 的服務器端部分 Tiller 通常運行在 Kubernetes 集羣內部。但是對於開發,它也可以在本地運行,並配置爲與遠程 Kubernetes 羣集通信。

創建tiller的serviceaccount和clusterrolebinding

kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

應用程序設置serviceAccount:

kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

快捷羣集內安裝

安裝 tiller 到羣集中最簡單的方法就是運行 helm init。這將驗證 helm 本地環境設置是否正確(並在必要時進行設置)。然後它會連接到 kubectl 默認連接的任何集羣(kubectl config view)。一旦連接,它將安裝 tiller 到 kube-system 命名空間中。

你可以通過參數運行 helm init:

--canary-image 參數安裝金絲雀版本
--tiller-image 安裝特定的鏡像(版本)
--kube-context 使用安裝到特定羣集
--tiller-namespace 用一個特定的命名空間 (namespace) 安裝
--service-account 使用 Service Account 安裝 RBAC enabled clusters)
--automount-service-account false 不適用 service account 安裝

一旦安裝了 Tiller,運行 helm version 會顯示客戶端和服務器版本。(如果它僅顯示客戶端版本, helm 則無法連接到服務器, 使用 kubectl 查看是否有任何 tiller Pod 正在運行。)

除非設置 --tiller-namespace 或 TILLER_NAMESPACE 參數,否則 Helm 將在命名空間 kube-system 中查找 Tiller

更新helm鏡像倉庫地址:

若無法訪問 gcr.io,可以使用阿里雲鏡像,使用-i指定自己的鏡像,因爲官方的鏡像因爲某些原因無法拉取,官方鏡像地址是:gcr.io/kubernetes-helm/tiller:v2.x.xx,使用helm version可查看helm客戶端版本。

helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.12.2 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

驗證安裝

helm init 以後,可以運行 kubectl get pods --namespace kube-system 並看到 Tiller 正在運行。
tiller默認被部署在k8s集羣中的kube-system這個namespace下。

[root@kubm-01 ~]# kubectl get pod -n kube-system -l app=helm

NAME                             READY   STATUS    RESTARTS   AGE
tiller-deploy-8557598fbc-4ljt2   1/1     Running   0          10d

查看版本

[root@kubm-01 ~]# helm version
Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}

刪除或重新安裝 Tiller

由於 Tiller 將其數據存儲在 Kubernetes ConfigMaps 中,因此可以安全地刪除並重新安裝 Tiller,而無需擔心丟失任何數據。推薦刪除 Tiller 的方法是使用 kubectl delete deployment tiller-deploy --namespace kube-system 或更簡潔使用 helm reset。

然後可以從客戶端重新安裝 Tiller:

$ helm init

參考文檔:

https://helm.sh/docs/
https://jimmysong.io/kubernetes-handbook/practice/helm.html
http://www.voidcn.com/article/p-hhtdortf-bxq.html
https://www.jianshu.com/p/ab26b5762cf5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章