Kubesphere搭建ElasticSearch集群
我们要在kubesphere部署三个节点的ElasticSearch集群(以下简称es集群),一个master节点,两个data节点。在部署前需要编辑ElasticSearch的配置文件,由于node.name唯一,而在编写配置文件时我们可以不指定node.name,使其使用当前主机的hostname,而在k8s中hostname即为当前的podname,并且采用创建有状态副本集的工作负载来同步创
Author:think
参考文章:KubeSphere - 搭建 elasticsearch集群 及 kibana_kubersphere 集群安装elasticsearch_小毕超的博客-CSDN博客
环境信息
版本信息
-
Kubernetes v1.22.12
-
KubeSphere v3.3.2
-
ElasticSearch docker镜像:elasticsearch:8.9.1
前言
我们要部署三个节点的ElasticSearch集群(以下简称es集群),一个master
节点,两个data
节点。
在部署前需要编辑ElasticSearch的配置文件——elasticsearch.yml
,由于elasticsearch.yml
文件中要求节点名称:node.name
唯一,而在编写配置文件时我们可以不指定node.name
,使其使用当前主机的hostname
,而在k8s
中hostname
即为当前的podname
,并且采用创建有状态副本集
的工作负载
来同步创建Headless Service
,以此来通过Headless
的DNS服务来完成节点间的通信。
部署
一、创建项目
可以创建一个新的项目,也可以使用原有的项目。
项目创建完成。
二、配置elasticsearch.yml
配置字典
键填写elasticsearch.yml
;
值填写如下配置信息:
#集群名称
cluster.name: cluster-es
#节点名称,每个节点的名称不能重复,这里不指定,使用当前主机的名称
#node.name:
#ip 地址,每个节点的地址不能重复
network.host: 0.0.0.0
#节点角色,7.9版本之后的配置方法
node.roles: [ master , data ]
http.port: 9200
#节点通信端口
transport.port: 9300
# head 插件需要这打开这两个配置,解决跨域问题
http.cors.allow-origin: "*"
http.cors.enabled: true
http.max_content_length: 200mb
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举 master
cluster.initial_master_nodes: ["elasticsearch-0"]
#es7.x 之后新增的配置,节点发现
discovery.seed_hosts: ["elasticsearch-0.elasticsearch.elasticsearch-project.svc.cluster.local:9300","elasticsearch-1.elasticsearch.elasticsearch-project.svc.cluster.local:9300","elasticsearch-2.elasticsearch.elasticsearch-project.svc.cluster.local:9300"]
gateway.recover_after_data_nodes: 2
network.tcp.keep_alive: true
network.tcp.no_delay: true
transport.compress: true
#关闭安全校验
xpack.security.enabled: false
#集群内同时启动的数据任务个数,默认是 2 个
cluster.routing.allocation.cluster_concurrent_rebalance: 16
#添加或删除节点及负载均衡时并发恢复的线程个数,默认 4 个
cluster.routing.allocation.node_concurrent_recoveries: 16
#初始化数据恢复时,并发恢复线程的个数,默认 4 个
cluster.routing.allocation.node_initial_primaries_recoveries: 16
注意:配置中的
discovery.seed_hosts
由于是有状态副本集
,因此会有容器组内
的通信域名
,格式如下:(podname).(headless server name).(namespace).svc.cluster.local
其中
podname
的格式为:创建服务时指定的容器名称-序号
- headless server name : 服务名称;
- namespace : 命名空间,这里是项目名称
三、应用负载-工作负载配置
3.1基本信息设置
3.2容器组设置
es使用的镜像为:elasticsearch:8.9.1
下滑进行环境变量以及时区的设置:
-
环境变量:
ES_JAVA_OPTS
-Xms556m -Xmx556m
这里是配置
JVM虚拟机
的参数,这个值是我测试过能够正常启动的,如果是256m
则是启动不了,如果读者遇到初始化内存不足
还可以调整此参数。
3.3 存储设置
注意这里使用持久卷声明模板
来创建持久卷,因此需要先配置持久卷声明模板
,并将该模板应用于工作负载中,为每一个容器都挂载一个独立的持久卷
。
- PVC名称前缀:
elasticsearch-pvc
- 挂载路径:
/usr/share/elasticsearch/data
作用是将上面定义的
elasticsearch.yml
配置文件挂载至容器中对容器进行初始化。
- 挂载路径:
/usr/share/elasticsearch/config/elasticsearch.yml
- 指定子路径:
elasticsearch.yml
指定特定键,如果设置字典的键就为
elasticsearch.yml
,可不指定。
容器组创建成功,但此时还不能组建成为集群,因为自动创建的服务名称
会带有一个随机的后缀
,从而造成各个节点间不能够正常通信,因此需要改动配置字典elasticsearch.yml
中的discovery.seed_hosts
配置。
四、修改配置字典来实现各节点之间的通信
4.1查看服务名称
4.2修改配置字典
注意: 这里
discovery.seed_hosts
里面节点host
地址中的server name
字段一定要和生成的服务名称保持一致
!读者根据实际情况做出修改。
4.3重新构建工作负载
弹出的提示框点击确定即可,等待重新构建容器组完成。
五、验证集群部署结果
在打开的终端窗口输入如下命令查看集群状态:
curl http://elasticsearch-0.elasticsearch-mm3m.elasticsearch-project.svc.cluster.local:9200/_cat/nodes?pretty
注意其中的
server name
字段值:elasticsearch-mm3m
可能和读者的不一样,因此需要根据实际做出修改。
六、写在最后
6.1存在的问题
在部署es集群的过程中发现存在有如下几类问题。
6.1.1关于版本
在参考文章中使用的kubesphere
版本与elasticsearch
都是2022年最新版本,但是到了2023年时,kubesphere
的操作方式以及elasticsearch
配置文件elasticsearch.yml
的配置项也存在有很大不同,尤其是elasticsearch.yml
的配置项改动比较大,因此如果出现容器无法启动运行或者集群无法组建,那么可以查看容器日志
中的报错信息,里面的提示信息还是比较全的,如果是配置项错误,那么es会有相关提示让修改成正确的配置项(正确的配置项名称会在日志中打印)。容器日志
的入口在容器终端
旁边。
6.1.2关于服务名的随机后缀
在填写节点发现配置项discovery.seed_hosts
时需要填写服务名称
,而在上面部署方式中会出现服务名称
随机后缀的问题,针对这个问题有两种解决方案:
- 如同上面的部署过程中提到的一样,完成工作负载的创建并且同步自动创建服务之后查看服务的名称,拿到新的服务名称之后去修改配置字典
elasticsearch.yml
中的服务名称
字段。 - 创建
工作负载
时,到了最后一步不直接点创建,而是先点击右上角的编辑YAML
修改server name
之后再创建工作负载,这样自动创建的服务名称
就是我们自定义的服务名称
。注意:这里编辑后的YAML配置
信息可以下载下来保存,之后再创建工作负载的时候只需要选择创建有状态副本集
,随后在基本信息编辑面板
点击编辑YAML
(如下图所示),并且将保存的YAML配置信息
填写进来直接点创建即可快速创建工作负载和服务
。
6.2向外暴露服务
如果我们需要从外部访问es的服务,则需要配置应用路由来进行映射,具体详情后面安排。
6.3可视化服务kibana
es可视化工具kibana
的安装部署后面安排,读者如果有需要可以查阅相关资料先行部署。
更多推荐
所有评论(0)