天天看点

Kubernetes集群实践(07)使用ECK Operator部署Elastic相关简介安装ECK Operator部署ElasicSearch

题外话:当初为什么坚持使用k8s来实现现有业务,有个很强的推动就是原有的虚拟方式部署Elastic集群已经不能适应业务规模的扩展,在虚拟机上架设大规模的Elastic集群已经是噩梦般的存在。因此,下决心采用容器的方式进行部署。容器的方式进行部署,不但实现了快速部署,同时采用k8s进行编排,简化了elastic集群的运维。当然,架设完k8s集群后,就部署Elastic集群(有状态集合)是增加了难度,涉及服务器暴露,持久话存储,单还是可以一步步的解决的。

Operator 是由 CoreOS 开发的,用来扩展 Kubernetes API,特定的应用程序控制器,它用来创建、配置和管理复杂的有状态应用,如数据库、缓存和监控系统。Operator 基于 Kubernetes 的资源和控制器概念之上构建,但同时又包含了应用程序特定的领域知识。创建Operator 的关键是CRD(自定义资源)的设计。

Kubernetes 1.7 版本以来就引入了自定义控制器的概念,该功能可以让开发人员扩展添加新功能,更新现有的功能,并且可以自动执行一些管理任务,这些自定义的控制器就像 Kubernetes 原生的组件一样,Operator 直接使用 Kubernetes API进行开发,也就是说他们可以根据这些控制器内部编写的自定义规则来监控集群、更改 Pods/Services、对正在运行的应用进行扩缩容。

Elastic Cloud on Kubernetes简称ECK,其扩展了Kubernetes的基本编排功能,以支持Kubernetes上Elasticsearch,Kibana和APM Server的设置和管理。借助ECK可以简化所有关键操作:

管理监控多个集群

扩展缩小集群

变更集群配置

调度备份

使用TLS证书保护集群

采用区域感知实现hot-warm-cold架构

首先是离线文件和镜像的导入,下载好"all-in-one.yaml"文件及安装需要的docker镜像文件eck-operator:1.0.1(这里的版本号是我写这篇文章时的当前版本)。另外,顺便准备好elasticsearch和kibana的docker镜像,apm也有但此处我还不需要,所以我没有下载,具体下载地址可在dockhub里面查找、拉取,而后docker save \<image_name:version\> -o \<export_name.tar\>导出 。

如果没有镜像仓库,编排的时候默认文件没有指定在哪个物理节点上运行,所以在没有私有仓库的离线环境里,需要把上述镜像用docker load -i <镜像文件名.tar.gz>加载到所有节点中。

注意:elastic现有官方镜像只有amd64!

建议:为了以后的部署方便,还是架设一个私有镜像仓库,本人将在Kubernetes集群实践(07)来说明私有仓库的架设问题。

现有的物理环境中,我有一台华为E9000刀片服务器,配置了16个CH121 V5计算节点,该计算节点只有两个2.5寸的盘位,不能提供较大的存储空间。因此,我采用了将旁边的IP SAN的空间,划分成16个LUN后,分别挂载到16个CH121 V5节点上。(因为这个16个计算节点不是一个Linux集群,所以不能挂载一个大的共享LUN)每个CH121 V5使用挂载的空间做LocalPV,为ES的数据节点提供持久化存储。为何没有直接让Pod使用iSCSI,主要是我自己还没有搞定:(

编辑文件1-test-pv.yaml

编辑文件2-test-pvc.yaml,此处将pv和pvc的定义分开,便于PV和PVC单独操作(如在PV的回收策略为Retain时,只删除PVC)

对于master-volting只是选举主节点,自己不能被选为主节点,所以没有给它配持久存储。

编辑3-test-eck.yaml

说明:官方具体的安装可以参看https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-quickstart.html

服务暴露的方式使用前面架设的traefik,先编辑原来的traefik文件,还是以host端口映射(减小NAT开销)

kibana因为通过web访问,直接复用80端口。

编辑4-test-route.yaml

说明:服务端口和服务名可以通过以下命令查看

附:

NFS挂载错误

kibana节点不用持久化存储,但内部部署的模板和设置容易丢失,所以可以做一个持久化存储,且对存储的要求也不高,所以可以采用nfs这种简单的存储来实现,可能出现一个小问题:

原因就是备调度的pod在k8s的运行节点上找不到/sbin/mount.xxx,可以检查是否安装nfs组件,我使用的是centos7需要运行以下命令来安装

对于kibana挂载持久化存储,以下是我的配置文件

PVC无法删除问题

一般删除步骤为:先删pod再删pvc最后删pv,但是遇到pv始终处于“Terminating”状态,而且delete不掉。

解决方法:

直接删除k8s中的记录:

参考信息:

This happens when persistent volume is protected. You should be able to cross verify this:

Command:

Output:

You can fix this by setting finalizers to null using kubectl patch:

继续阅读