Helm安装
一.Helm的概述
Helm這個(gè)東西其實(shí)早有耳聞,但是一直沒有用在生產(chǎn)環(huán)境,而且現(xiàn)在對(duì)這貨的評(píng)價(jià)也是褒貶不一。正好最近需要再次部署一套測(cè)試環(huán)境,對(duì)于單體服務(wù),部署一套測(cè)試環(huán)境我相信還是非??斓?#xff0c;但是對(duì)于微服務(wù)架構(gòu)的應(yīng)用,要部署一套新的環(huán)境,就有點(diǎn)折磨人了,微服務(wù)越多、你就會(huì)越絕望的。雖然我們線上和測(cè)試環(huán)境已經(jīng)都遷移到了kubernetes環(huán)境,但是每個(gè)微服務(wù)也得維護(hù)一套yaml文件,而且每個(gè)環(huán)境下的配置文件也不太一樣,部署一套新的環(huán)境成本是真的很高。如果我們能使用類似于yum的工具來安裝我們的應(yīng)用的話是不是就很爽歪歪了啊?Helm就相當(dāng)于kubernetes環(huán)境下的yum包管理工具。
用途
做為 Kubernetes 的一個(gè)包管理工具,Helm具有如下功能:
- 創(chuàng)建新的 chart
- chart 打包成 tgz 格式
- 上傳 chart 到 chart 倉(cāng)庫(kù)或從倉(cāng)庫(kù)中下載 chart
- 在Kubernetes集群中安裝或卸載 chart
- 管理用Helm安裝的 chart 的發(fā)布周期
重要概念
Helm 有三個(gè)重要概念:
- chart:包含了創(chuàng)建Kubernetes的一個(gè)應(yīng)用實(shí)例的必要信息
- config:包含了應(yīng)用發(fā)布配置信息
- release:是一個(gè) chart 及其配置的一個(gè)運(yùn)行實(shí)例
Helm Client?是用戶命令行工具,其主要負(fù)責(zé)如下:
- 本地 chart 開發(fā)
- 倉(cāng)庫(kù)管理
- 與 Tiller sever 交互
- 發(fā)送預(yù)安裝的 chart
- 查詢 release 信息
- 要求升級(jí)或卸載已存在的 release
Tiller Server是一個(gè)部署在Kubernetes集群內(nèi)部的 server,其與 Helm client、Kubernetes API server 進(jìn)行交互。Tiller server 主要負(fù)責(zé)如下:
- 監(jiān)聽來自 Helm client 的請(qǐng)求
- 通過 chart 及其配置構(gòu)建一次發(fā)布
- 安裝 chart 到Kubernetes集群,并跟蹤隨后的發(fā)布
- 通過與Kubernetes交互升級(jí)或卸載 chart
- 簡(jiǎn)單的說,client 管理 charts,而 server 管理發(fā)布 release
二.安裝Helm
1.下載包并解壓
我們可以在Releases · helm/helm · GitHub頁(yè)面下載二進(jìn)制文件,這里下載的v2.10.0版本,解壓后將可執(zhí)行文件helm拷貝到/usr/local/bin目錄下即可,這樣Helm客戶端就在這臺(tái)機(jī)器上安裝完成了。
~]# tar -xf helm-v2.1.0-linux-amd64.tar.gz~]# mv /root/linux-amd64/helm /usr/local/bin/helm2現(xiàn)在我們可以使用Helm命令查看版本了,會(huì)提示無法連接到服務(wù)端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的最簡(jiǎn)單方式是helm init, 該命令會(huì)檢查helm本地環(huán)境設(shè)置是否正確,helm init會(huì)連接kubectl默認(rèn)連接的kubernetes集群(可以通過kubectl config view查看),一旦連接集群成功,tiller會(huì)被安裝到kube-system namespace中。
? ? 為了安裝服務(wù)端tiller,還需要在這臺(tái)機(jī)器上配置好kubectl工具和kubeconfig文件,確保kubectl工具可以在這臺(tái)機(jī)器上訪問apiserver且正常使用。 這里的node1節(jié)點(diǎn)以及配置好了kubectl。
? ? 因?yàn)镵ubernetes APIServer開啟了RBAC訪問控制,所以需要?jiǎng)?chuàng)建tiller使用的service account: tiller并分配合適的角色給它。 詳細(xì)內(nèi)容可以查看helm文檔中的Role-based Access Control。 這里簡(jiǎn)單起見直接分配cluster-admin這個(gè)集群內(nèi)置的ClusterRole給它。
創(chuàng)建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創(chuàng)建rbac服務(wù)
[root@cma-cluster-slave5 linux-amd64]# kubectl create -f rbac-config.yaml serviceaccount/tiller created clusterrolebinding.rbac.authorization.k8s.io/tiller created?3.初始化
要安裝 Helm 的服務(wù)端程序,我們需要使用到kubectl工具,所以先確保kubectl工具能夠正常的訪問 kubernetes 集群的apiserver哦。
[root@VM-0-51-centos bin]# helm2 init由于 Helm 默認(rèn)會(huì)去gcr.io拉取鏡像,所以如果你當(dāng)前執(zhí)行的機(jī)器沒有配置科學(xué)上網(wǎng)的話可以實(shí)現(xiàn)下面的命令代替:
$ 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!如果一直卡住或者報(bào) google api 之類的錯(cuò)誤,可以使用下面的命令進(jìn)行初始化:
$ helm init --upgrade --tiller-image cnych/tiller:v2.10.0 --stable-repo-url https://cnych.github.io/kube-charts-mirror/這個(gè)命令會(huì)把默認(rèn)的 google 的倉(cāng)庫(kù)地址替換成我同步的一個(gè)鏡像地址。
如果在安裝過程中遇到了一些其他問題,比如初始化的時(shí)候出現(xiàn)了如下錯(cuò)誤:
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解決方案:在節(jié)點(diǎn)上安裝socat可以解決
$ sudo yum install -y socatHelm 服務(wù)端正常安裝完成后,Tiller默認(rèn)被部署在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此時(shí),我們查看 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"}總結(jié)
- 上一篇: 释放占用端口
- 下一篇: nginx四层端口转发