Helm工具安裝配置——2.14.3

1、helm

在Kubernetes中部署容器雲的應用也是一項有挑戰性的工做,Helm就是爲了簡化在Kubernetes中安裝部署容器雲應用的一個客戶端工具。經過helm可以幫助開發者定義、安裝和升級Kubernetes中的容器雲應用,同時,也能夠經過helm進行容器雲應用的分享。在Kubeapps Hub中提供了包括Redis、MySQL和Jenkins等常見的應用,經過helm可使用一條命令就可以將其部署安裝在本身的Kubernetes集羣中。mysql

一、helm架構

helm的總體架構以下圖所示,Helm架構由Helm客戶端、Tiller服務器端和Chart倉庫所組成;Tiller部署在Kubernetes中,Helm客戶端從Chart倉庫中獲取Chart安裝包,並將其安裝部署到Kubernetes集羣中。linux

Helm工具安裝配置——2.14.3

Helm是管理Kubernetes包的工具,Helm能提供下面的能力:git

  • 建立新的charts;
  • 將charts打包成tgz文件;
  • 與chart倉庫交互;
  • 安裝和卸載Kubernetes的應用;
  • 管理使用Helm安裝的charts的生命週期;

二、helm概念

在Helm中,有如下三個重要概念須要瞭解:github

  • Charts:是建立Kubernetes應用實例的信息集合,也就是一個helm的程序包,它包含了運行一個k8s應用全部須要的鏡像、依賴關係和資源定義等,必要時還會包含Service資源定義,它相似於yum的rpm文件;
  • Repository:Chart倉庫,用於集中存儲和分發Charts。
  • Config:應用程序實例化安裝時運行使用的配置信息;
  • Release:chart的運行實例,包含特定的config;

在同一個集羣中,一個Charts可使用不一樣的config重複安裝屢次,每次安裝都會建立一個新的Release。sql

三、helm組件

在Helm中有兩個主要的組件,即Helm客戶端和Tiller服務器:docker

Helm客戶端:是一個供終端用戶使用的命令行工具。api

客戶端負責以下的工做:bash

  • 本地chart開發;
  • 管理倉庫
  • 與Tiller服務器交互(發送須要被安裝的charts、請求關於發佈版本的信息、請求更新或者卸載已安裝的發佈版本)

Tiller服務器: Tiller服務部署在Kubernetes集羣中,Helm客戶端經過與Tiller服務器進行交互,並最終與Kubernetes API服務器進行交互。服務器

Tiller服務器負責以下的工做:架構

  • 監聽來自於Helm客戶端的請求
  • 組合chart和配置來構建一個發佈
  • 在Kubernetes中安裝,並跟蹤後續的發佈
  • 經過與Kubernetes交互,更新或者chart

2、部署helm

一、安裝helm客戶端

//github搜索helm

[root@docker-k8s01 ~]# wget https://get.helm.sh/helm-v2.14.3-linux-amd64.tar.gz
//解包
[root@docker-k8s01 ~]# tar zxf helm-v2.14.3-linux-amd64.tar.gz 
[root@docker-k8s01 ~]# cd linux-amd64/
//只須要該目錄下的helm命令
[root@docker-k8s01 linux-amd64]# ls
helm  LICENSE  README.md  tiller
[root@docker-k8s01 linux-amd64]# mv helm /usr/local/bin/
//賦予權限
[root@docker-k8s01 linux-amd64]# chmod +x /usr/local/bin/helm 
//配置命令自動補全
[root@docker-k8s01 linux-amd64]# echo 'source <(helm completion bash)' >> /etc/profile
[root@docker-k8s01 linux-amd64]# . /etc/profile

二、安裝Tiller server(須要建立受權用戶)

//建立受權用戶,編寫yaml文件
[root@docker-k8s01 ~]# cat 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@docker-k8s01 ~]# kubectl apply -f tiller-rbac.yaml
//Tiller server的環境初始化
[root@docker-k8s01 ~]# helm init --service-account=tiller 
//helm的服務端就是Tiller
//查看tiller的pod名稱
[root@docker-k8s01 ~]# kubectl get pod -n kube-system | grep tiller
tiller-deploy-8557598fbc-z6n2w         0/1     ImagePullBackOff   0          91s
[root@docker-k8s01 ~]# kubectl edit pod tiller-deploy-8557598fbc-z6n2w -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
//固然也能夠直接在節點上下載也能夠
[root@docker-k8s02 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.3
//保證tiller的pod正常運行便可
[root@docker-k8s01 ~]# kubectl get pod -n kube-system  | grep tiller 
tiller-deploy-8557598fbc-z6n2w         1/1     Running   0          21m

三、配置helm倉庫

//查看其倉庫信息
[root@docker-k8s01 ~]# helm repo list
NAME    URL                                     
stable  https://kubernetes-charts.storage.googleapis.com
//如上,默認是Google,在國外,速度特別慢,因此須要更換爲國內源
[root@docker-k8s01 ~]# helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
//再次查看能夠看到已經更換爲了杭州阿里雲
[root@docker-k8s01 ~]# helm repo list
NAME    URL                                    
stable  https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
[root@docker-k8s01 ~]# helm repo update 
//查看helm版本信息,必須保證能夠查看出來client和server,纔可正常使用helm
[root@docker-k8s01 ~]# helm version
Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}

四、測試helm是否能夠正常使用

//搜索MySQL
[root@docker-k8s01 ~]# helm search mysql
//查看到的是charts包文件,查出來的版本是helm的Charts包的版本
//查看其詳細信息
[root@docker-k8s01 ~]# helm inspect stable/mysql
//下載搜索到的包到本地
[root@docker-k8s01 ~]# helm fetch stable/mysql
//在線安裝這個MySQL
[root@docker-k8s01 templates]# helm install stable/mysql