helm 是一个类似 yum 用来简化部署 k8s 上容器的程序,虽然 helm 本身并不存放任何镜像,镜像依旧存储在各个镜像仓库如 docker hub 中.helm 仓库用来存储清单文件 charts,相对的 charts 需要在正式运行前赋予相关环境变量值以适用于不同的客制化信息,所以 helm 会从仓库中获取 charts 并存放在本地,之后创建容器时则先以本地 charts 为准,如果本地没有才会在仓库中寻找相关 charts,并且 charts 在部署以后便称之为 release.并且 helm 并不与 k8s 的 APIserver 直接交互,他们之间还有一个中间层 Tiller,再由 Tiller 与 APIserver 交互完成创建容器的操作,所以严格意义上来讲 helm 是 Tiller 的客户端.操作 helm 与 kubectl 类似通过命令行即可实现,同时 helm 还能完成版本控制
-
核心术语:
- Chart:一个 helm 程序包
- Repository:Charts 仓库,https/http 服务器
- Release:特定的 Chart 被赋予克制化信息后,部署于目标集群上的一个实例
-
程序架构:
- helm:客户端,管理本地的 Chart 仓库,管理 Chart, 与 Tiller 服务器交互,发送 Chart,实例安装、查询、卸载等
- Tiller:服务端,可运行在 k8s 之外但及其麻烦,接收 helm 发来的 Charts 与客制化信息,生成 relase 并完成部署
部署与使用
-
安装 helm
[root@master-0 ~]# wget https://storage.googleapis.com/kubernetes-helm/helm-v2.9.1-linux-amd64.tar.gz [root@master-0 ~]# tar -zxvf helm-v2.9.1-linux-amd64.tar.gz [root@master-0 ~]# cp linux-amd64/helm /usr/local/bin/
-
安装 Tiller 可以通过
helm init
来安装 Tiller,第一次进行 helm init 的时候会联系 APIserver, 所以会获取 kube/config 的配置文件[root@master-0 .kube]# pwd /root/.kube [root@master-0 .kube]# ls cache config http-cache [root@master-0 .kube]# helm init # 国内可以使用如下站点 [root@master-0 .kube]# helm init --upgrade --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
-
给 Tiller 授权
[root@master-0 .kube]# kubectl get deployment --all-namespaces NAMESPACE NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE kube-system tiller-deploy 1 1 1 1 1h [root@master-0 .kube]# kubectl create serviceaccount --namespace kube-system tiller [root@master-0 .kube]# kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller [root@master-0 .kube]# kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}' deployment.extensions "tiller-deploy" patched [root@master-0 .kube]# kubectl get deploy --namespace kube-system tiller-deploy --output yaml|grep serviceAccount serviceAccount: tiller serviceAccountName: tiller
-
验证 Tiller 是否安装成功
[root@master-0 ~]# kubectl -n kube-system get pods|grep tiller tiller-deploy-6d68f5c78f-nql2z 1/1 Running 0 5m [root@master-0 ~]# helm version Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"} Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
官方可用的Chart列表: https://hub.kubeapps.com/