1. 程式人生 > 實用技巧 >k8s叢集安裝helm包管理器

k8s叢集安裝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.8以上版本;
叢集可訪問到的映象倉庫;
k8s叢集可以正常工作,執行helm命令的主機可以訪問到kubernetes叢集。

1.下載指令碼

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

2.執行安裝

[root@master1 ~]# ./get_helm.sh                                                                                                                                                                                           
Downloading https://get.helm.sh/helm-v2.17.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.

[root@master1 ~]# 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://charts.helm.sh/stable 

3.建立tiller名稱空間 注意:Helm 的伺服器端部分 Tiller 通常執行在 Kubernetes 叢集內部。但是對於開發,它也可以在本地執行,並配置為與遠端 Kubernetes 群集通訊。
建立tiller的serviceaccount和clusterrolebinding

[root@master1 ~]# kubectl create serviceaccount --namespace kube-system tiller
serviceaccount/tiller created

[root@master1 ~]# kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
clusterrolebinding.rbac.authorization.k8s.io/tiller-cluster-rule created

4.快捷群集內安裝
安裝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 安裝

5.更新helm映象倉庫地址 (helm映象倉庫地址如果不能用根據自己的倉庫地址更換)

[root@master1 ~]# helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.17.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
Creating /root/.helm/repository/repositories.yaml 
Adding stable repo with URL: https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts 
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.

Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://v2.helm.sh/docs/securing_installation/

6.將Tiller安裝到Kubernetes叢集中

[root@master1 ~]# helm init --history-max 200          # --history-max 設定最大歷史記錄,大限制清除,如果沒有設定最大歷史記錄,則無限期地保留歷史記錄.
$HELM_HOME has been configured at /root/.helm.
Warning: Tiller is already installed in the cluster.
(Use --client-only to suppress this message, or --upgrade to upgrade Tiller to the current version.)

7.應用程式設定serviceAccount 注意:預設情況下,部署舵柄與一個不安全的“允許未經身份驗證的使用者”政策。

[root@master1 ~]# kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
deployment.apps/tiller-deploy patched

8.驗證並檢視版本 注意:helm init以後,可以執行kubectl get pods --namespace kube-system並看到Tiller正在執行。tiller預設被部署在k8s叢集中的kube-system這個namespace下。一旦安裝了除非設定--tiller-namespace或TILLER_NAMESPACE引數,否則Helm將在名稱空間kube-system中查詢 Tiller

[root@master1 ~]# kubectl get pod -n kube-system -l app=helm
NAME                            READY   STATUS    RESTARTS   AGE
tiller-deploy-c44c77cfb-kln4s   1/1     Running   0          21s

[root@master1 ~]# helm version
Client: &version.Version{SemVer:"v2.17.0", GitCommit:"a690bad98af45b015bd3da1a41f6218b1a451dbe", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.17.0", GitCommit:"a690bad98af45b015bd3da1a41f6218b1a451dbe", GitTreeState:"clean"}