当前位置: 首页 > news >正文

elasticsearch7.x在k8s中的部署

一、说明

二、思路

三、部署

1、建nfs服务器

2、建持久卷

3、部署elasticsearch

四、附件

?pv.yaml内容

elasticsearch.yaml内容


一、说明

本文章内容主要的参考来源是https://www.cnblogs.com/javashop-docs/p/12410845.html,但参考文献中的elasticsearch是用的6.x版本,7.x与6.x有些配置上的差异,因此有必要在此基础上记录一下。

二、思路

  • 数据的存储

在k8s中的持久化部署不可避免的要用到持久卷,我们采用nfs方式的持久卷来存储es数据。持久卷的详细介绍请见这里:
https://kubernetes.io/docs/concepts/storage/persistent-volumes/

  • 节点规划

默认启动5个节点,3主2数据。根据es官方推荐每个节点的智能要分离,因此maseter节点不存储数据,只用来协调。

  • 3、多节点的权限问题

es的数据目录默认只允许一个节点访问,但在k8s上采用了持久卷,所有节点的数据都存储在这个卷上,这会导致es的访问权限问题。报错如下:

java.io.IOException: failed to obtain lock on /usr/share/elasticsearch/data/nodes/0
  • 1

当然可以通过更改es的配置max_local_storage_nodes来允许多个节点访问同一个数据目录,但es官方不推荐这样做。

所以我们的方案是更改每个节点的数据存储目录来解决 _ps:指定es配置项path.data来实现。_举例说明:

节点名

存储目录

es-data-1

/usr/share/elasticsearch/data/es-data-1

es-data-2

/usr/share/elasticsearch/data/es-data-2

三、部署

1、建nfs服务器

对于持久卷的结构规划如下:

/nfs/data/esmaster

es master节点的数据

/nfs/data/esdata

es 数据节点的数据

关于索引的磁盘占用:请根据业务的数据量情况来规划持久卷硬件的情况,根据我们实际测算1000个商品大约需要1MB/每节点
在默认的规划中,我们使用k8s的master节点作为nfs服务器,为上述卷准备了10G的空间,请确保k8s master node 不少于10G的空闲磁盘。请根据您的具体业务情况选择nfs服务器,如果条件允许最好是独立的nfs服务器。根据如上规划建立nfs服务:

#master节点安装nfs
yum -y install nfs-utils
#创建nfs目录
mkdir -p /nfs/data/{mqdata,esmaster,esdata}
#修改权限
chmod -R 777 /nfs/data/

#编辑export文件
vim /etc/exports

粘贴如下内容:
/nfs/data/esmaster *(rw,no_root_squash,sync)
/nfs/data/esdata *(rw,no_root_squash,sync)

#配置生效
exportfs -r
#查看生效
exportfs

#启动rpcbind、nfs服务
systemctl restart rpcbind && systemctl enable rpcbind
systemctl restart nfs && systemctl enable nfs

#查看 RPC 服务的注册状况
rpcinfo -p localhost

#showmount测试,这里的ip输入master节点的局域网ip
showmount -e

如果以看到可被挂载的目录:
# showmount -e 172.17.14.73

Export list for 172.17.14.73:
/nfs/data/esmaster *
/nfs/data/mqdata *
接下来,要在每一个节点上安装nfs服务以便使k8s可以挂载nfs目录
#所有node节点安装客户端
yum -y install nfs-utils
systemctl start nfs && systemctl enable nfs

这样就为k8s的持久卷做好了准备。

2、建持久卷

复制附件中的pv.yaml内容,修改其中的server配置为nfs服务器的ip地址

nfs:
server: 192.168.0.186 #这里请写nfs服务器的ip

在k8s master节点上执行下面的命令创建namespace:
kubectl create namespace ns-elasticsearch
通过下面的命令建立持久卷:
kubectl create -f pv.yaml
通过以下命令查看持久卷是否建立成功:
kubectl get pv

3、部署elasticsearch

