【k8s部署elasticsearch】k8s环境下安装elasticsearch集群和kibana

文章目录

      • 简介
      • 一.条件及环境说明
      • 二.需求说明
      • 三.实现原理及说明
      • 四.详细步骤
        • 4.1.规划节点标签
        • 4.2.创建三个statefulset和service headless配置
        • 4.3.创建service配置
      • 五.安装kibana
      • 六.调整索引分区
      • 七.安装说明

简介

k8s集群中搭建有elasticsearch服务一般都会用到pvc,但是考虑到有些自建k8s环境下,搭建的共享存储可能会存在稳定性及性能问题,所以这次是通过采用节点亲和性和hostpath来实现,目前的operator的基本都是采用共享存储的方法。本文将根据现有环境及不同需求将elasticsearch集群的搭建采用hostpath+亲和性的权重+多个副本分区的方式来实现数据持久化和高可用。

一.条件及环境说明

k8s版本k8s-1.29.4,环境搭建在电信机房,六个worker节点,每个节点有一块非系统盘的ssd盘挂载到/data/路径,不采用ceph或nas之类的共享存储,也未采用operator。

二.需求说明

  • 搭建三个节点的elasticsearch集群,并配置三个主分区,2个副本分区。
  • 高可用:有一个k8s节点长期故障后或重启pod之后也不影响使用。
  • 高性能:读写本地磁盘实现高性能的io,共享存储如果资源及硬件性能不够的话,io将会是性能瓶颈。
  • 数据安全:在发生切换,节点故障以后,数据要尽可能的保证完整
  • 安装简单、管理维护容易

三.实现原理及说明

四.详细步骤

4.1.规划节点标签
节点名称角色标签
k8s-worker-120-81storage-selector=node-a-master
k8s-worker-120-82storage-selector=node-b-master
k8s-worker-120-83storage-selector=node-c-master
k8s-worker-120-84storage-selector=node-a-slve
k8s-worker-120-85storage-selector=node-a-slve
k8s-worker-120-86storage-selector=node-a-slve

注:这里的角色划分是指:redis由于是一主两从,每个redis的pod分别落在三个主的节点上,当主节点发生故障是,就切换到备节点,例如:名称为autopocket-es-a-0的pod,默认落在标签为storage-selector=node-a-master的节点上,当该节点发生故障是,就会根据权重匹配罗在storage-selector=node-a-slve的节点上。

4.2.创建三个statefulset和service headless配置

1.elasticsearch_a.yaml 节点a的statuflset配置和无头服务配置

apiVersion: apps/v1
kind: StatefulSet
metadata:name: autopocket-es-anamespace: zx-applabels:app: autopocket-es-a appname: pcauto-pocketappgroup: autopocket-es
spec:serviceName: "autopocket-es-a"replicas: 1 selector:matchLabels:app: autopocket-es-aappgroup: autopocket-estemplate:metadata:labels:app: autopocket-es-aappgroup: autopocket-esspec:affinity:nodeAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 80preference:matchExpressions:- key: storage-selector operator: Invalues:- node-a-master- weight: 20preference:matchExpressions:- key: storage-selector operator: Invalues:- node-a-slavecontainers:- name: elasticsearchimage: "xxx.cn-shenzhen.cr.aliyuncs.com/public/elasticsearch:7.17.22"command: ["/bin/sh","-c"]args:- mkdir -p /home/elastic/${POD_NAME}/data /home/elastic/${POD_NAME}/logs;chown elasticsearch.elasticsearch -R /home/elastic;su elasticsearch -c "/usr/share/elasticsearch/bin/elasticsearch"env:- name: cluster.namevalue: autopocket-es - name: K8S_SERVICE_NAMEvalue: autopocket-es-a - name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: discovery.seed_hostsvalue: "autopocket-es-a-0.autopocket-es-a.$(POD_NAMESPACE).svc.cluster.local,autopocket-es-b-0.autopocket-es-b.$(POD_NAMESPACE).svc.cluster.local,autopocket-es-c-0.autopocket-es-c.$(POD_NAMESPACE).svc.cluster.local"- name: cluster.initial_master_nodesvalue: "autopocket-es-a-0.autopocket-es-a.$(POD_NAMESPACE).svc.cluster.local"- name: node.namevalue: $(POD_NAME).$(K8S_SERVICE_NAME).$(POD_NAMESPACE).svc.cluster.local - name: path.datavalue: /home/elastic/$(POD_NAME)/data- name: path.logsvalue: /home/elastic/$(POD_NAME)/logs- name: xpack.security.enabledvalue: "false"ports:- name: restcontainerPort: 9200- name: inter-nodecontainerPort: 9300volumeMounts:- name: elasticsearch-datamountPath: /home/elasticrestartPolicy: AlwaysterminationGracePeriodSeconds: 30volumes:- name: elasticsearch-data hostPath:path: /data/es_datatype: ""tolerations:- key: node.kubernetes.io/not-readyoperator: Existseffect: NoExecutetolerationSeconds: 3600- key: node.kubernetes.io/unreachableoperator: Existseffect: NoExecutetolerationSeconds: 3600
---
apiVersion: v1
kind: Service
metadata:name: autopocket-es-anamespace: zx-applabels:appname: pcauto-pocketapp: autopocket-es-a
spec:ports:- port: 9200name: rest- port: 9300name: inter-nodeclusterIP: Noneselector:app: autopocket-es-a

