k8s之helm包管理器

k8s之helm包管理器

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,利于分发,复用,版本管理

image-20201130182229949

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交互时,使得其具有最高管理员权限;

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
[root@client helm]# cat tiller.yaml 
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

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的使用注解

chart.yaml文件组织结构

charts中的依赖关系

模版和值

自定义charts

updatedupdated2020-12-012020-12-01
加载评论