由于在elasticsearch.yaml中设置了node信息:nodeSelector🇪🇸 enable,因此需要将node添加标签es:enable
kubectl label nodes es=enable
kubectl label nodes es=enable
kubectl label nodes es=enable

查看node标签
k get node --show-labels
复制附件elasticsearch.yaml的内,并执行下面的命令创建es集群
kubectl create -f elasticsearch.yaml
通过以上部署我们建立了一个ns-elasticsearch的namespace,并在其中创建了相应的pvc、角色账号,有状态副本集以及服务。
kubectl get pods --namespace ns-elasticsearch -o wide

NAME                     READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
elasticsearch-data-0     1/1     Running   0          46h   10.244.2.45   vm188   <none>           <none>
elasticsearch-data-1     1/1     Running   2          45h   10.244.1.62   vm187   <none>           <none>
elasticsearch-master-0   1/1     Running   0          46h   10.244.2.44   vm188   <none>           <none>
elasticsearch-master-1   1/1     Running   0          46h   10.244.1.61   vm187   <none>           <none>
elasticsearch-master-2   1/1     Running   0          46h   10.244.0.14   vm186   <none>           <none>

服务
我们默认开启了对外nodeport端口,对应关系:

32000->9200

32100->9300

k8s内部可以通过下面的服务名称访问:

elasticsearch-api-service.ns-elasticsearch:9300

elasticsearch-service.ns-elasticsearch:9200

等待容器都启动成功后验证。

注意:

es的最大内存和最小内存需要保持一致,默认的256m太小,可适当增加,我配置的是1024m。

es7.x参考:

https://blog.csdn.net/chengyuqiang/article/details/89841544

https://www.sohu.com/a/301517999_683048

四、附件

pv.yaml内容

---
#es master节点的持久卷
apiVersion: v1
kind: PersistentVolume
metadata:name: pv-es-masterlabels:pv: pv-es-master
spec:capacity:storage: 1GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RecyclestorageClassName: nfsnfs:server: 192.168.1.190  #这里请写nfs服务器的ippath: /nfs/data/esmaster
---
#es数据节点的持久卷
apiVersion: v1
kind: PersistentVolume
metadata:name: pv-es-datalabels:pv: pv-es-data
spec:capacity:storage: 10GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RecyclestorageClassName: nfsnfs:server: 192.168.1.190  #这里请写nfs服务器的ippath: /nfs/data/esdata
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc-es-masternamespace: ns-elasticsearch
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1GistorageClassName: nfsselector:matchLabels:pv: pv-es-master
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc-es-datanamespace: ns-elasticsearch
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10GistorageClassName: nfsselector:matchLabels:pv: pv-es-data

elasticsearch.yaml内容