2.elasticsearch_b.yaml 节点b的statuflset配置和无头服务配置

apiVersion: apps/v1
kind: StatefulSet
metadata:name: autopocket-es-bnamespace: zx-applabels:app: autopocket-es-b appname: pcauto-pocketappgroup: autopocket-es
spec:serviceName: "autopocket-es-b"replicas: 1 selector:matchLabels:app: autopocket-es-bappgroup: autopocket-estemplate:metadata:labels:app: autopocket-es-bappgroup: autopocket-esspec:affinity:nodeAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 80preference:matchExpressions:- key: storage-selector operator: Invalues:- node-b-master- weight: 20preference:matchExpressions:- key: storage-selector operator: Invalues:- node-b-slavecontainers:- name: elasticsearchimage: "xxx.cn-shenzhen.cr.aliyuncs.com/public/elasticsearch:7.17.22"command: ["/bin/sh","-c"]args:- mkdir -p /home/elastic/${POD_NAME}/data /home/elastic/${POD_NAME}/logs;chown elasticsearch.elasticsearch -R /home/elastic;su elasticsearch -c "/usr/share/elasticsearch/bin/elasticsearch"env:- name: cluster.namevalue: autopocket-es - name: K8S_SERVICE_NAMEvalue: autopocket-es-b - name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: discovery.seed_hostsvalue: "autopocket-es-a-0.autopocket-es-a.$(POD_NAMESPACE).svc.cluster.local,autopocket-es-b-0.autopocket-es-b.$(POD_NAMESPACE).svc.cluster.local,autopocket-es-c-0.autopocket-es-c.$(POD_NAMESPACE).svc.cluster.local"- name: cluster.initial_master_nodesvalue: "autopocket-es-a-0.autopocket-es-a.$(POD_NAMESPACE).svc.cluster.local"- name: node.namevalue: $(POD_NAME).$(K8S_SERVICE_NAME).$(POD_NAMESPACE).svc.cluster.local - name: path.datavalue: /home/elastic/$(POD_NAME)/data- name: path.logsvalue: /home/elastic/$(POD_NAME)/logs- name: xpack.security.enabledvalue: "false"ports:- name: restcontainerPort: 9200- name: inter-nodecontainerPort: 9300volumeMounts:- name: elasticsearch-datamountPath: /home/elasticrestartPolicy: AlwaysterminationGracePeriodSeconds: 30volumes:- name: elasticsearch-data hostPath:path: /data/es_datatype: ""tolerations:- key: node.kubernetes.io/not-readyoperator: Existseffect: NoExecutetolerationSeconds: 3600- key: node.kubernetes.io/unreachableoperator: Existseffect: NoExecutetolerationSeconds: 3600
---
apiVersion: v1
kind: Service
metadata:name: autopocket-es-bnamespace: zx-applabels:appname: pcauto-pocketapp: autopocket-es-b
spec:ports:- port: 9200name: rest- port: 9300name: inter-nodeclusterIP: Noneselector:app: autopocket-es-b

3.elasticsearch_c.yaml 节点c的statuflset配置和无头服务配置

apiVersion: apps/v1
kind: StatefulSet
metadata:name: autopocket-es-cnamespace: zx-applabels:app: autopocket-es-c appname: pcauto-pocketappgroup: autopocket-es
spec:serviceName: "autopocket-es-c"replicas: 1 selector:matchLabels:app: autopocket-es-cappgroup: autopocket-estemplate:metadata:labels:app: autopocket-es-cappgroup: autopocket-esspec:affinity:nodeAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 80preference:matchExpressions:- key: storage-selector operator: Invalues:- node-c-master- weight: 20preference:matchExpressions:- key: storage-selector operator: Invalues:- node-c-slavecontainers:- name: elasticsearchimage: "xxx.cn-shenzhen.cr.aliyuncs.com/public/elasticsearch:7.17.22"command: ["/bin/sh","-c"]args:- mkdir -p /home/elastic/${POD_NAME}/data /home/elastic/${POD_NAME}/logs;chown elasticsearch.elasticsearch -R /home/elastic;su elasticsearch -c "/usr/share/elasticsearch/bin/elasticsearch"env:- name: cluster.namevalue: autopocket-es - name: K8S_SERVICE_NAMEvalue: autopocket-es-c - name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: discovery.seed_hostsvalue: "autopocket-es-a-0.autopocket-es-a.$(POD_NAMESPACE).svc.cluster.local,autopocket-es-b-0.autopocket-es-b.$(POD_NAMESPACE).svc.cluster.local,autopocket-es-c-0.autopocket-es-c.$(POD_NAMESPACE).svc.cluster.local"- name: cluster.initial_master_nodesvalue: "autopocket-es-a-0.autopocket-es-a.$(POD_NAMESPACE).svc.cluster.local"- name: node.namevalue: $(POD_NAME).$(K8S_SERVICE_NAME).$(POD_NAMESPACE).svc.cluster.local - name: path.datavalue: /home/elastic/$(POD_NAME)/data- name: path.logsvalue: /home/elastic/$(POD_NAME)/logs- name: xpack.security.enabledvalue: "false"ports:- name: restcontainerPort: 9200- name: inter-nodecontainerPort: 9300volumeMounts:- name: elasticsearch-datamountPath: /home/elasticrestartPolicy: AlwaysterminationGracePeriodSeconds: 30volumes:- name: elasticsearch-data hostPath:path: /data/es_datatype: ""tolerations:- key: node.kubernetes.io/not-readyoperator: Existseffect: NoExecutetolerationSeconds: 3600- key: node.kubernetes.io/unreachableoperator: Existseffect: NoExecutetolerationSeconds: 3600
---
apiVersion: v1
kind: Service
metadata:name: autopocket-es-cnamespace: zx-applabels:appname: pcauto-pocketapp: autopocket-es-c
spec:ports:- port: 9200name: rest- port: 9300name: inter-nodeclusterIP: Noneselector:app: autopocket-es-c
4.3.创建service配置

给9200 9300配置一个service的代理服务,注意其中的selector是指向到appgroup,这是将三个statefulset定义了一个appgroup的标签。

apiVersion: v1
kind: Service
metadata:name: autopocket-esnamespace: zx-applabels:app: autopocket-esappname: pcauto-zx
spec:ports:- port: 9200name: rest- port: 9300name: inter-nodeselector:appgroup: autopocket-estype: LoadBalancer 

五.安装kibana

apiVersion: apps/v1
kind: Deployment
metadata:name: autopocket-es-kibananamespace: zx-applabels:app: autopocket-es-kibanaappname: pcauto-pocket
spec:replicas: 1selector:matchLabels:app: autopocket-es-kibanatemplate:metadata:labels:app: autopocket-es-kibanaspec:containers:- name: kibanaimage: "xxx.cn-shenzhen.cr.aliyuncs.com/public/kibana:7.17.22"ports:- containerPort: 5601env:- name: ELASTICSEARCH_HOSTSvalue: '["http://autopocket-es-a-0.autopocket-es-a:9200","http://autopocket-es-b-0.autopocket-es-b:9200","http://autopocket-es-c-0.autopocket-es-c:9200"]'
---
apiVersion: v1
kind: Service
metadata:name: autopocket-es-kibananamespace: zx-applabels:app: autopocket-es-kibanaappname: pcauto-pocket
spec:selector:app: autopocket-es-kibanaports:- port: 5601targetPort: 5601type: LoadBalancer

