Helm - Kubernetes包管理專家


What is Helm?

- The package manager for kubernetes, Helm is the best way to find, share, and use software built for kubernetes.

Helm helps you manage Kubernetes applications — Helm Charts helps you define, install, and upgrade even the most complex Kubernetes application.

Charts are easy to create, version, share, and publish — so start using Helm and stop the copy-and-paste madness.

The latest version of Helm is maintained by the CNCF - in collaboration with Microsoft, Google, Bitnami and the Helm contributor community.

 

Why use Helm? 

kubernetes發布一個生產級別的微服務應用需要包含的內容;當環境中的微服務越來越多,單純通過手工的方式去管理將會非常混亂和負載。這時候Helm就應該登場了。

Helm Architecture

 

上面這張圖描述了Helm的幾個關鍵組件Helm(客戶端),Tiller(服務器),Repository(Chart軟件倉庫),Release(Chart運行的實例),Chart(軟件包)之前的關系。

 

 

重要概念

Helm 有三個重要概念:

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

Helm組件

Helm 有以下兩個組成部分:

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

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

Tiller Server是一個部署在Kubernetes集群內部的 server,其與 Helm client、Kubernetes API server 進行交互。

Tiller server 主要負責如下:

  • 監聽來自 Helm client 的請求
  • 通過 chart 及其配置構建一次發布
  • 安裝 chart 到Kubernetes集群,並跟蹤隨后的發布
  • 通過與Kubernetes交互升級或卸載 chart
  • 簡單的說,client 管理 charts,而 server 管理發布 release

 

Helm部署方法(1)

在其中一個K8S節點上安裝Helm Client(需要配置代理,否則無法下載安裝包) 

$ curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  6737  100  6737    0     0   3204      0  0:00:02  0:00:02 --:--:--  3205
Downloading https://kubernetes-helm.storage.googleapis.com/helm-v2.9.0-linux-amd64.tar.gz
Preparing to install into /usr/local/bin
helm installed into /usr/local/bin/helm
Run 'helm init' to configure helm.

Tiller 服務器安裝非常簡單,只需要執行 helm init(需要配置docker代理,否則Tiller Image無法從gcr.io下載)

$ 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.

Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!

驗證

$ helm version
Client: &version.Version{SemVer:"v2.9.0", GitCommit:"f6025bb9ee7daf9fee0026541c90a6f557a3e0bc", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.9.0", GitCommit:"f6025bb9ee7daf9fee0026541c90a6f557a3e0bc", GitTreeState:"clean"}

配置RBAC

我的kubernetes 集群是1.10版本的,默認開啟了RBAC訪問控制,所以我們需要為Tiller創建一個ServiceAccount,讓他擁有執行的權限,詳細內容可以查看 Helm 文檔中的Role-based Access Control。  

kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

問題

部署完成后,發現無法install任何chart,查看tiller容器的的logs發現以下錯誤日志,google查詢到是2.9的bug,降級到2.8.2即可。

 

 

Helm部署方法(2)

安裝Helm Client,

  直接在Helm Realese頁面下載二進制文件,這里下載的2.8.2版本,解壓后將可執行文件helm拷貝到/usr/local/bin目錄下即可,這樣Helm客戶端就在這台機器上安裝完成了。

$ helm version
Client: &version.Version{SemVer:"v2.8.2", GitCommit:"a80231648a1473929271764b920a8e346f6de844", GitTreeState:"clean"}

安裝Helm Server,

  執行命令

$ helm init

  由於 Helm 默認會去gcr.io拉取鏡像,所以如果你當前執行的機器沒有配置科學上網的話可以實現下面的命令代替:

$ helm init --upgrade --tiller-image cnych/tiller:v2.8.2

創建Tiller ServiceAccount

kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

查看結果

$ helm version
Client: &version.Version{SemVer:"v2.8.2", GitCommit:"a80231648a1473929271764b920a8e346f6de844", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.8.2", GitCommit:"a80231648a1473929271764b920a8e346f6de844", GitTreeState:"clean"}

$ helm list

 

 

參考文檔:

https://helm.sh/ 

https://blog.qikqiak.com/post/first-use-helm-on-kubernetes/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM