Helm安装
一.Helm的概述
Helm這個東西其實早有耳聞,但是一直沒有用在生產環境,而且現在對這貨的評價也是褒貶不一。正好最近需要再次部署一套測試環境,對于單體服務,部署一套測試環境我相信還是非常快的,但是對于微服務架構的應用,要部署一套新的環境,就有點折磨人了,微服務越多、你就會越絕望的。雖然我們線上和測試環境已經都遷移到了kubernetes環境,但是每個微服務也得維護一套yaml文件,而且每個環境下的配置文件也不太一樣,部署一套新的環境成本是真的很高。如果我們能使用類似于yum的工具來安裝我們的應用的話是不是就很爽歪歪了啊?Helm就相當于kubernetes環境下的yum包管理工具。
用途
做為 Kubernetes 的一個包管理工具,Helm具有如下功能:
- 創建新的 chart
- chart 打包成 tgz 格式
- 上傳 chart 到 chart 倉庫或從倉庫中下載 chart
- 在Kubernetes集群中安裝或卸載 chart
- 管理用Helm安裝的 chart 的發布周期
重要概念
Helm 有三個重要概念:
- chart:包含了創建Kubernetes的一個應用實例的必要信息
- config:包含了應用發布配置信息
- release:是一個 chart 及其配置的一個運行實例
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.下載包并解壓
我們可以在Releases · helm/helm · GitHub頁面下載二進制文件,這里下載的v2.10.0版本,解壓后將可執行文件helm拷貝到/usr/local/bin目錄下即可,這樣Helm客戶端就在這臺機器上安裝完成了。
~]# tar -xf helm-v2.1.0-linux-amd64.tar.gz~]# mv /root/linux-amd64/helm /usr/local/bin/helm2現在我們可以使用Helm命令查看版本了,會提示無法連接到服務端Tiller:
~]# helm2 version Client: &version.Version{SemVer:"v2.1.0", GitCommit:"b7b648456ba15d3d190bb84b36a4bc9c41067cf3", GitTreeState:"clean"} Error: cannot connect to Tiller2.Tiller的安裝
? ?Tiller有多種安裝方式,比如本地安裝或以pod形式部署到Kubernetes集群中。本文以pod安裝為例,安裝Tiller的最簡單方式是helm init, 該命令會檢查helm本地環境設置是否正確,helm init會連接kubectl默認連接的kubernetes集群(可以通過kubectl config view查看),一旦連接集群成功,tiller會被安裝到kube-system namespace中。
? ? 為了安裝服務端tiller,還需要在這臺機器上配置好kubectl工具和kubeconfig文件,確保kubectl工具可以在這臺機器上訪問apiserver且正常使用。 這里的node1節點以及配置好了kubectl。
? ? 因為Kubernetes APIServer開啟了RBAC訪問控制,所以需要創建tiller使用的service account: tiller并分配合適的角色給它。 詳細內容可以查看helm文檔中的Role-based Access Control。 這里簡單起見直接分配cluster-admin這個集群內置的ClusterRole給它。
創建rbac-config.yaml文件:
[root@cma-cluster-slave5 linux-amd64]# vim rbac-config.yaml apiVersion: v1 kind: ServiceAccount metadata:name: tillernamespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata:name: tiller roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin subjects:- kind: ServiceAccountname: tillernamespace: kube-system創建rbac服務
[root@cma-cluster-slave5 linux-amd64]# kubectl create -f rbac-config.yaml serviceaccount/tiller created clusterrolebinding.rbac.authorization.k8s.io/tiller created?3.初始化
要安裝 Helm 的服務端程序,我們需要使用到kubectl工具,所以先確保kubectl工具能夠正常的訪問 kubernetes 集群的apiserver哦。
[root@VM-0-51-centos bin]# helm2 init由于 Helm 默認會去gcr.io拉取鏡像,所以如果你當前執行的機器沒有配置科學上網的話可以實現下面的命令代替:
$ helm init --force-upgrade --tiller-image gcr.io/kubernetes-helm/tiller:v2.10.0 $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://docs.helm.sh/using_helm/#securing-your-helm-installation Happy Helming!如果一直卡住或者報 google api 之類的錯誤,可以使用下面的命令進行初始化:
$ helm init --upgrade --tiller-image cnych/tiller:v2.10.0 --stable-repo-url https://cnych.github.io/kube-charts-mirror/這個命令會把默認的 google 的倉庫地址替換成我同步的一個鏡像地址。
如果在安裝過程中遇到了一些其他問題,比如初始化的時候出現了如下錯誤:
E0125 14:03:19.093131 56246 portforward.go:331] an error occurred forwarding 55943 -> 44134: error forwarding port 44134 to pod d01941068c9dfea1c9e46127578994d1cf8bc34c971ff109dc6faa4c05043a6e, uid : unable to do port forwarding: socat not found. 2018/01/25 14:03:19 (0xc420476210) (0xc4203ae1e0) Stream removed, broadcasting: 3 2018/01/25 14:03:19 (0xc4203ae1e0) (3) Writing data frame 2018/01/25 14:03:19 (0xc420476210) (0xc4200c3900) Create stream 2018/01/25 14:03:19 (0xc420476210) (0xc4200c3900) Stream added, broadcasting: 5 Error: cannot connect to Tiller解決方案:在節點上安裝socat可以解決
$ sudo yum install -y socatHelm 服務端正常安裝完成后,Tiller默認被部署在kubernetes集群的kube-system命名空間下:
$ kubectl get pod -n kube-system -l app=helm NAME READY STATUS RESTARTS AGE tiller-deploy-86b844d8c6-44fpq 1/1 Running 0 7m此時,我們查看 Helm 版本就都正常了:
$ helm version Client: &version.Version{SemVer:"v2.10.0", GitCommit:"9ad53aac42165a5fadc6c87be0dea6b115f93090", GitTreeState:"clean"} Server: &version.Version{SemVer:"v2.10.0", GitCommit:"9ad53aac42165a5fadc6c87be0dea6b115f93090", GitTreeState:"clean"}總結
- 上一篇: 释放占用端口
- 下一篇: nginx四层端口转发