上一节说到了ECK落地的26个关键问题,这一节将对这26个关键点的实施进行详细的说明,并给出符合业务的合理建议。
另外如果你认真看了上一节提到的26个关键问题,并且也对这些关键点表示认同的话,本节一定要细细品鉴,我自认为可以让你收获巨大。
部署Elasticsearch
Elasticserch 样例
在正式开始之前,首先通过官方的示例来创建Elasticsearch集群,简单了解下大概的流程。
cat <<EOF | kubectl apply -f -
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
name: quickstart
spec:
version: 8.10.3
nodeSets:
- name: default
count: 1
config:
node.store.allow_mmap: false
EOF
观察es服务的启动情况
kubectl get pod | grep es
kubectl get es
至此,一个简单的Es集群就在K8S集群中跑起来了。
但是,这远远还不够,真真在生产环境中使用还会涉及到很多问题,这里先简单描述下现有环境以及需要兼容的问题。
Elasticserch历史环境及痛点
说明 | 痛点 | |
---|---|---|
环境 | 存在测试、开发、灰度、生产等多套环境 | 环境复杂,维护成本较高 |
部署方式 | ansible方式部署、采用Ecs+数据云盘方式 | 有部署门槛,资源碎片严重,维护成本较高 |
数据管理方式 | 数据云盘 | 扩容、更换都需要手动操作 |
流量接入 | 直连IP + 默认端口 | 方式不统一、对业务透明度差 |
Elasticsearch认证 | 无认证 | 不安全 |
集群版本 | 6+、7+ | 版本不统一、多个小版本存在 |
进程管理方式 | 无 | 依赖告警发现进程问题, 无法自愈 |
配置管理 | 无 | 配置混乱,无法复用 |
根据现有服务现状以及痛点问题, 通过容器化一次性解决,接下来对关键点问题逐步处理,给出合理方案。
关键问题点方案落地
推进ES服务容器化的过程中,并且对现有的痛点问题进行优化,确认了如下方案。
痛点 | 解决方案 | |
---|---|---|
环境 | 环境复杂,维护成本较高 | 使用现有k8s集群,每个环境选取一个集群,独立资源池作为ES服务的统一部署。 |
部署方式 | 有部署门槛,资源碎片严重,维护成本较高 | 合理规划资源池,减少碎片化资源,采用ECK统一部署、管理ES服务。 |
数据管理方式 | 扩容、更换都需要手动操作 | 通过挂载独立磁盘进行数据落盘,存算分离,平滑扩容。 |
流量接入 | 方式不统一、对业务透明度差 | 统一流量入口,统一域名接入服务,快速无感扩容。 |
Elasticsearch认证 | 不安全 | 均为内网调用,安全问题可以接受 |
集群版本 | 版本不统一、多个小版本存在 | 统一集群版本,只保留6.x、7.x 各一个版本,减少维护成本。 |
进程管理方式 | 依赖告警发现进程问题, 无法自愈 | 采用K8S集群对服务生命周期进行管理 |
配置管理 | 配置混乱,无法复用 | gitlab管理集群配置, 方便后期集群的自动化部署。 |
ES集群是否启动TLS/ES是否启动认证
通过ECK方式启动的集群默认会开启TLS,用户在访问时需要通过证书连接。基于现有网络环境及当前的使用方式,决定维持现有状态关闭TLS和认证,在配置文件中增加下面2处配置即可。
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
name: quickstart
namespace: elasticsearch
spec:
version: 7.13.0
http: # 指定协议类型
tls:
selfSignedCertificate:
disabled: true
nodeSets:
- name: default
count: 1
config:
node.store.allow_mmap: false
xpack.security.enabled: false # 关闭xpack认证
具体配置管理方式及逻辑可以参考源码进行分析,参考文档:https://blog.csdn.net/u012881331/article/details/133925528?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22133925528%22%2C%22source%22%3A%22u012881331%22%7D
ES节点角色拆分方式
序号 | 项目 |
---|---|
1 | ES集群是否启动TLS |
2 | ES是否启动认证 |
3 | ES节点角色拆分方式 |
4 | ES健康检查设置检测协议 |
5 | kibana关闭https |
6 | ECK方式加入现有ES集群 |
7 | ECK、ECS共存集群读写数据 |
8 | ECK安装ES插件 |
9 | 集群数据无损迁移 |
10 | 模拟pod异常恢复流程 |
11 | 模拟宿主机异常 |
12 | 验证数据盘随pod销毁时释放 |
13 | 已有ECK增加ES角色 |
14 | ES镜像私有化 |
15 | 容器亲和性策略 |
16 | ES节点扩缩容 |
17 | 磁盘扩缩容 |
18 | 流量接入 |
19 | 多环境划分 |
20 | 成本归属 |
21 | 集群配置更新策略 |
22 | kibana集群访问方式 |
23 | 节点规格规划 |
24 | 节点绑定 |
25 | 数据盘选型 |
26 | 配置管理 |
参考文档
官方安装文档:https://www.elastic.co/guide/en/cloud-on-k8s/2.8/k8s-deploy-eck.html