查看集群健康情况:http://10.16.xx.xx:9200/_cat/health?v

elasticsearch集群状态查看:http://10.16.1xx.xx:9200/_cat/nodes?v
在这里插入图片描述

索引状态查看:http://10.16.1xx.xx:9200/_cat/indices?v
在这里插入图片描述

kibana地址登录:http://10.16.1xx.xx:5601/app/home#/
在这里插入图片描述

六.调整索引分区

调整已存在索引的副本分区:curl -XPUT -H "Content-Type:application/json" -d '{"settings":{"number_of_replicas":2}}' 'http://10.16.xx.xx:9200/testindex/_settings'

调整集群最大分片数:curl -XPUT -H "Content-Type:application/json" http://10.16.xx.xx:9200/_cluster/settings -d '{"transient":{"cluster":{"max_shards_per_node":10000}}}'

调整默认主分片和副本分片数: curl -X PUT -H "Content-Type:application/json" -d '{"index_patterns":["*"],"settings":{"number_of_shards":3,"number_of_replicas":2}}' http://10.16.xx.xx:9200/_template/template_http_request_record

七.安装说明

  • 需要先在k8s的节点创建/data/es_data的路径来存放数据。
  • 使用配置前将配置中的autopocket替换成自己需要的命名,配置的命名空间为:zx-app,修改成自己的命名空间,appname为pcauto-pocket,修改成自己的应用名称,该标签也可以删除。
  • 配置中的镜像地址采用了私有的镜像地址,镜像是dockerhub上下载的elasticsearch:7.17.22 镜像到私有镜像仓库的,如果能直通外网的k8s可以直接用elasticsearch:7.17.22,kibana的镜像是kibana:7.17.22。否则配置一个可以通的镜像地址。
  • 默认没有配置用户名和密码。
  • 节点标签的命名规则若有更改需要在每个statefulset中的affinity: 中的标签名称进行修改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/377685.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux中运用xsync实现免密集群分发

一、前言 今天搭建了三台虚拟机的集群,在集群中部分操作在三台虚拟机上的操作都一致,为了提高效率,就需要配置xsync实现集群分发。 二、设置免密登录 1.生成公钥和私钥 ssh-keygen -t rsa一直敲回车,会生成两个文件&#xff0c…

观察者模式的实现

引言:观察者模式——程序中的“通信兵” 在现代战争中,通信是胜利的关键。信息力以网络、数据、算法、算力等为底层支撑,在现代战争中不断推动感知、决策、指控等各环节产生量变与质变。在软件架构中,观察者模式扮演着类似的角色…

Go:基本变量与数据类型

目录 前言 前期准备 环境配置: Hello World! 一、基本变量 1.1 声明变量 1.2 初始化变量 1.3 变量声明到初始化的过程 1.4 变量值交换 1.5 匿名变量 1.6 变量的作用域 二、数据类型 1.1 整型 1.2 浮点型 1.3 字符串 1.4 布尔类型 1.5 数据类型判断…

STM32(五):STM32指南者-按键控制灯开关实验

说明:源代码和教程可从野火处下载,本博客为了记录学习过程STM32(四):STM32指南者-跑马灯实验的基础上 一、采用轮询方式1、bsp_key.h2、bsp_key.c3、main.c 二、采用中断方式1、bsp_exti.h2、bsp_exti.c3、stm32f10x_i…

在VSCode上创建Vue项目详细教程

1.前期环境准备 搭建Vue项目使用的是Vue-cli 脚手架。前期环境需要准备Node.js环境,就像Java开发要依赖JDK环境一样。 1.1 Node.js环境配置 1)具体安装步骤操作即可: npm 安装教程_如何安装npm-CSDN博客文章浏览阅读836次。本文主要在Win…

uniapp 微信小程序根据后端返回的文件链接打开并保存到手机文件夹中【支持doc、docx、txt、xlsx等类型的文件】

项目场景: 我们在使用uniapp官方提供的uni.downloadFile以及uni.saveFile时,会发现这个文件下载的默认保存位置和我们预想的不太一样,容易找不到,而且没有提示,那么我们就需要把文件打开自己保存并且有提示保存到哪个…

linux进程周边知识——内核对硬件的管理——计算机世界的管理

