在Kubernetes中部署容器雲的應用也是一項有挑戰性的工做,Helm就是爲了簡化在Kubernetes中安裝部署容器雲應用的一個客戶端工具。經過helm可以幫助開發者定義、安裝和升級Kubernetes中的容器雲應用,同時,也能夠經過helm進行容器雲應用的分享。在Kubeapps Hub中提供了包括Redis、MySQL和Jenkins等常見的應用,經過helm可使用一條命令就可以將其部署安裝在本身的Kubernetes集羣中。mysql
helm的總體架構以下圖所示,Helm架構由Helm客戶端、Tiller服務器端和Chart倉庫所組成;Tiller部署在Kubernetes中,Helm客戶端從Chart倉庫中獲取Chart安裝包,並將其安裝部署到Kubernetes集羣中。linux
Helm是管理Kubernetes包的工具,Helm能提供下面的能力:git
- 建立新的charts;
- 將charts打包成tgz文件;
- 與chart倉庫交互;
- 安裝和卸載Kubernetes的應用;
- 管理使用Helm安裝的charts的生命週期;
在Helm中,有如下三個重要概念須要瞭解:github
- Charts:是建立Kubernetes應用實例的信息集合,也就是一個helm的程序包,它包含了運行一個k8s應用全部須要的鏡像、依賴關係和資源定義等,必要時還會包含Service資源定義,它相似於yum的rpm文件;
- Repository:Chart倉庫,用於集中存儲和分發Charts。
- Config:應用程序實例化安裝時運行使用的配置信息;
- Release:chart的運行實例,包含特定的config;
在同一個集羣中,一個Charts可使用不一樣的config重複安裝屢次,每次安裝都會建立一個新的Release。sql
在Helm中有兩個主要的組件,即Helm客戶端和Tiller服務器:vim
Helm客戶端:是一個供終端用戶使用的命令行工具。api
客戶端負責以下的工做:bash
- 本地chart開發;
- 管理倉庫
- 與Tiller服務器交互(發送須要被安裝的charts、請求關於發佈版本的信息、請求更新或者卸載已安裝的發佈版本)
Tiller服務器: Tiller服務部署在Kubernetes集羣中,Helm客戶端經過與Tiller服務器進行交互,並最終與Kubernetes API服務器進行交互。服務器
Tiller服務器負責以下的工做:架構
- 監聽來自於Helm客戶端的請求
- 組合chart和配置來構建一個發佈
- 在Kubernetes中安裝,並跟蹤後續的發佈
- 經過與Kubernetes交互,更新或者chart
#從github下載helm [root@master ~]# wget https://get.helm.sh/helm-v2.14.3-linux-amd64.tar.gz #解包,只須要包中的一個命令 [root@master ~]# tar zxf helm-v2.14.3-linux-amd64.tar.gz [root@master ~]# mv linux-amd64/helm /usr/local/bin/ [root@master ~]# chmod +x /usr/local/bin/helm #設置命令自動補全 [root@master ~]# echo 'source <(helm completion bash)' >> /etc/profile [root@master ~]# . /etc/profile #重載環境變量
[root@master ~]# vim tiller-rbac.yaml #建立受權用戶 apiVersion: v1 kind: ServiceAccount metadata: name: tiller namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: tiller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system [root@master ~]# kubectl apply -f tiller-rbac.yaml #執行yaml文件 [root@master ~]# helm init --service-account=tiller #Tiller server的環境初始化 #helm的服務端就是Tiller [root@master ~]# kubectl get pod -n kube-system | grep tiller #查看tiller的pod名稱 tiller-deploy-8557598fbc-tvfsj 0/1 ContainerCreating 0 2m16s [root@master ~]# kubectl edit pod tiller-deploy-8557598fbc-tvfsj -n kube-system #編輯pod的yaml文件,將其使用的鏡像改成國內阿里雲的,默認是Google的鏡像,下載不下來 #修改spec字段的image指定的鏡像,以下: image: gcr.io/kubernetes-helm/tiller:v2.14.3 #修改以下: image: registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.3 #修改後,本身想辦法使其去下載新的鏡像,也或者說換一種方法 #就是查看到這個pod運行在哪一個節點,而後手動下載阿里雲的鏡像並更更名字爲yaml文件中默認指定的名字 #這樣,還免得改yaml文件了 #我這裏改完之後,也不知道是刪除pod後更改生效了仍是.... [root@master ~]# kubectl get pod -n kube-system | grep tiller #只要保證tiller的pod正常運行便可 tiller-deploy-8557598fbc-m986t 1/1 Running 0 7m54s
[root@master ~]# helm repo list #查看其倉庫信息 NAME URL stable https://kubernetes-charts.storage.googleapis.com #如上,默認是Google,在國外,速度特別慢 local http://127.0.0.1:8879/charts #執行下面命令,更改成國內阿里雲的倉庫 [root@master ~]# helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts [root@master ~]# helm repo list #再次查看,能夠發現更改生效了 NAME URL stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts local http://127.0.0.1:8879/charts [root@master ~]# helm repo update #更新一下helm倉庫 [root@master ~]# helm version #查看helm版本信息,必須保證能夠查看出來client和server,纔可正常使用helm Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"} Server: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
[root@master ~]# helm search mysql #搜索MySQL #查看到的是charts包文件,查出來的版本是helm的Charts包的版本 [root@master ~]# helm inspect stable/mysql #查看其詳細信息 [root@master ~]# helm fetch stable/mysql #下載搜索到的包到本地 [root@master templates]# helm install stable/mysql #在線安裝這個MySQL
若是上述測試命令均可以正常執行,則表示helm配置無誤。
———————— 本文至此結束,感謝閱讀 ————————