---
apiVersion: v1
kind: ServiceAccount
metadata:labels:elastic-app: elasticsearchname: elasticsearch-adminnamespace: ns-elasticsearch---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: elasticsearch-adminlabels:elastic-app: elasticsearch
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:- kind: ServiceAccountname: elasticsearch-adminnamespace: ns-elasticsearch---
kind: StatefulSet
apiVersion: apps/v1
metadata:labels:elastic-app: elasticsearchrole: mastername: elasticsearch-masternamespace: ns-elasticsearch
spec:serviceName: es-masterreplicas: 1revisionHistoryLimit: 10selector:matchLabels:elastic-app: elasticsearchrole: mastertemplate:metadata:labels:elastic-app: elasticsearchrole: masterspec:#将持久卷声明volumes:- name: pv-storage-elastic-masterpersistentVolumeClaim:claimName: pvc-es-masternodeSelector:es: enablecontainers:- name: elasticsearch-masterimage: registry.cn-shanghai.aliyuncs.com/luckyqing/elasticsearch:7.6.2lifecycle:postStart:exec:command: ["/bin/bash", "-c", "sysctl -w vm.max_map_count=262144; ulimit -l unlimited;chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/data;"]ports:- containerPort: 9200protocol: TCP- containerPort: 9300protocol: TCPenv:- name: MY_POD_NAMEvalueFrom:fieldRef:apiVersion: v1fieldPath: metadata.name#修改es默认的数据存储目录,否则多个节点同时写一个目录es权限不允许- name: "path.data"value: "/usr/share/elasticsearch/data/$(MY_POD_NAME)"- name: "cluster.name"value: "elasticsearch-cluster"- name: "bootstrap.memory_lock"value: "false"- name: "discovery.seed_hosts" #7.x的配置方式value: "elasticsearch-discovery"- name: "node.master"value: "true"- name: "node.data"value: "false"- name: "node.ingest"value: "false"- name: "ES_JAVA_OPTS"value: "-Xms1024m -Xmx1024m"- name: "cluster.initial_master_nodes"value: "elasticsearch-master-0"securityContext:privileged: true#将持久卷映射为数据目录的父目录volumeMounts:- name: pv-storage-elastic-mastermountPath: /usr/share/elasticsearch/data/
#      imagePullSecrets:
#        - name: aliyun-secretserviceAccountName: elasticsearch-admintolerations:- key: node-role.kubernetes.io/mastereffect: NoSchedule---
kind: Service
apiVersion: v1
metadata:labels:elastic-app: elasticsearchname: elasticsearch-discoverynamespace: ns-elasticsearch
spec:ports:- port: 9300targetPort: 9300selector:elastic-app: elasticsearchrole: master---
kind: StatefulSet
apiVersion: apps/v1
metadata:labels:elastic-app: elasticsearchrole: dataname: elasticsearch-datanamespace: ns-elasticsearch
spec:serviceName: es-datareplicas: 2revisionHistoryLimit: 10selector:matchLabels:elastic-app: elasticsearchtemplate:metadata:labels:elastic-app: elasticsearchrole: dataspec:#将es-data持久卷声明volumes:- name: pv-storage-elastic-datapersistentVolumeClaim:claimName: pvc-es-datanodeSelector:es: enablecontainers:- name: elasticsearch-dataimage: registry.cn-shanghai.aliyuncs.com/luckyqing/elasticsearch:7.6.2lifecycle:postStart:exec:command: ["/bin/bash", "-c", "sysctl -w vm.max_map_count=262144; ulimit -l unlimited;chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/data;"]ports:- containerPort: 9200protocol: TCP- containerPort: 9300protocol: TCPenv:- name: MY_POD_NAMEvalueFrom:fieldRef:apiVersion: v1fieldPath: metadata.name#修改es默认的数据存储目录,否则多个节点同时写一个目录es权限不允许- name: "path.data"value: "/usr/share/elasticsearch/data/$(MY_POD_NAME)"- name: "cluster.name"value: "elasticsearch-cluster"- name: "bootstrap.memory_lock"value: "false"- name: "discovery.seed_hosts"value: "elasticsearch-discovery"- name: "node.master"value: "false"- name: "node.data"value: "true"- name: "ES_JAVA_OPTS"value: "-Xms1024m -Xmx1024m"securityContext:privileged: true#将持久卷映射到数据目录的父目录volumeMounts:- name: pv-storage-elastic-datamountPath: /usr/share/elasticsearch/data/# imagePullSecrets:# - name: aliyun-secretserviceAccountName: elasticsearch-admintolerations:- key: node-role.kubernetes.io/mastereffect: NoSchedule---
kind: Service
apiVersion: v1
metadata:labels:elastic-app: elasticsearch-servicename: elasticsearch-servicenamespace: ns-elasticsearch
spec:ports:- port: 9200targetPort: 9200nodePort: 32000selector:elastic-app: elasticsearchtype: NodePort---
kind: Service
apiVersion: v1
metadata:labels:elastic-app: elasticsearch-servicename: elasticsearch-api-servicenamespace: ns-elasticsearch
spec:ports:- port: 9300targetPort: 9300nodePort: 32100selector:elastic-app: elasticsearchtype: NodePort

相关文章:

