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,而在k8shostname即为当前的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的安装部署后面安排,读者如果有需要可以查阅相关资料先行部署。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