在k8s 1.26.6上部署ES集群
一、k8s集群架构:
IP 角色,左边是ip,右边是hostname master1 是192.168.1.3 的hostname
192.168.1.3 master1
192.168.1.4 master2
192.168.1.5 master3
192.168.1.6 node1
192.168.1.7 node2
二、部署ES集群
1、配置storageclass,用于动态创建pvc,并自动绑定pv
cat sc.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
执行一下:
kubectl apply -f sc.yaml
2、创建名称空间
kubectl create ns elasticsearch
3、创建PV
cat pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: local-storage-pv-1namespace: elasticsearchlabels:name: local-storage-pv-1
spec:capacity:storage: 1GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagelocal:path: /data/esnodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- master1
---
apiVersion: v1
kind: PersistentVolume
metadata:name: local-storage-pv-2namespace: elasticsearchlabels:name: local-storage-pv-2
spec:capacity:storage: 1GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagelocal:path: /data/esnodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- master2
---
apiVersion: v1
kind: PersistentVolume
metadata:name: local-storage-pv-3namespace: elasticsearchlabels:name: local-storage-pv-3
spec:capacity:storage: 1GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagelocal:path: /data/esnodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- master3
---
apiVersion: v1
kind: PersistentVolume
metadata:name: local-storage-pv-4namespace: elasticsearchlabels:name: local-storage-pv-4
spec:capacity:storage: 1GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagelocal:path: /data/esnodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node1
---
apiVersion: v1
kind: PersistentVolume
metadata:name: local-storage-pv-5namespace: elasticsearchlabels:name: local-storage-pv-5
spec:capacity:storage: 1GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagelocal:path: /data/esnodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node2
一共是5个PV,每个都通过nodeSelectorTerms跟k8s节点绑定。
执行一下:
kubectl apply -f pv.yaml
3、创建StatefulSet,ES属于数据库类型的应用,此类应用适合StatefulSet类型
cat sts.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:name: es7-clusternamespace: elasticsearch
spec:serviceName: elasticsearch7replicas: 5selector:matchLabels:app: elasticsearch7template:metadata:labels:app: elasticsearch7spec:containers:- name: elasticsearch7image: elasticsearch:7.16.2resources:limits:cpu: 1000mrequests:cpu: 100mports:- containerPort: 9200name: restprotocol: TCP- containerPort: 9300name: inter-nodeprotocol: TCPvolumeMounts:- name: datamountPath: /usr/share/elasticsearch/dataenv:- name: cluster.namevalue: k8s-logs- name: node.namevalueFrom:fieldRef:fieldPath: metadata.name- name: discovery.zen.minimum_master_nodesvalue: "2"- name: discovery.seed_hostsvalue: "es7-cluster-0.elasticsearch7,es7-cluster-1.elasticsearch7,es7-cluster-2.elasticsearch7"- name: cluster.initial_master_nodesvalue: "es7-cluster-0,es7-cluster-1,es7-cluster-2"- name: ES_JAVA_OPTSvalue: "-Xms1g -Xmx1g"initContainers:- name: fix-permissionsimage: busyboxcommand: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"]securityContext:privileged: truevolumeMounts:- name: datamountPath: /usr/share/elasticsearch/data- name: increase-vm-max-mapimage: busyboxcommand: ["sysctl", "-w", "vm.max_map_count=262144"]securityContext:privileged: true- name: increase-fd-ulimitimage: busyboxcommand: ["sh", "-c", "ulimit -n 65536"]volumeClaimTemplates:- metadata:name: dataspec:accessModes: [ "ReadWriteOnce" ]storageClassName: "local-storage"resources:requests:storage: 1Gi
该ES集群通过volumeClaimTemplates来关联storageClass,并自动绑定相应的PV。
执行一下:
kubectl apply -f sts.yaml
1
4、创建NodePort类型的Service来蒋ES集群暴漏出去
cat svc.yaml
apiVersion: v1
kind: Service
metadata:name: elasticsearch7namespace: elasticsearch
spec:selector:app: elasticsearch7type: NodePortports:- port: 9200nodePort: 30002targetPort: 9200
执行一下:
kubectl apply -f svc.yaml
以上就创建完了,我们来看一下上面创建的资源状态:
(1)storageclass
kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-storage kubernetes.io/no-provisioner Delete WaitForFirstConsumer false 21h
(2)PV
kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
local-storage-pv-1 1Gi RWO Retain Bound elasticsearch/data-es7-cluster-1 local-storage 21h
local-storage-pv-2 1Gi RWO Retain Bound elasticsearch/data-es7-cluster-2 local-storage 21h
local-storage-pv-3 1Gi RWO Retain Bound elasticsearch/data-es7-cluster-0 local-storage 21h
local-storage-pv-4 1Gi RWO Retain Bound elasticsearch/data-es7-cluster-4 local-storage 19m
local-storage-pv-5 1Gi RWO Retain Bound elasticsearch/data-es7-cluster-3 local-storage 19m
kubectl get pvc -n elasticsearch
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data-es7-cluster-0 Bound local-storage-pv-3 1Gi RWO local-storage 21h
data-es7-cluster-1 Bound local-storage-pv-1 1Gi RWO local-storage 21h
data-es7-cluster-2 Bound local-storage-pv-2 1Gi RWO local-storage 21h
data-es7-cluster-3 Bound local-storage-pv-5 1Gi RWO local-storage 20m
data-es7-cluster-4 Bound local-storage-pv-4 1Gi RWO local-storage 19m
(3)StatefulSet
kubectl get statefulset -n elasticsearch
NAME READY AGE
es7-cluster 5/5 21h
kubectl get pod -n elasticsearch
NAME READY STATUS RESTARTS AGE
es7-cluster-0 1/1 Running 1 21h
es7-cluster-1 1/1 Running 1 21h
es7-cluster-2 1/1 Running 1 21h
es7-cluster-3 1/1 Running 0 19m
es7-cluster-4 1/1 Running 0 18m
(4)Service
kubectl get svc -n elasticsearch
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
elasticsearch7 NodePort 10.97.196.176 <none> 9200:30002/TCP 21h
(5)通过restful接口查看ES集群状态
curl 192.168.1.3:30002/_cat/nodes?v
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
10.244.136.5 60 39 1 0.19 0.31 0.36 cdfhilmrstw - es7-cluster-0
10.244.104.1 45 41 1 0.98 0.44 0.25 cdfhilmrstw - es7-cluster-3
10.244.180.5 40 40 1 0.28 0.32 0.32 cdfhilmrstw - es7-cluster-2
10.244.166.141 63 41 1 0.06 0.14 0.14 cdfhilmrstw - es7-cluster-4
10.244.137.68 44 41 1 0.29 0.45 0.59 cdfhilmrstw * es7-cluster-1
通过网页访问也是正常的:
5、部署kibana
kibana我们使用Deployment类型来部署,而它的Service我们使用NodePort,完整的代码如下:
vi kibana.yaml
apiVersion: v1
kind: Service
metadata:name: kibananamespace: elasticsearchlabels:app: kibana
spec:ports:- port: 5601targetPort: 5601nodePort: 30001type: NodePortselector:app: kibana
---
apiVersion: apps/v1
kind: Deployment
metadata:name: kibananamespace: elasticsearchlabels:app: kibana
spec:selector:matchLabels:app: kibanatemplate:metadata:labels:app: kibanaspec:nodeSelector:node: node2containers:- name: kibanaimage: kibana:7.16.2resources:limits:cpu: 1000mrequests:cpu: 1000menv:- name: ELASTICSEARCH_HOSTSvalue: http://elasticsearch7:9200- name: SERVER_PUBLICBASEURLvalue: "0.0.0.0:5601"- name: I18N.LOCALEvalue: zh-CNports: - containerPort: 5601
上面的Deployment部分,我们通过nodeSelector指定调度到了node2节点,前提是给node2节点加了个node=node2这样一个标签。
执行一下:
kubectl apply -f kibana.yaml
再查看一下状态:
kubectl get all -n elasticsearchNAME READY STATUS RESTARTS AGE
pod/es7-cluster-0 1/1 Running 0 47m
pod/es7-cluster-1 1/1 Running 0 46m
pod/es7-cluster-2 1/1 Running 0 46m
pod/es7-cluster-3 1/1 Running 0 43m
pod/es7-cluster-4 1/1 Running 0 42m
pod/kibana-768595479f-mhw9q 1/1 Running 0 13mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/elasticsearch7 NodePort 10.108.115.19 <none> 9200:30002/TCP 47m
service/kibana NodePort 10.111.66.207 <none> 5601:30001/TCP 13mNAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/kibana 1/1 1 1 13mNAME DESIRED CURRENT READY AGE
replicaset.apps/kibana-768595479f 1 1 1 13mNAME READY AGE
statefulset.apps/es7-cluster 5/5 47m
看到kibana的Service和Pod都在运行中了,通过页面验证一下kibana能不能访问:
相关文章:
在k8s 1.26.6上部署ES集群
一、k8s集群架构: IP 角色,左边是ip,右边是hostname master1 是192.168.1.3 的hostname 192.168.1.3 master1 192.168.1.4 master2 192.168.1.5 master3 192.168.1.6 node1 192.168.1.7 node2 二、部署ES集群 1、配置stor…...
用神经网络玩转数据聚类:自编码器的原理与实践
目录 引言一、什么是自编码器二、自编码器的应用场景三、自编码器的优缺点四、如何实现基于自编码器的聚类算法五、总结 引言 随着数据量的爆炸性增长,如何有效地处理和分析数据成为了一个重要的问题。数据聚类是一种常用的数据分析方法,它可以将数据集…...
Linux系统调试课:Linux Kernel Printk
🚀返回专栏总目录 文章目录 0、printk 说明1、printk 日志等级设置2、屏蔽等级日志控制机制3、printk打印常用方式4、printk打印格式0、printk 说明 在开发Linux device Driver或者跟踪调试内核行为的时候经常要通过Log API来trace整个过程,Kernel API printk()是整个Kern…...
不同版本Idea部署Maven和Tomcat教学
目录 一、2019版Idea 1.1. Maven配置 1.2. Tomcat配置 二、2023版Idea 2.1 Maven配置 2.2. Tomcat配置 一、2019版Idea 1.1. Maven配置 在这篇 http://t.csdn.cn/oetKq 我已经详细讲述了Maven的下载安装及配置,本篇就直接开始实操 : 1. 首先进入设置搜索Mave…...
Vue 3.0中的Treeshaking?
1.treeshaking是什么? Tree shaking 是一种通过清除多余代码方式来优化项目打包体积的技术,专业术语叫 Dead code elimination 简单来讲,就是在保持代码运行结果不变的前提下,去除无用的代码 如果把代码打包比作制作蛋糕&#…...
开源可商业运营的ChatGpt网页源码v1.2.2
🤖 主要功能 后台管理系统,可对用户,Token,商品,卡密等进行管理 精心设计的 UI,响应式设计 极快的首屏加载速度(~100kb) 支持Midjourney绘画和DALLE模型绘画,GPT4等应用 海量的内置 prompt 列表,来自中文和英文 一键导…...
驱动阿托斯DLHZO-T伺服比例阀放大器定制
DLHZO-T型伺服比例换向阀,直动式,带LVDT位置传感器和阀芯零遮盖,可应用于各种位置闭环控制实现最佳的性能。 比例阀和模块式数字放大器配合使用。 LVDT传感器和阀套结构可确保非常高的调节精度和响应灵敏度。 失电保护位可实现在电源中断的…...
SysML V1.2 Blocks
本人看的实在是太枯燥了,很多都是机翻过了一遍 后面复习的时候,我再用chatgpt润色一下 一、综述 块是系统描述的模块化单元。每个块定义了一组特征来描述系统或其他感兴趣的元素。这些可能包括结构和行为特征,例如属性和操作,以…...
反编译微信小程序,可导出uniapp或taro项目
微信小程序反编译(全网通用) 微信小程序反编译 反编译主要分为四个阶段 操作流程 1. node.js安装 2. node安装模块 3. 开始反编译 4. 导入到微信开发者工具既可运行 微信小程序反编译 当碰到不会写的小程序功能时,正好看到隔壁小程序有类似…...
鉴源实验室丨汽车网络安全攻击实例解析(二)
作者 | 田铮 上海控安可信软件创新研究院项目经理 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 引言:汽车信息安全事件频发使得汽车行业安全态势愈发紧张。这些汽车网络安全攻击事件,轻则给企业产品发布及产品…...
pycorrector一键式文本纠错工具,整合了BERT、MacBERT、ELECTRA、ERNIE等多种模型,让您立即享受纠错的便利和效果
pycorrector:一键式文本纠错工具,整合了Kenlm、ConvSeq2Seq、BERT、MacBERT、ELECTRA、ERNIE、Transformer、T5等多种模型,让您立即享受纠错的便利和效果 pycorrector: 中文文本纠错工具。支持中文音似、形似、语法错误纠正,pytho…...
Linux 日志管理
Linux 日志管理 一.Linux 下的日志服务简介 1.1 CentOS5 之前的版本 centos5 之前的版本使用系统和内核日志分离的格式记录日志 syslogd:该服务专门用于记录系统日志(system application logs) klogd: 该服务专门用于记录内核日志(linux kernel logs) centos5 之前事件的记录格…...
统计学补充概念04-最大似然估计
概念 最大似然估计(Maximum Likelihood Estimation,简称MLE)是一种统计方法,用于估计模型的参数,使得给定观测数据的似然函数达到最大。在最大似然估计中,我们寻找能够最大化观测数据的可能性(…...
mysql一些统计实用函数
文章目录 一对多,多的一端只查询最新数据YEAR 年份函数MONTH 月份函数QUARTER 季度函数往前递推十年往后递推十年查询去年12月份统计身份证户籍所在地人数 一对多,多的一端只查询最新数据 ROW_NUMBER() over(PARTITION BY evt_id ORDER BY evt_node_rec…...
IC设计仿真云架构
对于IC仿真来说,最重要的是要安全、可维护、高性能的的HPC环境环境。 那么云上如何搭建起一套完整的IC仿真云环境呢? 这种架构应该长什么样子? 桌面虚拟化基础架构 将所有桌面虚拟机在数据中心进行托管并统一管理;同时用户能够…...
日常BUG ——乱码
😜作 者:是江迪呀✒️本文关键词:日常BUG、BUG、问题分析☀️每日 一言 :存在错误说明你在进步! 一、问题描述 A系统使用Feign调用B系统时,传递的String字符串,到了B系统中变为了乱…...
SpringBoot复习:(44)MyBatisAutoConfiguration
可以看到MyBatisAutoConfiguration引入了MyBatisProperties这个属性: MyBatisAutoConfiguration中配置了一个SqlSessionFactoryBean,代码如下: 可以配置mybatis-config.xml,需要配置文件里指定: mybatis.config-locationclasspath:/mybat…...
SpringBoot校验,DTO文件中常用的注解应用案例.
在观看本篇文章之前,可以先参考我之前写的一篇文章 “ Spring5,Service层对DTO文件进行数据格式校验. ” ,这篇文章是介绍在 Service层 对DTO文件的校验。 以下方的 CompanyDTO 文件为例,讲解不同的注解使用场景,以及…...
Qt 窗口随鼠标移动效果
实现在窗口任意位置按下鼠标左键都可以移动窗口的效果,完整代码如下: mainwindow.h: #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class MainW…...
大数据Flink(五十九):Flink on Yarn的三种部署方式介绍以及注意
文章目录 Flink on Yarn的三种部署方式介绍以及注意 一、Pre-Job 模式部署作业...
MATLAB窗函数法在FIR数字滤波器语音去噪中的实战应用
1. 窗函数法设计FIR滤波器的核心原理 FIR(有限冲激响应)滤波器的核心特点是系统函数没有极点,仅由零点构成,这保证了绝对稳定性。窗函数法的设计流程可以概括为四个关键步骤: 首先需要明确目标滤波器的理想频率响应Hd(…...
音乐标签编辑器:5步打造完美音乐库的免费开源解决方案
音乐标签编辑器:5步打造完美音乐库的免费开源解决方案 【免费下载链接】music-tag-web 音乐标签编辑器,可编辑本地音乐文件的元数据(Editable local music file metadata.) 项目地址: https://gitcode.com/gh_mirrors/mu/music-…...
国内贸易商选工商业储能代工厂需要关注哪些核心细节?
近两年工商业储能的海内外需求持续攀升,不少贸易商在筛选合作工厂时,经常遇到证货不符、交付延期、性能不达标等问题,本文从工艺、合规、成本三个维度拆解核心考察标准。一、合规认证的核验标准核心认证清单:内销产品需具备 GB/T …...
一键部署DeepSeek-OCR:WEBUI镜像让复杂场景文字识别变得简单高效
一键部署DeepSeek-OCR:WEBUI镜像让复杂场景文字识别变得简单高效 1. 引言 1.1 OCR技术的实际应用价值 在日常工作和生活中,我们经常遇到需要从图片或文档中提取文字的场景。无论是处理发票、识别证件信息,还是将纸质文件转换为可编辑的电子…...
SDMatte在印刷行业落地:高分辨率透明底PNG输出适配CMYK预检与印前流程实测
SDMatte在印刷行业落地:高分辨率透明底PNG输出适配CMYK预检与印前流程实测 1. 印刷行业背景与痛点 印刷行业对图像处理有着严格的要求,特别是在商品包装、画册制作等场景中,高质量的透明底图像是确保印刷品专业度的关键要素。传统抠图工具在…...
Queue<T> 完整知识点详解
一是什么Queue<T> 是 先进先出(FIFO) 的泛型集合。只能从尾部入队只能从头部出队不支持索引访问顺序严格按照进入顺序二命名空间using System.Collections.Generic;三创建队列1.空队列Queue<int> queue new Queue<int>();2.指定容量Q…...
AMD Ryzen系统调试实战:3大高级策略解决硬件性能瓶颈
AMD Ryzen系统调试实战:3大高级策略解决硬件性能瓶颈 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://git…...
PP-DocLayoutV3企业应用:保险理赔单据——发票/病历/费用清单三类文档统一分析
PP-DocLayoutV3企业应用:保险理赔单据——发票/病历/费用清单三类文档统一分析 1. 引言:保险理赔的“信息迷宫”与破局之道 想象一下,你是一家保险公司的理赔审核员。每天,你的办公桌上堆满了来自不同医院、不同科室、不同格式的…...
QT桌面应用开发:构建本地化的StructBERT文本查重客户端
QT桌面应用开发:构建本地化的StructBERT文本查重客户端 最近在整理一些文档和报告时,发现了一个挺头疼的问题:不同时期写的材料,或者不同同事提交的内容,经常会有一些段落或句子高度相似。手动去比对,不仅…...
如何调用Qwen2.5-7B API?Python接入详细步骤
如何调用Qwen2.5-7B API?Python接入详细步骤 想用上阿里最新开源的Qwen2.5-7B-Instruct模型,但不知道从哪里开始?这篇文章就是为你准备的。我会带你从零开始,一步步用Python调用这个模型的API,让你快速上手࿰…...