elasticsearch7.x在k8s中的部署

一、说明 二、思路 三、部署 1、建nfs服务器 2、建持久卷 3、部署elasticsearch 四、附件 ?pv.yaml内容 elasticsearch.yaml内容 一、说明 本文章内容主要的参考来源是https://www.cnblogs.com/javashop-docs/p/12410845.html&#xff0c;但参考文献中的elasticsearc…...

校园社团信息管理平台:Spring Boot技术实战指南

3系统分析 3.1可行性分析 通过对本校园社团信息管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本校园社团信息管理系统采用SSM框架&#xff0c;JAVA作…...

【Linux】从内核角度理解 TCP 的 全连接队列(以及什么是 TCP 抓包)

文章目录 概念引入理解全连接队列内核方面理解Tcp抓包方法注意事项 概念引入 我们知道&#xff0c;TCP的三次握手是由TCP协议 自动处理的&#xff0c;建立连接的过程与用户是否进行accept无关&#xff0c;accept()的作用主要是为当前连接创建一个套接字&#xff0c;用于进行后…...

太速科技-712-6U VPX飞腾处理器刀片计算机

6U VPX飞腾处理器刀片计算机 一、产品概述 该产品是一款基于国产飞腾FT-2000四核处理器或D2000八核处理器的高性能6U VPX刀片式计算机。产品提供了可支持全网状交换的高速数据通道&#xff0c;其中P1、P2均支持1个PCIe x16 Gen3或2个PCIe x8 Gen3或4个PCIe x4 Gen3总…...

深度学习(八) TensorFlow、PyTorch、Keras框架大比拼(8/10)

一、深度学习框架概述 深度学习框架在当今人工智能和机器学习领域中占据着至关重要的地位。其中&#xff0c;TensorFlow 由 Google 开发&#xff0c;自 2015 年发布以来&#xff0c;凭借其灵活的计算图、自动微分功能以及跨平台支持等特点&#xff0c;迅速成为主流深度学习框架…...

thinkphp中命令行工具think使用,可用于快速生成控制器,模型,中间件等

在使用tp框架的时候tp内置了一个think的命令行工具&#xff0c; 这个工具可以帮助我们快速的生成控制器&#xff0c;模型&#xff0c;中间件的代码。 这个工具就和laravel中的 artisan 的作用都差不多&#xff0c;只是名称不同而已。 tp中常用的命令行工具&#xff1a; 1. 快…...

Discourse 是否支持手机注册

Discourse 能不能使用手机进行注册&#xff1f; 功能总结 简答来说&#xff0c;Discourse 不能使用手机注册&#xff0c;Discourse 也没有提供这个功能。 这个功能多是需要 SSO 来实现。 比如说华为的那个社区&#xff0c;他们自己做了一个自己的用户管理 SSO&#xff0c;然…...