前言:本节主要讲解内核也就是操作系统对于硬件的管理, 本节内容同样为进程的周边知识。 主要是关于软件方面, 和我的上一篇——冯诺依曼体系结构可以说是兄弟文章, 这篇文章主要是关于硬件方面。 两篇文章都是为学习进程做准备。但…

Databend 开源周报第 153 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend。 支持必须更改密码…

【人工智能】Transformers之Pipeline(二):自动语音识别(automatic-speech-recognition)

​​​​​​​ 目录 一、引言 二、自动语音识别(automatic-speech-recognition) 2.1 概述 2.2 技术原理 2.2.1 whisper模型 2.2.2 Wav2vec 2.0模型 2.3 pipeline参数 2.3.1 pipeline对象实例化参数​​​​​​​ 2.3.2 pipeline对象使用参数…

JavaScript 匿名函数

https://andi.cn/page/621568.html

css的三大特性

一、层叠性, 选择器的优先级

Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器

章节内容 上节我们完成了: ZNode的基本介绍ZNode节点类型的介绍事务ID的介绍ZNode实机测试效果 背景介绍 这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。 之前已经在 VM 虚拟机上搭建过一次&#xff…

FlinkErr:org/apache/hadoop/hive/ql/parse/SemanticException

在flink项目中跑 上面这段代码出现如下这个异常&#xff0c; java.lang.NoClassDefFoundError: org/apache/thrift/TException 加上下面这个依赖后不报错 <dependency> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId…

ORB_SLAM2 ORBSLAM2 Ubuntu18.04 ROS Melodic虚拟机镜像 下载

下图为build.sh和build_ros.sh的编译结果&#xff1a; 下面的视频是slam测试&#xff1a; orbslam2_test 下载地址&#xff08;付费资料&#xff0c;不能接受请勿浪费时间下载&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1BCl_egUbNjM4nHc4DX4hkw?pwd…

为什么渲染农场渲染的是帧,而不是视频?

在3D动画产业的壮阔画卷中&#xff0c;渲染农场作为幕后英雄&#xff0c;以其庞大的计算能力支撑起无数视觉奇观的诞生。这些由高性能计算机集群构成的系统&#xff0c;通过独特的逐帧渲染策略&#xff0c;解锁了单机难以企及的创作自由与效率。本文将深入剖析这一策略背后的逻…

FUSE使用总结

1.FUSE简介 由于近期一个项目用到FUSE实现一个文件系统&#xff0c;所以有一些使用FUSE的经验。现总结如下&#xff1a; FUSE&#xff08;Filesystem in Userspace&#xff09;是一个开源项目&#xff0c;它可以为用户提供编写用户态文件系统的接口。 运行架构如下&#xff1…

产品经理的AI大模型学习之旅

随着人工智能技术的飞速发展&#xff0c;大模型&#xff08;Large Language Models, LLMs&#xff09;正逐渐成为产品经理&#xff08;Product Manager, PM&#xff09;在产品开发过程中不可或缺的工具。大模型&#xff0c;尤其是语言模型&#xff0c;能够处理和理解自然语言&a…

GB35114控制信令认证流程

GB35114控制信令认证说明&#xff1a; 注册成功后,信令发送方与信令接收方进行交互时,采用基于带密钥的杂凑方式保障信令来源安 全&#xff61;对除REGISTER消息以外的消息做带密钥的杂凑&#xff61;启用Date字段,扩展信令消息头域,在头域中 增加 Note 字 段 (值 为 Digest…

【Python爬虫教程】第7篇-requests模块的cookies保存和使用

文章目录 为什么要保存cookiesrequests.utils工具类保存cookies到本地文件从本地文件解析cookies使用使用实践 为什么要保存cookies 保存cookies是避免每次都登录获取权限&#xff0c;一遍权限是有过期时间的&#xff0c;不需要每次重复登录&#xff0c;可以将cookies保存起来…

【Web服务与Web应用开发】【C#】VS2019 创建ASP.NET Web应用程序,以使用WCF服务

目录 0.简介 1.环境 2.知识点 3.详细过程 1&#xff09;创建空项目 2&#xff09;添加Web表单 3&#xff09;使用Web表单的GUI设计 4&#xff09;添加服务引用 5&#xff09;在Web的button函数中调用服务&#xff0c;获取PI值 6&#xff09;测试 0.简介 本文属于一个…