原 荐 基于Kubernetes的ESaaS

概述

ESaaS(ElasticSearch as a Service)是ElasticSearch on Kubernetes的产品实现,是利用DockerKubernetes等容器虚拟化和编排调度系统,将ElasticSearch抽象为CaaS(Container as a Service)平台上的一种服务,实现秒级创建和扩缩容一个用户自定义的ElasticSerach集群,并且保证高可用和数据安全等方面。

关键组件

  • ElasticSearch 2.x
  • Kubernetes 1.9
  • Docker 1.12.6

解决的痛点:

  • ES集群初始化部署周期长,从申请服务器到交付,可能需要数天。
  • 部署过程自动化程度不高,开发测试环境中纯手动部署,线上半自动化部署,经常出错需要调测环境。
  • 集群的扩容也是人为操作,效率低且容易犯错。
  • ES服务器经常面临资源浪费的情况。
  • 各种插件的安装麻烦,并且有些需要重启节点,人为操作不当会带来风险。
  • 没有提供完善的ES集群和服务器的监控告警方案。
  • 没有提供配套的Kibana服务,人工部署Kibana并对接ES效率低。
  • ES集群之间没做资源隔离,机架机柜的物理隔离等。
  • 没有接入日志系统,查看系统和ES集群日志很不方便。

目标

  • 集群统一管理Portal,提供ES集群自助申请和集群信息看板;
  • 提供用户配额管理;
  • 秒级扩容缩容;
  • 完整的平台和ES集群监控和告警能力;
  • 提供统一的ES集群配置修改入口;
  • 外围插件的自助部署;
  • 节点的自助安全重启等;

架构

高可用部署架构

必要说明

  • ESaaS Portal提供用户云上自助申请ES集群和运维的入口,ESaaS做好相关业务逻辑能力,最终调用后端Kubernetes API进行ES集群的创建和管理;ESaaS Portal要求对接权限管理系统,进行用户登录验证和权限控制;
  • 为了保证ElasticSearch集群的高可用,在开发测试环境,要求同一个ES集群的同一个role(比如client/master/data)的ES nodes不能有多个部署在同一台服务器上;在生产环境,以上情况则要求跨机架部署;
  • ES集群在Kubernetes中目前均考虑使用本地存储,不用分布式存储;
  • ES集群的data node Pod需要挂载两个hostpath volume,分别为存储data的data volume和存储ES plugin的plugin volume,对应服务器上的hostpath /es/$cluser-name/data/data/es/$cluser-name/data/plugin;
  • ES集群的master和client node Pod需要挂载一个hostpath volume,存储ES plugin的plugin volume,对应服务器上的hostpath /es/$cluser-name/client(or master)/plugin;
  • ESaaS平台提供Apache httpd服务用于托管常用插件,称为ES Plugin Repository,目前优先考虑托管jar类型plugin。某个ES集群要给某个或者某些ES nodes安装jar plugins时,将从ES Plugin Repository中下载plugin文件到对应的/es/$cluser-name/client(or data,master)/plugin;

逻辑架构

必要说明

  • 每个ES集群的data nodes的部署通过一个Kubernetes StatefulSet来管理;
  • 每个ES集群的master nodes的部署通过一个Kubernetes Deployment来管理,并通过一个Kubernetes Headless Service来做master nodes的反向代理,这样在KubeDNS中该Headless Service Name对应解析到每个ES master nodes Pod的IP地址;
  • 每个ES集群的client nodes的部署通过Kubernetes Deployment来管理,并通过一个Kubernetes NodePort Service来做client nodes的反向代理(后续ES集群数多了后,考虑使用Ingress Nginx来代理ES client),每个ES集群对外暴露$Client-IP:$NodePort;
  • 同一个ES集群中所有nodes的elasticsearch.yml均使用如下规则的部分配置: cluster.name: "elasticsearch-${NAMESPACE}" node.name: "${POD_NAME}-${NAMESPACE}" network.host: ${POD_IP} # hosts填写ES master的Headless Service Name discovery.zen.ping.unicast.hosts: “es-${NAMESPACE}”

在下一篇博文 ESaaS架构及实现细节(二) 中将介绍这个方案需要注意和考虑的关键实现细节,内容涉及二十多项。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏bboysoul

vmware workstation 安装macos 10.13

说实在的,如果我有钱,早就换苹果了,macos真的是一个好系统,但是没钱,实话没钱只能使用linux。windows?windows是什么东西?我没有听说过。今...

17920
来自专栏三木的博客

基于Linux与lpc3250开发板的交叉开发环境搭建

###一、Bootloader的安装(在windows下进行) 1、什么是Bootloader: 要想弄明白什么是Bootloader,我们先从PC上的boot...

23880
来自专栏达摩兵的技术空间

mac总是卡死折腾记

如果你确认你mac是硬件ok,但是在某些程序运行的时候导致内存飙升,比如最明显吃内存的chrome,这时候可能就是你内存分配的一些问题,近期我就根据apple ...

18440
来自专栏FreeBuf

打狗棒法之:Cknife(C刀)自定义模式秒过安全狗

免责声明:本站提供安全工具、程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! 0x00 前言 很多朋友在使用Cknife时都误以为她只是菜刀的跨平...

40780
来自专栏杨建荣的学习笔记

从零开始搭建Nginx和Tomcat的web集群环境

一直以来对于web服务器对tomcat还是很熟悉了,但是很对于nginx还是有些陌生,一看到nginx的配置就让人有一种莫名的排斥,这就是对于陌生的恐惧,我们今...

40850
来自专栏自由而无用的灵魂的碎碎念

最近几天玩freebsd奋斗成果总结

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/

14120
来自专栏Linux启动过程

基于Linux的pc启动过程

作为一个Android开发者,了解整个系统架构是必须的,所以这篇就总结一下Android手机从按下开机键到启动这一过程发生了什么。

24000
来自专栏区块链

邮箱自身系统安全的防御部署实践

前面几期我们介绍的是发现邮箱安全问题和分析问题,本期我们介绍一下邮箱系统安全防御及加固手段,可以重点解决邮箱系统通用应用漏洞缺陷防护和邮箱反入侵问题。为解决邮箱...

29250
来自专栏生信技能树

R包终极解决方案

写在前面: 在如何通过Google来使用ggplot2可视化这篇文章中,我们曾经介绍过R语言在生物信息学中的重要性。 这篇文章也激发了很多小伙伴学习的热情。学习...

83870
来自专栏吴伟祥

Linux 远程登录:Xshell、SecureCRT、Putty

       Alt + Enter -- 全屏   Alt + B --打开新的连接   Alt + 1/2/3/4/5.../9 -- 切换到第1/2/...

1.4K20

扫码关注云+社区

领取腾讯云代金券