【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.mzph.cn/diannao/46785.shtml

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

相关文章

在线工具--将Json结构映射为另外一种Json结构

具体请前往:在线工具-将json结构映射为另外一个json结构

如何在电磁仿真软件CST中设置自由边界?

CST中的默认仿真边界是六面体,那如果想要设置自由边界,应该怎么做呢?下面以一个简单例子说明设置自由边界的方法。(1)想要实现自由边界需要在六面体内做填充,首先根据需要创建一个形状,本例中想…

ZBrush入门使用介绍——1、基本操作

大家好,我是阿赵。   这期开始介绍一下ZBrush的用法。   ZBrush作为一个老牌的雕刻模型软件,已经有很多年的历史了。阿赵我接触它已经是将近20年前在首都师范大学学习三维影视课程的时候了。当时老师讲得比较随便,所以后来自己又找了一些…

Armv8-R内存模型详解

目录 1.内存模型的必要性 2.Armv8-R内存模型分类 2.1 Normal memory 2.2 Device Memory 2.2.1 Gathering 2.2.2 Reordering 2.2.3 Early Write Acknowledgement 3.小结 大家好,今天是悲伤的肌肉。 在调研区域控制器芯片时,发现了S32Z、Stellar …

AI Earth——MuSyQ 30m/10天叶片叶绿素含量产品(中国)应用 app

应用介绍 ​​​​​​​30m/10天合成的叶片叶绿素含量产品是空天院多源协同定量遥感产品生产系统((Multi-source data Synergized Quantitative remote sensing production system,MuSyQ))产品之一。 叶片叶绿素含量(Chlleaf)是植被遥感监测中最重要的参数之一,目前国…

记录我使用poi库,中文却无法显示的问题

目录 前言: 正片: 修改word的编码格式 第一步: 第二步: 第三步: 第四步: 第五步: 修改idea编码格式 前言: 🎈🎈🎈这是昨天晚上Blue遇到的…

WooCommerce网站加速指南:入门级方法

在如今快节奏的网络时代,网站加载速度直接影响用户体验和销售转化率。对于WooCommerce网站来说,这一点尤为重要。那么,如何让你的网站跑得更快呢?下面,我将分享一些入门级的方法,帮助你显著提升WooCommerce…

JVM之运行时数据区(一):程序计数器+本地方法栈

JVM之运行时数据区(一):程序计数器本地方法栈 1.运行时数据区概述2.程序计数器作用特点常见问题 3.本地方法接口本地方法本地接口 4.本地方法栈特点 1.运行时数据区概述 Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区其中有一些…

物联网平台定义和架构

物联网平台是一个集成了设备接入、设备管理、数据安全通信、消息订阅、消息转发和数据服务等能力的一体化平台。它支持海量设备的连接,采集设备数据上云,同时提供云端API,使服务端可以通过云端SDK调用云端API将指令下发至设备端,实…

手机和电脑通过TCP传输(一)

一.工具 手机端:网络调试精灵 电脑端:野火网络调试助手 在开始通信之前,千万要查看一下电脑的防火墙是否关闭,否则可能会无法通信 在开始通信之前,千万要查看一下电脑的防火墙是否关闭,否则可能会无法通信…

大气热力学(10)——条件性不稳定

本篇文章源自我在 2021 年暑假自学大气物理相关知识时手写的笔记,现转化为电子版本以作存档。相较于手写笔记,电子版的部分内容有补充和修改。笔记内容大部分为公式的推导过程。 文章目录 10.1 为什么需要关注条件性不稳定?10.2 不稳定能量10…

使用自制Qt工具配合mitmproxy进行网络调试

在软件开发和网络调试过程中,抓包工具是不可或缺的。传统的抓包工具如Fiddler或Charles Proxy通常需要设置系统代理,这会抓到其他应用程序的网络连接,需要设置繁琐的过滤,导致不必要的干扰。为了解决这个问题,我们可以…

树结构添加分组,向上向下添加同级,添加子级

树结构添加分组&#xff0c;向上向下添加同级&#xff0c;添加子级 效果代码实现页面js 效果 代码实现 页面 <el-tree :data"treeData" :props"defaultProps" :expand-on-click-node"false":filter-node-method"filterNode" :ref&…

IP-Guard日志数据上传至 SYSLOG 服务器操作指南

一、功能简介 服务器支持把日志数据上传到 SYSLOG 服务器。 二、功能配置 2.1 数据目录移交设置 在服务器安装目录下 OServer3.ini 文件中&#xff0c;添加工具启动配置&#xff0c;配置五分钟内生效。 Path&#xff1a;设置移交目录路径&#xff0c;IPG 服务器会把收集完成的…

六西格玛培训:控制图——洞察过程真相的利器

在追求卓越绩效与持续质量改进的征途中&#xff0c;六西格玛无疑是企业不可或缺的导航灯。作为一套严谨而系统的管理方法&#xff0c;六西格玛不仅帮助企业识别并减少过程中的变异与缺陷&#xff0c;还促进了流程的优化与创新。而在这套强大的方法论中&#xff0c;控制图作为核…

【postgresql】角色(Role)

PostgreSQL 中&#xff0c;角色&#xff08;Role&#xff09;是一个重要的概念&#xff0c;用于管理数据库的访问权限和用户身份。角色可以被视为用户或组&#xff0c;具体取决于它们的配置方。 角色属性 角色可以具有多种属性&#xff1a; LOGIN&#xff1a;允许角色登录数据…

Floyd算法——AcWing 343. 排序

目录 Floyd算法 定义 运用情况 注意事项 解题思路 基本步骤 AcWing 343. 排序 题目描述 运行代码 代码思路 改进思路 Floyd算法 定义 Floyd算法&#xff0c;全称Floyd-Warshall算法&#xff0c;是一种用于解决图中所有顶点对之间的最短路径问题的动态规划算法。…

基于java+springboot+vue实现的实验室管理系统(文末源码+Lw)127

基于SpringBootVue的实现的实验室管理系统&#xff08;源码数据库万字Lun文流程图ER图结构图演示视频软件包&#xff09; 系统功能&#xff1a; 实验室管理系统 管理员功能有个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;公告信息管理&#xff0c;知识库管理…

杭州高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

杭州高校大学智能制造数字孪生技术作为智能制造的重要支撑&#xff0c;通过构建虚拟世界的镜像&#xff0c;实现对物理世界的实时监控、预测和优化。杭州高校大学智能制造实验室数字孪生可视化系统平台建设项目&#xff0c;旨在通过引入先进的数字孪生技术&#xff0c;构建一个…

ESP32-S3多模态交互方案在线AI语音设备应用,启明云端乐鑫代理商

随着物联网&#xff08;IoT&#xff09;和人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;嵌入式设备正逐渐变得智能化&#xff0c;让我们的家庭生活变得更加智能化和个性化。 随着大型语言模型的不断进步和优化&#xff0c;AI语音机器人设备能够实现更加智能、…