helm简介
k8s之上所有应用pod的运行,都需要靠编写yaml清单实现,(只一个应用pod,通常需要的就有deploment、service、configmap、serviceaccount、role、rolebinding等)而对于大规模实践场景,应用的配置、分发、版本控制、升级、回滚,如果只是手动写yaml文件,必然很繁琐,且容易出错;
helm的出现,可以简化这些清单文件的管理难度,类比linux的yum包管理器
helm术语
- charts,一个helm程序包,包含了k8s应用所需镜像、依赖、资源定义yaml文件等
- repository,存储charts的仓库,类比yum仓库,存储rpm包的
- config,charts实例为release时,需要的配置信息
- release,charts运行为实例后就是release,chart类比某文件路径下的程序文件,release类比其运行起来时的进程;(charts可用不同的config实例化多次,类比linux上程序文件,传不同的启动参数,启动多个进程)
helm架构
- helm客户端:
- 本地charts开发
- 管理charts仓库
- 和tiller服务端交互,发送charts,并运行为实例即release,
- tiller服务端:
- 接收helm客户端请求,
- 将charts和其配置提交给k8s,运行为实例即release
- 升级、卸载charts
- charts仓库:
- 存储charts,利于分发,复用,版本管理
helm client
此处采用,安装预编译二进制方式安装,将二进制程序文件,放到PATH路径下即可,(安装helm的主机,必须具有能连接集群的kubectl,因为helm依赖kubectl和集群通信)
[root@client ~]# tar -xf helm-v2.9.1-linux-amd64.tar.gz
[root@client ~]# cd linux-amd64/
[root@client linux-amd64]# ll
total 29348
-rwxr-xr-x 1 root root 30033696 May 15 2018 helm
-rw-r--r-- 1 root root 11373 May 15 2018 LICENSE
-rw-r--r-- 1 root root 3310 May 15 2018 README.md
[root@client linux-amd64]# file helm
helm: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped
[root@client linux-amd64]# mv helm /usr/local/bin/
[root@client linux-amd64]# helm --help
The Kubernetes package manager
To begin working with Helm, run the 'helm init' command:
$ helm init
安装tiller server
1、先给tiller定义sa,以及其clusterrolebinding,将其绑定到cluster-admin角色,在tiller和api-server交互时,使得其具有最高管理员权限;
|
|
2、helm init初始化,会自动将tiller运行为k8s之上的pod,拉取镜像为helm同版本的tiller,拉取地址为gcr.io/kubernetes-helm,需要科学的上一下网;
[root@master ~]# !804
helm init --service-account tiller
$HELM_HOME has been configured at /root/.helm.
Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.
Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!
3、tiller的pod一直启动失败;
helm使用
helm charts
charts就是描述一组k8s对象定义的文件的集合;并遵从一定的目录结构,顶层目录即为charts名,可打包为归档文件;
charts的文件组织结构
以一个Jenkins的chart为例:
[root@client jenkins]# ll -rt
total 0
-rw-r--r-- 1 root root 0 Dec 1 09:51 Chart.yaml
# 当前charts的描述信息
-rw-r--r-- 1 root root 0 Dec 1 09:52 LICESENSE
# 许可证信息,文本文件
-rw-r--r-- 1 root root 0 Dec 1 09:52 README.md
# readme文件,可选
-rw-r--r-- 1 root root 0 Dec 1 09:52 requirements.yaml
# 当前charts的依赖关系描述文件,可选
-rw-r--r-- 1 root root 0 Dec 1 09:52 values.yaml
# 当前charts的配置信息的默认值
drwxr-xr-x 2 root root 6 Dec 1 09:52 charts
# 存放当前chart依赖到的所有chart文件
drwxr-xr-x 2 root root 23 Dec 1 09:52
templates
# 存放单曲charts用到的模版文件
-rw-r--r-- 1 root root 0 Dec 1 09:52 templates/NOTES.txt
# templates的使用注解