一、helm 是什么

软件的安装,应用部署一直是比较具有挑战性的工作。在计算机发展过程中为了简化应用的部署,先后出现了软件包管理系统(yum/apt-get),一键安装脚本,批量执行工具ansible/salt,二进制应用包等。那么在k8s之上部署应用我们需要哪些步骤,使用哪些命令呢?

A、kubectl create --name test01 --image centos
使用kubectl 命令进行应用的部署,进行应用组件的安装配置

B、清单文件
编写yml格式的清单文件,使用kubectl applay -f 清单文件,创建和管理k8s上面的资源。

在我们刚接触k8s后我们先后用这两种方面在k8s上面创建了相关资源,事实上以上k8s的都是通过kubectl将命令或者yml格式的清单文件转换为json格式提交给apiserver ,由apiserver 进行应用的相关管理工作。而kubectl的项目命令行操作试试临时测试使用,在生产环境对k8s资源进行操作我们一般使用配置清单的形式。

配置请清单内容较多,配置内容较多,编写具有难度,为了简化k8s上面应用的部署管理操作,helm 诞生了。

helm 是 k8s 外另外一个项目,专门为k8s 提供应用的安装仓库,目的简化应用安装方式。
helm --k8s 应用商店
从某种意义上讲 helm 就是k8s上面的应用商店。

二、helm 工作原理

k8s 上应用、pod、镜像关系

k8s上面运行的最小运用程序是pod,但实质是一个或多个容器,容器有docker 镜像仓库提供。镜像仓库由: 官方docker hub仓库,各个加速站点,第三方/私用仓库等组成。
k8s 上运行应用除了pod外,还有pod的控制器,负载均衡的server等,而无论是通过kubectl命令还是使用yaml文件的方式,都是通过apiserver转换为k8s可以识别的json格式的配置清单。也就是说k8s上面运行应用,需要docker镜像和配置清单。helm 就是提高我们各个应用所需要的配置清单文件。

k8s 与 helm的关系

helm 通过提供配置清单的模板文件chart,使得我们部署k8s应用更加简单,只需安装需要修改相关配置值文件,即可快速部署一个k8s应用release。

helm 维护本地和远程的chart仓库,chart包含多种配置清单模板和值文件。和yum不同的是helm不包含镜像文件。

三、helm 的核心术语

chart: 一个helm程序包,包含docker容器引用的清单文件,资源定义等模板文件,值文件

chartRepository chart仓库,http服务器,可以通过仓库下载chart文件

release: chart实例的部署实例。属性文件赋值后运行与k8s 之上的应用资源

chart ---> config ---> release

四、helm 的架构

helm 客户端,用于管理本地,远程chart长款,是命令行客户端与tiller进行交互,发送chart 进行helm应用的查询,资源管理

tiller helm的服务端。helm客户端并不与k8s机器的apiserver直接通讯,而是通过tiller server这个第三方组件进行通讯。tiller server 是apiserver的客户端,是helm的服务端。helm对应用的部署查询更新等操作是通过tiller转换为apiserver可以识别的格式管理应用资源。
tiller server 可以部署与k8s之外,也可以部署与k8s之内。一般都直接托管与k8s集群内部,由k8s集群进行调度。由于k8s配置的有RBAC角色认证,部署tiller服务需要配置rbac角色绑定。

图:
helm架构--此图来源于网络
chart repo
helm tiller apiserver

五、helm 安装:

5.1 安装helm 客户端

helm 安装----go语言,二进制安装

wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz
tar -xf helm-v2.13.1-linux-amd64.tar.gz
cp linux-amd64/* /usr/local/bin/

# 安装确认,查看helm的版本
helm version

5.2 安装helm服务端 tiller

5.2.1 介绍

tiller server 是helm的服务端,是k8s apiserver的客户端。helm 通过tiller server 获取chart仓库的chart模板文件,通过对value文件的复制,使用tiller server 向apiserver发送资源管理请求,从而生成release。

5.2.2 rdac 授权
[root@hw-apptest01-11-172 linux-amd64]# cat rbac-config-tile.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
    
[root@hw-apptest01-11-172 linux-amd64]# kubectl create -f rbac-config-tile.yaml

5.2.3 安装tillerserver
helm init 
可以使用自动安装

helm init  --stable-repo-url https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts

# --skip-refresh 避免更新本地helm repo 缓存,因为一会儿要替换为阿里的repo
# --skip-refresh  do not refresh (download) the local repository cachehelm init --skip-refresh --tiller-image=sapcc/tiller:v2.12.1 --service-account=tiller
# 检查一下是不是安装成功了kubectl get pods -n kube-system | grep tiller
helm init --upgrade --service-account tiller --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.1

5.3. helm 状态信息

helm version      # 查看 helm 版本
helm repo list    # 查看仓库列表
helm repo update  # 更新仓库
helm list         # 查看 release 应用列表
tiller version    # 查看 tiller 版本

[root@hw-apptest01-11-172 ~]# helm version
Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
[root@hw-apptest01-11-172 ~]# tiller version
[main] 2019/05/27 12:06:49 Starting Tiller v2.13.1 (tls=false)
[main] 2019/05/27 12:06:49 GRPC listening on :44134
[main] 2019/05/27 12:06:49 Probes listening on :44135
[main] 2019/05/27 12:06:49 Storage driver is ConfigMap
[main] 2019/05/27 12:06:49 Max history per release is 0

5.4. helm 添加chart 仓库源

获取镜像列表

helm repo list

添加镜像仓库地址(镜像需要进行校验,官方仓库国内访问不到):

# helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com/
"incubator" has been added to your repositories

helm repo remove stable
helm repo add stable-ali https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts/

helm fetch kiwigrid/fluentd-elasticsearch
	
[root@hw-apptest01-11-172 ~]# helm  repo list
NAME      	URL                                                                      
local     	http://127.0.0.1:8879/charts                                             
incubator 	https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
kiwigrid  	https://kiwigrid.github.io                                               
stable-ali	https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts/  

5.5. helm 获取chart文件

helm search 应用
helm fetch charts仓库/包名

helm search mysql

5.6. helm 安装应用程序

helm search 应用                                   # 搜索应用
helm install --name release名称  charts仓库/包名   # 默认配置安装应用
	
helm list                                          # 查看已安装应用(release)
	
helm status release名称                            # 查看应用状态信息
	
helm delete release名称 --purge                    # 删除应用,--purge 删除缓存信息,应用名等

# 在k8s上面运行应用,一般都需要进行定制化操作,我们可以先获取cart包,修改值文件,创建应用
	
helm fetch charts仓库/包名
	
vim ~/.helm/xxx/xxx/values.yml
	
helm install --name release名称 -f xxx/xxx/values.yml  charts仓库/包名


# 安装mysql
helm search mysql   #搜索mysql相关包
helm inspect stable/mysql   #查看mysql相关使用说明
helm install --name db-mysql --set mysqlRootPassword=anoyi  stable/mysql   #创建mysql应用,跟进使用说明添加参数
kubectl get pod   # 查看mysql pod

[root@hw-apptest01-11-172 ~]# kubectl get pod
NAME                             READY   STATUS             RESTARTS   AGE
db-mysql-mysql-8c8c48b67-4qmd2   0/1     Pending            0          7d23h


使用helm安装应用,我们先修改配置文件,然后进行应用安装启动。与yum等不同的是,yum安装应用遵循:安装–配置—启动。而helm是:配置—>安装启动

5.7. helm 执行本地chart文件应用安装

helm install --name release名称 -f 指定值文件路径  chart本地文件包路径.tgz
	
helm install --name kibtest -f ~/efk/kibana/values.yaml --namespace=efk ./kibana.tgz 
	
helm upgrade kibtest -f values.yaml ~/.helm/repository/local/kibana.tgz

helm delete efk --purge
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