软件测试学习笔记丨Flask框架-请求与响应

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/23408 请求方法 from flask import Flaskapp Flask(__name__)app.route("/cases", methods["get"]) def get_case():return {"code": 0, "msg": &…...

【C++笔记】list结构剖析及其模拟实现

【C笔记】list结构剖析及其模拟实现 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】list结构剖析及其模拟实现前言一 .list的结构及其介绍1.1list的结构1.2list的使用1.3迭代器划分 二.list的模拟实现2.1 list结构…...

C#进阶1

C#进阶1 本文章主要介绍C#的进阶知识&#xff0c;如反射&#xff0c;特性.... 参考视频链接 原码 文章目录 C#进阶1反射步骤泛型反射调用方法 获取属性 特性特性的定义步骤扩展枚举练习 反射 在 C# 中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&a…...

PHP如何对输出进行转义

在PHP中&#xff0c;对输出进行转义是为了防止跨站脚本攻击&#xff08;XSS&#xff09;和其他安全问题。PHP提供了多种函数来对输出进行转义&#xff0c;这些函数根据输出的上下文&#xff08;如HTML、JavaScript、URL等&#xff09;而有所不同。以下是一些常用的转义函数及其…...

Windows 10 安装Docker踩过的坑和解决-31/10/2024

目录 环境版本 一、Docker Desktop双击启动没反应&#xff0c;open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified. 二、Docker Desktop运行run命令时显示错误HTTP code 500 并且错误大意是服务器拒绝访问 三、检测Docker是否可以正常使用…...

【应急响应】Linux植入恶意程序排查流程

文章目录 前言一、Linux入侵检查二、Linux系统被入侵/中毒有哪些现象三、Linux系统被入侵/中毒处置过程四、Linux安全防护措施五、服务器被GetShell渗透解决办法(案例)前言 本篇文章主要是以我们日常的运维工作中对Linux服务器进行安全检查,进一步介绍如何使用具体命令来对Li…...

微信小程序app.js里面onLaunch里面的函数比page里面的onshow里面的方法后执行

微信小程序app.js里面onLaunch里面的函数比page里面的onshow里面的方法后执行 我们在app.js里面执行登录时可以调用checkLoginReadyCallback wx.login({ success: (res) > { $api .login({ jsCode: res.code, }) .then((res1) > { wx.hideLoading(); if (res1.code 0) …...

斐波那契时间序列,精准捕捉市场拐点 MT4免费公式源码!

指标名称&#xff1a;斐波那契时间序列 版本&#xff1a;MT4 ver. 2.01 斐波那契时间序列是一种技术分析工具&#xff0c;通过将斐波那契数列&#xff08;如1, 2, 3, 5, 8, 13等&#xff09;应用于时间轴上&#xff0c;用于预测市场价格的时间周期拐点。斐波那契时间序列在股…...

计算机的错误计算(一百四十)

摘要 探讨 MATLAB 中函数 的计算精度。 从计算机的错误计算&#xff08;一百三十九&#xff09;知&#xff0c;对于对数运算&#xff0c;当真数在 1 附近时&#xff0c;计算机的输出会出现较大误差。为此&#xff0c;IEEE 754-2019 中专门定义有函数 其目的就是当自变量在 …...

JavaEE初阶---网络原理(四)--IP协议/DNS协议

文章目录 1.初识网络层&#xff08;了解即可&#xff09;2.地址管理2.1动态分配2.2网络地址转换2.3IP-v6最终解 3.网段划分4.以太网协议--数据链路层5.DNS应用层协议 1.初识网络层&#xff08;了解即可&#xff09; 网络层做的事情就是下面的两个&#xff1a; 1&#xff09;地…...

LeetCode20:有效的括号

原题地址&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合…...

简单介绍Class文件、Dex文件以及ELF文件

Class文件 Class文件是Java源代码文件经Java编译器编译后得到的Java字节码文件。对比Linux、Windows上的可执行文件而言&#xff0c;Class文件可以看作是Java虚拟机的可执行文件。 Dex文件 Dex文件是Android平台上与传统Class文件对应的Java字节码文件。Dex文件的核心内容与Cl…...

Vivo开奖了,劝退价。。

vivo 也开奖了&#xff0c;不过有小伙伴反馈是个劝退价&#xff0c;甚至不如隔壁的 oppo&#xff0c;要说这两家也是渊源颇深&#xff0c;一家是绿厂&#xff0c;一家是蓝厂&#xff0c;高管也都是早期步步高出来的。 给大家盘一下开奖的信息&#xff0c;方便大家横向做个对比&…...

SpringBoot整合MQTT实战:手把手教你实现设备动态连接与主题订阅管理(附完整源码)

SpringBoot整合MQTT实战&#xff1a;动态连接与主题订阅管理的工程化实现 在物联网项目开发中&#xff0c;设备连接管理和消息路由的灵活性往往是系统设计的难点。想象这样一个场景&#xff1a;你的智慧农业系统需要随时接入新部署的土壤传感器&#xff0c;气象站设备可能因网…...

Vivado初始化设计慢?可能是这3个隐藏设置惹的祸

Vivado初始化设计慢&#xff1f;可能是这3个隐藏设置惹的祸 当你在深夜赶项目进度&#xff0c;Vivado却卡在"Initializing Design"界面转圈超过15分钟&#xff0c;那种焦虑感堪比考试时笔没水。作为Xilinx FPGA开发的核心工具&#xff0c;Vivado的初始化速度直接影响…...

告别裸机思维:在GD32单片机上用FreeRTOS管理多个传感器(附源码)

从裸机到多任务&#xff1a;GD32FreeRTOS传感器管理系统实战 在嵌入式开发中&#xff0c;当系统需要同时处理多个外设时&#xff0c;传统的裸机编程往往会陷入复杂的状态机迷宫。我曾在一个环境监测项目中深有体会——当温湿度传感器、光照传感器、按键和OLED显示屏需要协同工作…...

SDMatte Web端体验优化:首屏加载速度与模型预热机制说明

SDMatte Web端体验优化&#xff1a;首屏加载速度与模型预热机制说明 1. 引言 在电商、设计、内容创作等领域&#xff0c;高质量的图像抠图已经成为刚需。SDMatte作为一款专注于复杂边缘和透明物体处理的AI抠图工具&#xff0c;其Web端体验直接影响用户的使用感受。本文将详细…...

Dual-Tree Agent RAG:可控、可解释、可验证

从文本检索到方法推理的跃迁 传统RAG系统将文档切分为平面文本块&#xff0c;通过向量相似度检索来增强大模型生成。这种模式在简单事实问答中表现良好&#xff0c;却难以应对需要全局结构理解、跨章节整合和方法论复用的复杂创新任务。现有改进方案如RAPTOR&#xff08;层次摘…...

从朱诺到威尼斯:一个可持续旅游模型如何‘开箱即用’解决你的美赛问题二

从朱诺到威尼斯&#xff1a;可持续旅游模型的跨场景迁移实战指南 模型迁移的核心挑战与解决框架 当我们将一个城市的可持续旅游模型迁移到另一个城市时&#xff0c;表面上看似乎只需要更换数据输入&#xff0c;但实际操作中会遇到三个维度的挑战&#xff1a; 1. 资源禀赋差异 自…...

从零开始手搓一个xv6内核页表:跟着MIT 6.S081源码一步步理解虚拟内存初始化

从零构建xv6内核页表&#xff1a;深入解析RISC-V虚拟内存初始化实战 在MIT 6.S081操作系统的学习过程中&#xff0c;xv6作为教学用精简内核&#xff0c;其虚拟内存实现是理解现代计算机内存管理的关键。本文将带您从第一行代码开始&#xff0c;完整复现xv6内核页表的构建过程&…...

白城腾讯广告服务商

在白城&#xff0c;有不少企业想借助腾讯广告拓展业务&#xff0c;这就离不开靠谱的腾讯广告服务商。今天就和大家聊聊白城腾讯广告服务商的那些事儿&#xff0c;长春中网互联技术在这一领域表现就相当不错。白城腾讯广告服务商现状行业报告显示&#xff0c;近几年白城地区对腾…...

从零到一:STM32手动移植FreeRTOS的工程化实践与源码解析

1. 为什么需要手动移植FreeRTOS&#xff1f; 第一次接触FreeRTOS时&#xff0c;很多人会选择用STM32CubeMX自动生成工程。这确实方便&#xff0c;就像用预制菜做饭&#xff0c;但真正想掌握RTOS内核&#xff0c;手动移植才是"从买菜到炒菜"的完整过程。我遇到过不少项…...

攻克内核加载难题:OpenArk工具驱动加载失败的系统化解决策略

攻克内核加载难题&#xff1a;OpenArk工具驱动加载失败的系统化解决策略 【免费下载链接】OpenArk The Next Generation of Anti-Rookit(ARK) tool for Windows. 项目地址: https://gitcode.com/GitHub_Trending/op/OpenArk OpenArk作为新一代Windows反Rootkit工具&…...