软件的安装,应用部署一直是比较具有挑战性的工作。在计算机发展过程中为了简化应用的部署,先后出现了软件包管理系统(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上面的应用商店。
k8s上面运行的最小运用程序是pod,但实质是一个或多个容器,容器有docker 镜像仓库提供。镜像仓库由: 官方docker hub仓库,各个加速站点,第三方/私用仓库等组成。
k8s 上运行应用除了pod外,还有pod的控制器,负载均衡的server等,而无论是通过kubectl命令还是使用yaml文件的方式,都是通过apiserver转换为k8s可以识别的json格式的配置清单。也就是说k8s上面运行应用,需要docker镜像和配置清单。helm 就是提高我们各个应用所需要的配置清单文件。
helm 通过提供配置清单的模板文件chart,使得我们部署k8s应用更加简单,只需安装需要修改相关配置值文件,即可快速部署一个k8s应用release。
helm 维护本地和远程的chart仓库,chart包含多种配置清单模板和值文件。和yum不同的是helm不包含镜像文件。
chart: 一个helm程序包,包含docker容器引用的清单文件,资源定义等模板文件,值文件
chartRepository chart仓库,http服务器,可以通过仓库下载chart文件
release: chart实例的部署实例。属性文件赋值后运行与k8s 之上的应用资源
chart ---> config ---> release
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角色绑定。
图:
chart repo
helm tiller apiserver
- 官网:helm.sh
- GitHub:github.com/helm/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
tiller server 是helm的服务端,是k8s apiserver的客户端。helm 通过tiller server 获取chart仓库的chart模板文件,通过对value文件的复制,使用tiller server 向apiserver发送资源管理请求,从而生成release。
[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
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
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
获取镜像列表
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/
helm search 应用
helm fetch charts仓库/包名
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是:配置—>安装启动
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