一、概述
1. Helm简介
Helm是一个Kubemetes包管理器(类似于OS包管理器,比如Linux中的yum、apt,或者MacOS中的 homebrew)。
Helm包括两个部分:helm客户端和tiller服务端。
helm客户端
helm客户端是一个命令行工具,负责管理charts、repository和release。它通过gPRC API(使用kubectl port-forward将tiller的端口映射到本地,然后再通过映射后的端口跟tiller通信)向tiller发送请求,并由tiller来管理对应的Kubernetes资源。helm作用:
- 本地Charts开发;
- 管理Charts仓库;
- 与Tiller服务器交互:发送Charts以安装、查询Release的相关信息及升级或卸载已有的Release
tiller 服务端
tiller 接收来自helm客户端的请求,并把相关资源的操作发送到Kubernetes,负责管理(安装、查询、升级或删除等)和跟踪 Kubernetes 资源。为了方便管理,tiller把release的相关信息保存在kubernetes的ConfigMap中。tiller作用:
- 监听来自helm客户端的请求;
- 合并Charts和配置以构建一个Release;
- 向Kubernetes集群安装Charts并对相应的Release进行跟踪;
- 升级和卸载Charts;
图片.png
2. 为什么需要Helm
Kubernetes虽然提供了多种容器编排对象,例如Deployment、StatefulSet、DeamonSet、Job等,还有多种基础资源封装例如ConfigMap、Secret、Serivce等,但是一个应用往往有多个服务,有的可能还要依赖持久化存储,当这些服务之间直接互相依赖,需要有一定的组合的情况下,使用YAML文件的方式配置应用往往十分繁琐还容易出错,这时候就需要服务编排工具。
服务编排管理工具就是构建在kubernetes的基础object之上,统筹各个服务之间的关系和依赖的。目前常用到的工具是Helm。
3. Helm核心术语
Chart:一个Helm包,其中包含了运行一个应用所需要的工具和资源定义,还可能包含Kubernetes集群中的服务定义,类似于Homebrew中的formula、APT中的dpkg或者Yum中的RPM文件: Release:在Kubernetes集群上运行的一个Chart实例。在同一个集群上,一个Chart可以安装多次。例如有一个MySQLChart,如果想在服务器上运行两个MySQL数据库,就可以基于这个Chart安装两次,每次安装都会生成新的Release,会有独立的Release名称; Repository:用于存放和共享Chart的仓库。
Helm将charts安装到Kubernetes中,每个安装创建一个新release。要找到新的chart,可以搜索Helm charts存储库repositories。
二、安装Helm
1. 安装Helm Client
Helm客户端可以从源代码安装,也可以从预构建的二进制版本安装或执行安装脚本。
1.1 脚本安装方式
Helm现在有一个安装shell脚本,将自动获取最新版本的Helm客户端并在本地安装。
[root@master ~]# curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash
脚本方式安装很简单,执行一条命令就行。
1.2 二进制方式安装
这种方式可以选择helm客户端安装版本,下载二进制文件:https://github.com/helm/helm/releases/ ,例如下载2.14.2版本:
[root@master ~]# curl -L https://get.helm.sh/helm-v2.14.2-linux-amd64.tar.gz -o helm-v2.14.2-linux-amd64.tar.gz[root@master ~]# tar -zxvf helm-v2.14.2-linux-amd64.tar.gz linux-amd64/linux-amd64/LICENSElinux-amd64/helmlinux-amd64/README.mdlinux-amd64/tiller[root@master ~]# cp linux-amd64/helm /usr/bin[root@master ~]# helm versionClient: &version.Version{SemVer:"v2.14.2", GitCommit:"a8b13cc5ab6a7dbef0a58f5061bcc7c0c61598e7", GitTreeState:"clean"}Error: could not find tiller
下载二进制文件、解压、拷贝命令,执行helm version命令发现helm客户端版本为v2.14.2,服务端tiller还未安装,本文测试基于v2.14.3最新版。
1.3 命令补全
[root@master ~]# echo "source > .bash_profile[root@master ~]# source .bash_profile
图片.png
2. 安装Tiller server
2.1 设置环境变量
[root@master ~]# mkdir helm[root@master ~]# echo 'export HELM_HOME=~/helm' >> .bash_profile [root@master ~]# source .bash_profile [root@master ~]# echo $HELM_HOME/root/helm
设置helm的home目录为/root/helm,tiller将安装于该目录下
图片.png
2.2 创建带有cluster-admin角色权限的服务账户
[root@master ~]# more rbac-config.yaml apiVersion: v1kind: ServiceAccountmetadata: name: tiller namespace: kube-system---apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRoleBindingmetadata: name: tillerroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-adminsubjects: - kind: ServiceAccount name: tiller namespace: kube-system[root@master ~]# kubectl create -f rbac-config.yamlserviceaccount/til