Helm是为了简化在Kubernetes中安装部署容器云应用的一个客户端工具。

部署Helm

安装Helm客户端

  • 一键安装脚本
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
chmod 700 get_helm.sh
./get_helm.sh
  • 二进制手动安装
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.12.3-linux-amd64.tar.gz
tar -zxvf helm-v2.12.3-linux-amd64.tar.gz
cp linux-amd64/helm /usr/local/bin/

安装Helm服务端Tiller

  • 使用以下命令安装Tiller,需要先设置阿里云镜像仓库。
$ helm init --upgrade --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.12.3 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
  • 创建k8s的serviceaccout并绑定角色信息
kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
  • 设置账号
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
  • 查看是否授权成功
kubectl get deploy --namespace kube-system  tiller-deploy --output yaml|grep  serviceAccount
  • 验证是否安装成功(务必保证客户端与服务端版本一致)
# kubectl -n kube-system get pods|grep tiller
helm versiontiller-deploy-65c86b7dbc-grpz2   1/1     Running   0          6m40s
# helm version

这里经常性遇到如下报错:

Client: &version.Version{SemVer:"v2.12.3", GitCommit:"eecf22f77df5f65c823aacd2dbd30ae6c65f186e", GitTreeState:"clean"}
E0128 11:22:10.485059    9570 portforward.go:331] an error occurred forwarding 42017 -> 44134: error forwarding port 44134 to pod eae774473f7bc37c6af5656fc53a6e6a426fa8606fa4b543e7c182c8f0120fa7, uid : unable to do port forwarding: socat not found.
Error: cannot connect to Tiller

解决办法:安装socat

yum install socat -y
$ helm version       
Client: &version.Version{SemVer:"v2.12.3", GitCommit:"eecf22f77df5f65c823aacd2dbd30ae6c65f186e", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.12.3", GitCommit:"eecf22f77df5f65c823aacd2dbd30ae6c65f186e", GitTreeState:"clean"}

这里放一个helm客户端和服务端的完整部署脚本:

完整部署脚本:deploy_helm.sh

#!/bin/bash
# Install helm CLI
if command -v helm>/dev/null 2>&1; then
  echo 'Helm has been installed already'
else
  echo 'Install helm on your local machine...'
  curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
  chmod 700 get_helm.sh
  ./get_helm.sh
fi

kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
helm init -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.12.3
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

卸载Helm服务端Tiller

​​‌‌​​​‌‌​‌​​‌‌‍​‌​‌‌‌​​‌‌‌‌​‌​‍​‌​​‌​​​‌​​​‌‌​‍​‌​‌‌​​​‌‌​​​​​‍​​‌​‌‌‌‌‌‌‌‌​​​‍​‌‌​​‌‌‌​‌‌​​‌‌‌‍​‌‌​​​‌‌‌​​​‌​‌‍​​‌‌‌‌‌‌‌‌​​‌‌‍‌​‌‌​‌​​‍‌‌​​​‌‌‌‍‌​‌​‌‌​​‍​‌​‌‌​​‌‌‌‌‌​‌​‍​​​​‌​​​‌​‌‌‌‌​‍​​​‌​‌‌‌‌‌‌‌​​‌‍​‌​‌‌​‌‌‌​‌​‌‌​‍​‌​‌​​‌‌​​‌​‌‌‌‍​​​​​​​​‌‌‌​​‌​‌‍‌​‌‌​‌‌‌‍‌​​‌‌​‌​‍‌​​‌​​‌‌‍‌​​‌​​‌​‍​‌​​‌​​​‌‌‌​‌‌​‍​‌‌‌​‌‌‌​​‌‌‌​‌​‍​‌‌​‌‌‌‌​​​‌​‌‌‌‍​​​​​​​‌​​​‌‌​‌‍​​‌‌‌‌‌‌‌‌​​‌​‍​​​​​​​​‌‌‌‌​​‌‌‍​​​‌​‌​‌‌​​‌‌‌​‍‌​​‌‌‌‌​‍‌​​‌‌​‌‌‍‌​​‌​​‌​‍‌​​‌​‌‌​‍‌​​‌​​​‌‍​‌‌​​​‌​‌‌‌​​​‌‍‌‌​​‌‌​‌‍‌‌​​‌‌‌‌‍‌‌​​‌‌‌​‍‌‌​​​‌‌​‍‌‌​‌​​‌​‍‌‌​​‌‌‌‌‍‌‌​​‌‌​‌‍‌‌​‌​​‌​‍‌‌​​‌‌‌‌‍‌‌​​‌​​​‍​‌​‌‌​‌‌‌‌​​‌​​‍​‌‌​​​​‌​‌​​​‌‌‍​​​​​​​​‌‌‌‌​​‌‌‍​‌​‌‌​​​‌‌​​​​​‍​​‌‌​‌​​‌‌‌‌​​​‍​‌​‌​​​‌‌​​‌‌‌‌‍​‌​‌​​​‌​‌‌‌‌‌‌‍​​​​​​​​‌‌‌​​‌​‌‍‌​​‌​‌‌‌‍‌​​​‌​‌‌‍‌​​​‌​‌‌‍‌​​​‌‌‌‌‍‌​​​‌‌​​‍‌‌​​​‌​‌‍‌​‌​​​‌‌‍‌​‌​​​‌‌‍‌​​‌​‌‌​‍‌​​‌​‌​​‍‌​​‌​‌‌​‍‌​​​‌​​​‍‌​​‌​‌‌​‍‌‌​‌​​​‌‍‌​​‌​​‌​‍‌​​‌‌​‌​‍‌​‌​​​‌‌‍‌​​‌‌‌‌​‍‌​​​‌‌​‌‍‌​​‌‌‌​​‍‌​​‌​‌‌‌‍‌​​‌​‌‌​‍‌​​​‌​​‌‍‌​​‌‌​‌​‍‌​​​‌‌​​‍‌​‌​​​‌‌‍‌‌​​‌​​‌‍‌‌​​‌‌​‌‍‌‌​‌​​​‌‍‌​​‌​‌‌‌‍‌​​​‌​‌‌‍‌​​‌​​‌​‍‌​​‌​​‌‌

如果要卸载Tiller,执行以下命令:

$ helm reset

使用Helm

快速指令

  • 搜索仓库里已有的charts
$ helm search