1.简介
helm是k8s中的一个包管理工具,通过charts(一组yaml文件),来安装,升级,k8s中的程序。类似于Centos中的yum包管理工具
2.三大概念
2.1 charts
charts是一个helm的包,包含k8s集群中运行的应用程序,工具,或者服务所需的所有资源定义
2.2 Repository
存放charts的仓库,类似于Centos中的yum源,不过这个是适用于k8s的软件包
2.3 release
在k8s集群中运行的chart的实例被称为release。
同一个Chart可以安装成多个Release,但是对同一个Release也有可能需要进行多次更新,这是就可以使用到RELEASE NUMBER(也被称为RELEASE VERSION)的概念了。无论是更新还是回滚,每次Release的变化都会导致RELEASE NUMBER的递增。
操作 | Release Number |
---|---|
install | release 1 |
upgrade | release 2 |
upgrade | release 3 |
rollback 1 | release 4 (虽然是release 4,但是运行的配置和release 1等同) |
3. 组成
helm由两个部分组成
3.1 helm client
命令行工具
3.1.1 作用
- 本地chart的开发
- 仓库管理
- 与 Tiller sever 交互
- 部署、升级、卸载 release
3.2 Tiller server
部署在集群中的一个服务,与helm client 和api-server交互
3.2.1作用
- 接收helm client 请求
- 安装chart到集群
4 安装helm
4.1 下载helm client 并解压
wget https://get.helm.sh/helm-v2.16.9-linux-amd64.tar.gz
tar -zxvf helm-v2.16.9-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
4.2 创建tiller,并授权
cat > helm-rabc.yaml <<EOF
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
EOF
kubectl apply -f helm-rabc.yaml
4.3 安装helm server
helm init --service-account tiller --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.16.6 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
4.4 检查是否安装成功
4.4.1报错信息
helm version
Client: &version.Version{SemVer:"v2.16.9", GitCommit:"8ad7037828e5a0fca1009dabe290130da6368e39", GitTreeState:"clean"}
E0701 09:36:25.975087 24523 portforward.go:400] an error occurred forwarding 37857 -> 44134: error forwarding port 44134 to pod 2ebd3e540d81a8fca8e8a5693c42b9c8d5e974b00b7dd663b1339269975a68c1, uid : unable to do port forwarding: socat not found
E0701 09:36:26.977954 24523 portforward.go:400] an error occurred forwarding 37857 -> 44134: error forwarding port 44134 to pod 2ebd3e540d81a8fca8e8a5693c42b9c8d5e974b00b7dd663b1339269975a68c1, uid : unable to do port forwarding: socat not found
E0701 09:36:28.456773 24523 portforward.go:400] an error occurred forwarding 37857 -> 44134: error forwarding port 44134 to pod 2ebd3e540d81a8fca8e8a5693c42b9c8d5e974b00b7dd663b1339269975a68c1, uid : unable to do port forwarding: socat not found
E0701 09:37:01.165354 24523 portforward.go:340] error creating error stream for port 37857 -> 44134: Timeout occured
E0701 09:37:24.867441 24523 portforward.go:362] error creating forwarding stream for port 37857 -> 44134: Timeout occured
E0701 09:37:51.981064 24523 portforward.go:362] error creating forwarding stream for port 37857 -> 44134: Timeout occured
E0701 09:38:24.446395 24523 portforward.go:340] error creating error stream for port 37857 -> 44134: Timeout occured
4.4.2解决
在所有node节点安装socat
yum -y install socat
helm version
Client: &version.Version{SemVer:"v2.16.9", GitCommit:"8ad7037828e5a0fca1009dabe290130da6368e39", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.16.6", GitCommit:"dd2e5695da88625b190e6b22e9542550ab503a47", GitTreeState:"clean"}
5 参考文献
https://helm.sh/docs/
https://blog.csdn.net/kozazyh/article/details/79537996