当前位置: 首页 > 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;方便大家横向做个对比&…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究

摘要&#xff1a;在消费市场竞争日益激烈的当下&#xff0c;传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序&#xff0c;探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式&#xff0c;分析沉浸式体验的优势与价值…...