哪个网站可以接任务做兼职/如何免费制作网站
部署elasticsearch集群
已经完成的工作:创建存储。首先配置了nfs存储提供商(nfs-deployment.yaml),然后通过创建存储类(storageclass.yaml)来将nfs服务器与存储类绑定:
[root@master 31efk]# cat storageclass.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:name: do-block-storage
provisioner: example.com/nfs
创建了elasticsearch的服务(elasticsearch_svc.yaml),定义了两个接口,一个是对外的,一个是elasticsearch集群内部通信的。
[root@master 31efk]# cat elasticsearch_svc.yaml
kind: Service
apiVersion: v1
metadata:name: elasticsearch31namespace: kube-logging31labels:app: elasticsearch
spec:selector:app: elasticsearchclusterIP: Noneports:- port: 9200name: rest- port: 9300name: inter-node
现在创建elasticsearch的具体pod。
这里的集群创建方式为statefulset,因为elasticsearch需要稳定的pod管理和持久化的存储。
-
有状态服务:Elasticsearch节点存储数据,因此需要持久化存储(即磁盘卷),并且需要保证每个节点能够持有自己特定的数据,即使在Pod重启或迁移时。
-
稳定的网络标识:StatefulSet为每个Pod分配一个稳定且唯一的网络标识(DNS名),这对于Elasticsearch这样的分布式系统至关重要,因为节点之间需要通过固定的名称相互通信。
-
顺序部署和终止:StatefulSet保证Pod按照顺序创建和删除,这有助于Elasticsearch集群的节点顺利加入和退出,确保集群的健康状态。
elasticsearch的yaml文件
第一部分
第一部分,可以看到部署在kube-logging31命名空间,匹配了elasticsearch31的service。容器内部也开放对应的端口。
对于statefulset来讲,需要持久化存储,这里定义了PVC模板,用来从storageClass进行请求PV。(当 PVC 指定了某个 StorageClass
时,Kubernetes 会使用该 StorageClass
动态创建(或供应)一个 PV,并将其绑定到 PVC 上。)这里的PVC的name是data,这里容器绑定的存储名称也是data,路径为/usr/share/elasticsearch/data。
apiVersion: apps/v1
kind: StatefulSet
metadata:name: elastic-cluster31namespace: kube-logging31
spec:serviceName: elasticsearch31replicas: 3selector:matchLabels:app: elasticsearchvolumeClaimTemplates:- metadata:name: datalabels:app: elasticsearchspec:accessModes: [ "ReadWriteOnce" ]storageClassName: do-block-storageresources:requests:storage: 10Gi template:metadata:labels:app: elasticsearchspec:containers:- name: elasticsearchimage: docker.elastic.co/elasticsearch/elasticsearch:7.2.0imagePullPolicy: IfNotPresentresources:limits:cpu: 1000mrequests:cpu: 100mports:- containerPort: 9200name: restprotocol: TCP- containerPort: 9300name: inter-nodeprotocol: TCPvolumeMounts:- name: datamountPath: /usr/share/elasticsearch/data
第二部分
container的环境变量:这里设置的环境变量主要是为了进行一个集群的搭建,这里的集群和statefulset里面的name是不一样的,具体关系如下:
-
selector
主要用于 Kubernetes 内部,它负责确定哪些 Pods 属于哪个 StatefulSet,或者哪些 Pods 应该由某个服务来管理。但是,selector
并不能直接影响 Elasticsearch 集群的内部逻辑,也不能用来标识 Elasticsearch 中的节点。 -
可以说selector主要方便容器的生命周期管理,不能控制elasticsearch集群内部的逻辑。而elasticsearch需要进行节点选举等更加精确的控制,因此还需要额外的配置。
-
node.name
:作用于 Elasticsearch 层,是 Elasticsearch 集群中唯一标识每个节点的配置。每个 Elasticsearch 节点必须有一个唯一的node.name
,以便 Elasticsearch 能够正确地管理和协同多节点的操作,如主节点选举、数据分片分配等。
所以下面的container的环境变量就是规定了elasticsearch的集群名称,以及node.name。
由于在statefulset中,创建的pod的名字是固定的,名称格式是<statefulset-name>-<ordinal> 。由于statefulset的名称是es-cluster,所以pod的名称就是es-cluster31-0,es-cluster31-1,es-cluster31-2。而这里的discovery.seed_hosts是每一个pod的DNS地址,每一个pod的DNS地址格式为:
<pod-name>.<service-name>.<namespace>.svc.cluster.local
所以看到 discovery.seed_hosts:"es-cluster31-0.elasticsearch31.kube-logging31.svc.cluster.local,es-cluster31-1.elasticsearch31.kube-logging31.svc.cluster.local,es-cluster31-2.elasticsearch31.kube-logging31.svc.cluster.local"
env:- name: cluster.namevalue: k8s-logs- name: node.namevalueFrom:fieldRef:fieldPath: metadata.name- name: discovery.seed_hostsvalue: "elastic-cluster31-0.elasticsearch31.kube-logging31.svc.cluster.local,elastic-cluster31-1.elasticsearch31.kube-logging31.svc.cluster.local,elastic-cluster31-2.elasticsearch31.kube-logging31.svc.cluster.local"- name: cluster.initial_master_nodesvalue: "elastic-cluster31-0,elastic-cluster31-1,elastic-cluster31-2"- name: ES_JAVA_OPTSvalue: "-Xms512m -Xmx512m"
第三部分
这里的三个初始化容器是为了更好的准备elasticsearch的容器环境,确保在elasticsearch启动之前,所有的权限都已经配置正确。
fix-permission
第一个fix-permission是为了修复数据目录的权限。这里需要介绍pod的创建顺序。initcontainers 和主容器都是 Pod 的一部分。当 Kubernetes 创建 Pod 时,会按照以下顺序执行操作:
- 创建 Pod:Kubernetes 会首先创建整个 Pod 实体,包括其描述的所有容器(
initContainers
和主容器)。 - 挂载卷(PVC):当 Pod 被创建时,Kubernetes 会根据 Pod 的定义(包括
volumeMounts
和PersistentVolumeClaim
)将所需的持久卷挂载到 Pod 中的指定路径。这一步是 在所有容器启动之前 完成的。 - 启动
initContainers
:卷挂载完成后,Kubernetes 会启动initContainers
,这些容器可以访问 Pod 中已经挂载的卷。 - 启动主容器:当 所有
initContainers
成功运行完成 后,Kubernetes 才会启动主容器(即 Elasticsearch 容器)。
所以可以看到,在initContainer启动之前,持久卷的挂载已经到了pod的指定路径。但是Kubernetes 动态分配的存储卷(通过 PVC 申请的持久卷)可能默认具有不适合 Elasticsearch 的文件权限。
Elasticsearch 容器通常以特定用户身份(如 UID 1000
)运行,而持久卷可能以 root 用户(UID 0
)创建。为了让 Elasticsearch 拥有正确的访问权限,initContainer
需要修改挂载卷的数据目录权限。因此第一个initContainer:fix-permissions
容器的运行确保数据目录的权限是正确的(chown -R 1000:1000
),这样 Elasticsearch 主容器启动时能够正常访问和写入数据。
initContainers:- name: fix-permissionsimage: busyboximagePullPolicy: IfNotPresentcommand: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"]securityContext:privileged: truevolumeMounts:- name: datamountPath: /usr/share/elasticsearch/data- name: increase-vm-max-mapimage: busyboximagePullPolicy: IfNotPresentcommand: ["sysctl", "-w", "vm.max_map_count=262144"]securityContext:privileged: true- name: increase-fd-ulimitimage: busyboximagePullPolicy: IfNotPresentcommand: ["sh", "-c", "ulimit -n 65536"]securityContext:privileged: true
increase-vm-max-map
容器本质上是一个轻量级的隔离环境,在容器中运行的应用程序实际上是一个linux进程。一般来讲,linux会限制每一个进程的内存映射数量,从而限制这个进程对资源的消耗。
Luence是elasticsearch的核心技术,是一个全文检索技术。Luence通过使用操作系统的 内存映射(memory-mapped I/O) 技术来高效访问索引文件,尤其是在处理大规模的索引时。内存映射允许 Lucene 将磁盘上的索引文件映射为进程的虚拟内存空间,因此可以像访问普通内存一样访问这些文件。
但是对于elasticsearch这种日志收集的容器,linux给的 65530个内存映射区域是不够的,当 Elasticsearch/Lucene 达到系统允许的最大内存映射区域数量时,操作系统会拒绝为新的索引文件或数据文件创建内存映射。这会导致 Lucene 无法加载新的索引文件,从而影响搜索和查询的执行。
所以这个increase-vm-max-map的容器,把vm-max-count的数量增加到了262144。
increase-fd-ulimit
这个容器用来提升进程可以打开的最大文件描述符的限制。
elasticsearch部署
随后进行elasticsearch的部署,发现三个容器正常启动:
[root@master 31efk]# kubectl get pods -n kube-logging31 -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
elastic-cluster31-0 1/1 Running 0 114s 10.244.104.62 node2 <none> <none>
elastic-cluster31-1 1/1 Running 0 110s 10.244.166.184 node1 <none> <none>
elastic-cluster31-2 1/1 Running 0 103s 10.244.104.63 node2 <none> <none>
由于elasticsearch没有对外暴露端口,可以进行端口映射,然后在集群外面访问
kubectl port-forward elastic-cluster31-0 9200:9200 -n kube-logging31
然后打开另一个端口,进行访问,可以看到很多内容。
[root@master 31efk]# curl http://localhost:9200/_cluster/state?pretty
{"cluster_name" : "k8s-logs","cluster_uuid" : "4fuxJ67HSxSBsVDfKIA8Qg","version" : 17,"state_uuid" : "PpwhJDXlQvarKzCMhUy2Og","master_node" : "UWRrJRlCQ-uDcqZ3M6Y4YQ","blocks" : { },"nodes" : {"UWRrJRlCQ-uDcqZ3M6Y4YQ" : {"name" : "elastic-cluster31-1","ephemeral_id" : "S3NLgNGrRBOjWuoNC1CcHw","transport_address" : "10.244.166.185:9300","attributes" : {"ml.machine_memory" : "3953741824","ml.max_open_jobs" : "20","xpack.installed" : "true"}},"PlT4KVDFSI2qztJqF99eYw" : {"name" : "elastic-cluster31-2","ephemeral_id" : "z1akgw8xTjurYdq1_DZ7-Q","transport_address" : "10.244.104.1:9300","attributes" : {"ml.machine_memory" : "3953741824","ml.max_open_jobs" : "20","xpack.installed" : "true"}},"XXd95XfcRgW69C1ls0ZFTw" : {"name" : "elastic-cluster31-0","ephemeral_id" : "aKjaY6m0TbCTnynDPdD7JA","transport_address" : "10.244.104.2:9300","attributes" : {"ml.machine_memory" : "3953741824","ml.max_open_jobs" : "20","xpack.installed" : "true"}}},"metadata" : {"cluster_uuid" : "4fuxJ67HSxSBsVDfKIA8Qg","cluster_coordination" : {"term" : 1,"last_committed_config" : ["UWRrJRlCQ-uDcqZ3M6Y4YQ","PlT4KVDFSI2qztJqF99eYw","XXd95XfcRgW69C1ls0ZFTw"],"last_accepted_config" : ["UWRrJRlCQ-uDcqZ3M6Y4YQ","PlT4KVDFSI2qztJqF99eYw","XXd95XfcRgW69C1ls0ZFTw"],
...
其实如果不进行端口映射,在elasticsearch的内部也可以进行访问。可以看到elasticsearch的三个pod,他们之间可以互相发现。
[root@master 31efk]# kubectl exec -it elastic-cluster31-0 -n kube-logging31 -- /bin/bash
Defaulted container "elasticsearch" out of: elasticsearch, fix-permissions (init), increase-vm-max-map (init), increase-fd-ulimit (init)
[root@elastic-cluster31-0 elasticsearch]# curl http://localhost:9200/_cat/nodes?v
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
10.244.166.185 18 95 1 0.13 0.20 0.18 mdi * elastic-cluster31-1
10.244.104.1 17 88 0 0.02 0.05 0.08 mdi - elastic-cluster31-2
10.244.104.2 23 88 0 0.02 0.05 0.08 mdi - elastic-cluster31-0
pv和pvc
[root@master 31efk]# kubectl get pv --all-namespaces -owide
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE VOLUMEMODE
pvc-124274e8-1977-4e46-895d-d6b9449682f7 10Gi RWO Delete Bound kube-logging31/data-elastic-cluster31-1 do-block-storage 145m Filesystem
pvc-677221e5-ed6a-417b-ac69-6b90304afa4e 10Gi RWO Delete Bound kube-logging31/data-elastic-cluster31-0 do-block-storage 148m Filesystem
pvc-944a372c-1c0d-442d-998a-b62c5be7ca21 10Gi RWO Delete Bound kube-logging31/data-elastic-cluster31-2 do-block-storage 144m Filesystem
[root@master 31efk]# kubectl get pvc --all-namespaces -owide
NAMESPACE NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE VOLUMEMODE
kube-logging31 data-elastic-cluster31-0 Bound pvc-677221e5-ed6a-417b-ac69-6b90304afa4e 10Gi RWO do-block-storage 149m Filesystem
kube-logging31 data-elastic-cluster31-1 Bound pvc-124274e8-1977-4e46-895d-d6b9449682f7 10Gi RWO do-block-storage 145m Filesystem
kube-logging31 data-elastic-cluster31-2 Bound pvc-944a372c-1c0d-442d-998a-b62c5be7ca21 10Gi RWO do-block-storage 145m Filesystem
相关文章:

[单master节点k8s部署]23.构建EFK日志收集平台(二)
部署elasticsearch集群 已经完成的工作:创建存储。首先配置了nfs存储提供商(nfs-deployment.yaml),然后通过创建存储类(storageclass.yaml)来将nfs服务器与存储类绑定: [rootmaster 31efk]# c…...

C#的属性(Property)应用说明(二)
Property的应用说明补充: 一.自定义逻辑: 可以在 get 和 set 访问器中包含自定义的逻辑。 public class Person {private string name;public string Name{get { return name; }set{if (string.IsNullOrWhiteSpace(value))throw new ArgumentException…...

VUE.js笔记
1.介绍vue Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任。 Vue 应用程序的基本…...

SpringBoot--yml配置文件的时间/大小的单位转换
原文网址:SpringBoot--yml配置文件的时间/大小的单位转换_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍SpringBoot的yml(properties)配置文件的时间/大小的单位转换。 概述 SpringBoot可以将yml中的配置绑定到一个Java类的字段&#x…...

【算法业务】互联网风控业务中的拒绝推断场景算法应用分享(涉及半监督算法、异常检测、变分自编码、样本权重自适应调整、迁移学习等)
1. 业务目标和任务描述 该项目是很早期的一个工作,属于互联网信贷风控场景,研究并应用信贷中的拒绝推断任务,处理方式也许对于目前的一些业务还有参考意义,因此这里做下分享。拒绝推断是指在信贷业务中,利用已知的接受…...

Windows PowerShell相关笔记
之前我写的一篇,把我的PS(power shell)该了配置文件 pyqt5vscode 配置坑笔记_vscode使用pyqt command failed-CSDN博客 文件里写的自动加载conda #region conda initialize # !! Contents within this block are managed by conda init !!…...

力扣9.24
2207. 字符串中最多数目的子序列 给你一个下标从 0 开始的字符串 text 和另一个下标从 0 开始且长度为 2 的字符串 pattern ,两者都只包含小写英文字母。 你可以在 text 中任意位置插入 一个 字符,这个插入的字符必须是 pattern[0] 或者 pattern[1] 。…...

NRF21540—低功耗蓝牙,蓝牙mesh、Thread和Zigbee和2.4 GHz私有协议范围扩展射频前端模块
nRF21540是一款射频前端模块(FEM),可用于改善短距离无线产品的传输范围和连接鲁棒性。作为一款辅助性设备,nRF21540是一种“即插即用型”的无线传输范围扩展器,可与nRF52和nRF53系列的高级多协议无线SoC搭配使用,所需的外部器件数…...

2024最新Linux Socket编程
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket&am…...

Linux下的驱动开发二
一、IO模型 I/O 模型在操作系统中用于处理应用程序与设备驱动之间的数据传输。I/O 通信模型的核心是解决程序与设备之间如何高效、合理地进行数据通信。不同的模型通过阻塞、非阻塞、同步、异步的方式来控制数据流和处理 I/O 请求。 注:在驱动开发中可以定义一个全…...

【JAVA报错已解决】 Java.lang.ArrayIndexOutOfBoundsException
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…...

2024 CSP 游记
J 组 初赛 早上也是五点钟就起来 打游戏 了。 考点在八达小学,除了感觉小、破、旧就没有其他感觉( 我妈也是成功的给我提前一小时到达考场。 拿到试卷后,瞄一眼,咋这么简单,和一本通的模拟卷难度一样?…...

双十一有什么推荐好物?,这些你不能错过的宝藏好物推荐
随着双十一的临近,这场盛大的购物狂欢蓄势待发!为了让大家不在琳琅满目的商品中徘徊,琪琪用心归纳了一份购物清单,分享那些我亲自使用过,觉得必须拥有的商品。 这些商品不仅价格公道,而且质量上乘…...

NSSCTF [HUBUCTF 2022 新生赛]simple_RE(变种base64编码)
文件无壳 拖入IDA中 shiftF12查看可疑字符串 发现两串字符串 一看这两个等于号就猜测是base64编码 进入主函数看看 这段代码是一个简单的 C 语言程序,主要功能是接受用户输入的字符串作为“flag”,然后通过对输入的字符串进行一些处理和比较来验证是否输…...

clickhouse使用extract提取分号之前,之后,中间的内容
Area:‘安徽;宣城;宣州’,要提取分号之前,两个分号之前,最后一个分号之后的内容作为省市区 这是最后得到的正确的结果,感谢chatgpt 刚开始本来想使用splitByString -- 宣城 select splitByString(;,安徽;宣城;宣州)[2…...

Unity3D Compute Shader同步详解
前言 在Unity3D中,Compute Shader是一种强大的工具,它利用GPU的并行处理能力来执行复杂的计算任务,从而减轻CPU的负担,提高游戏的性能和效率。然而,由于GPU的工作方式,对共享资源的访问需要特别注意同步问…...

3D模型在UI设计中应用越来越多,给UI带来了什么?
当前3D模型在UI设计中应用很多,极大地拓展了UI设计的发挥空间,也拓宽了UI的应用领域,本文分享下UI中引入3D模型到底能带来什么价值. 3D模型在UI设计中的应用可以给用户界面带来以下几个方面的好处: 更真实的视觉体验:…...

前端框架的选择与考量:一场技术的盛宴
在当今快速迭代的Web开发领域,前端框架的选择成为了项目启动初期不可忽视的重要环节。随着React、Vue、Angular等主流框架的崛起,以及Svelte、Quasar等新兴力量的加入,开发者们面临着前所未有的选择难题。本文旨在探讨前端框架的选择依据、主…...

第五部分:7---信号的捕捉
目录 信号递达期间,该信号会被屏蔽直到递达完成。 sigaction实现信号的捕捉: 案例:在处理2号信号时屏蔽3号信号。 子进程退出向父进程发送SIGCHLD信号: 信号递达期间,该信号会被屏蔽直到递达完成。 当某个信号的处…...

HarmonyOS鸿蒙开发实战( Beta5.0)页面加载效果实现详解实践案例
鸿蒙HarmonyOS开发实战往期必看文章:(持续更新......) HarmonyOS NEXT应用开发性能实践总结(持续更新......) HarmonyOS NEXT应用开发案例实践总结合集(持续更新......) 一分钟了解”纯血版&…...

计算机网络中的VLAN详解
文章目录 计算机网络中的VLAN详解一、引言二、VLAN的作用与原理1、VLAN的作用2、VLAN的工作原理2.1、VLAN标签(Tag) 三、VLAN的配置与接口类型1、VLAN的配置2、接口类型 四、VLAN的应用场景1、企业网络2、数据中心3、教育网络 五、VLAN间的通信六、总结 …...

Nacos学习
系列文章目录 JavaSE基础知识、数据类型学习万年历项目代码逻辑训练习题代码逻辑训练习题方法、数组学习图书管理系统项目面向对象编程:封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习集合学习IO流、多线程学习仓库管理系统JavaSE项目员工…...

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0926)
十四、文章分类添加编辑 [element-plus 弹层] Git仓库:https://gitee.com/msyycn/vue3-hei-ma.git 点击显示弹层 准备弹层 const dialogVisible ref(false)<el-dialog v-model"dialogVisible" title"添加弹层" width"30%">…...

验收测试:从需求到交付的全程把控!
在软件开发过程中,验收测试是一个至关重要的环节。它不仅是对软件质量的把关,也是对整个项目周期的全程把控。从需求分析到最终的软件交付,验收测试都需要严格进行,以确保软件能够符合预期的质量和性能要求。 一、需求分析阶段 在…...

第十七节 鼠标的操作与相应
知识点 -event代表鼠标事件类型 -EVENT_LBUTTONDOWN鼠标左键按下 -EVENT_LBUTTONUP鼠标左键抬起 -EVENT_LBUTTONMOVE鼠标及移动 Point sp(-1, -1); Point ep(-1, -1); Mat temp; static void on_draw(int event, int x, int y, int flags, void* userdata) { Mat imag…...

深圳·2025胶粘剂展会 BOND第六届胶展
BOND第六届胶展、2025大湾区国际胶粘剂及密封剂展览会 时间:2025年6月25-27日 地址:深圳国际会展中心(新馆) UV胶、快干胶、结构粘结胶、导热胶、低温黑胶、硅胶、SMT贴片红胶、底部填充胶、低温热固胶、COB黑胶、围堰填充胶、U…...

什么是网络安全自动化以及优势与挑战
目录 网络安全自动化的工作原理 网络安全自动化的好处 增强的安全功能 改善表现和姿势 降低安全成本 简化的安全合规性和审计 更好的端点管理 网络安全自动化的挑战 耗时且容易出错的安全流程 可见性降低,风险和成本增加 合规管理 有用的网络安全自动化…...

java中的ArrayList和LinkedList的底层剖析
引入: 数据结构的分类,数据结构可以分成:线性表,树形结构,图形结构。 线性结构(线性表)包括:数组、链表、栈队列 树形结构:二叉树、AVL树、红黑树、B树、堆、Trie、哈夫曼树、并查集 图形结构:邻接矩阵、邻接表 线性表是具有存…...

占领矩阵-第15届蓝桥省赛Scratch中级组真题第5题
[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第190讲。 如果想持续关注Scratch蓝桥真题解读,可以点击《Scratch蓝桥杯历年真题》并订阅合集,…...

[论文笔记] Chain-of-Thought Reasoning without Prompting
分析: 在CoT解码路径中,我们可以看到模型在第三个位置(𝑖? = 3)开始展示推理过程,并且给出了正确的答案“8”。模型首先识别出说话者有3个苹果,然后识别出爸爸比说话者多2个,即5个苹果,最后将这两个数量相加得到总数8个苹果。 这个例子表明,通过探索替代的解码路径…...