在k8s中部署单机版Elasticsearch,并进行数据持久化

🐇明明跟你说过:个人主页

🏅个人专栏:《洞察之眼:ELK监控与可视化》🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、Elasticsearch简介

2、k8s简介

二、存储准备

1、创建PV

2、创建PVC 

三、部署Elasticsearch

1、编写YAML文件

2、创建elasticsearch

3、为es创建Service

4、访问测试 


 

一、引言

1、Elasticsearch简介

Elasticsearch 是一个开源的分布式搜索和分析引擎,最初由 Elasticsearch N.V. 公司开发,并于 2010 年首次发布。它建立在 Apache Lucene 基础之上,提供了分布式的实时搜索和分析功能,被广泛应用于各种场景,包括日志分析、全文搜索、监控和可视化等。

以下是 Elasticsearch 的一些重要特点和功能:

1. 分布式架构:

  • Elasticsearch 是一个分布式系统,数据可以水平扩展到多个节点上存储和处理。
  • 数据被分割成多个分片(Shard),每个分片可以被复制到多个副本(Replica),以提高数据的可用性和容错性。

2. 实时搜索:

  • Elasticsearch 提供了快速的实时搜索功能,可以在大规模数据集上快速地进行搜索、过滤和排序。
  • 支持复杂的搜索查询语法和全文搜索功能,可以满足各种搜索需求。

3. 多种数据类型:

  • Elasticsearch 支持多种数据类型的存储和索引,包括文本、数字、日期、地理位置等。
  • 支持结构化数据和非结构化数据的索引和查询。

4. 强大的聚合和分析:

  • Elasticsearch 提供了丰富的聚合(Aggregation)功能,可以对数据进行统计、分组、计算等操作。
  • 支持各种聚合函数和桶(Bucket)操作,可以生成复杂的数据分析报表和可视化。

5. RESTful API:

  • Elasticsearch 提供了基于 RESTful API 的接口,支持各种 HTTP 请求和 CRUD 操作。
  • 开发者可以使用各种编程语言和工具与 Elasticsearch 进行交互,实现数据的索引、搜索和分析。

6. 可扩展性和灵活性:

  • Elasticsearch 提供了丰富的插件和扩展机制,可以根据需求定制和扩展功能。
  • 支持与其他开源工具和系统集成,如 Logstash、Kibana、Beats 等,构建完整的日志分析和监控解决方案。

2、k8s简介

Kubernetes单词起源于希腊语, 是“舵手”或者“领航员、飞行员”的意思。

Kubernetes(简称K8s)的前世今生可以追溯到谷歌(Google)内部的一个项目,它起源于2003年,当时谷歌正面临着不断增长的应用程序和服务的管理挑战。这个项目最初被称为"Borg",是一个早期的容器编排系统。Borg 的成功经验成为 Kubernetes 开发的契机。

 有关k8s起源的介绍,请参考《初识K8s之前世今生、架构、组件、前景》这篇文章

​​​

Kubernetes的优点包括可移植性、可伸缩性和扩展性。它使用轻型的YAML清单文件实现声明性部署方法,对于应用程序更新,无需重新构建基础结构。管理员可以计划和部署容器,根据需要扩展容器并管理其生命周期。借助Kubernetes的开放源代码API,用户可以通过首选编程语言、操作系统、库和消息传递总线来构建应用程序,还可以将现有持续集成和持续交付(CI/CD)工具集成。

二、存储准备

1、创建PV

编辑YAML文件,创建PV,用于ES数据存储使用

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 5Gi  # 指定存储容量
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany  # 允许多个节点同时读写
  nfs:
    path: /data/csdn  # NFS 服务器上的共享路径
    server: 192.168.40.132 # NFS 服务器的地址

 

在这个 YAML 文件中:

  • apiVersion:指定 Kubernetes API 的版本。
  • kind:指定资源类型,这里是 PersistentVolume。
  • metadata:指定持久卷的元数据,包括名称等。
  • spec:指定持久卷的规格。
  • capacity:指定存储容量。
  • volumeMode:指定卷的模式,这里是文件系统模式。
  • accessModes:指定访问模式,这里是 ReadWriteMany,表示多个节点可以同时读写。
  • persistentVolumeReclaimPolicy:指定持久卷回收策略,这里是 Retain,表示删除 PVC 后保留持久卷数据。
  • storageClassName:指定存储类名称,后续 PVC 可以引用该名称。
  • nfs:指定 NFS 存储的详细信息。
  • path:指定 NFS 服务器上的共享路径。
  • server:指定 NFS 服务器的地址。

 

将以上内容保存到一个 YAML 文件中,例如 nfs-pv.yaml,然后可以使用 kubectl apply -f nfs-pv.yaml 命令在 Kubernetes 集群中创建这个持久卷。

2、创建PVC 

编写YAML文件

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany  # 与 PV 的访问模式匹配
  resources:
    requests:
      storage: 2Gi  # 请求的存储容量

在这个 YAML 文件中:

  • apiVersion:指定 Kubernetes API 的版本。
  • kind:指定资源类型,这里是 PersistentVolumeClaim。
  • metadata:指定持久卷声明的元数据,包括名称等。
  • spec:指定持久卷声明的规格。
  • accessModes:指定访问模式,这里是 ReadWriteMany,与对应的 PV 的访问模式匹配。
  • resources.requests.storage:指定请求的存储容量,这里是 2Gi,表示请求至少 2GB 的存储容量。


将以上内容保存到一个 YAML 文件中,例如 nfs-pvc.yaml,然后可以使用 kubectl apply -f nfs-pvc.yaml 命令在 Kubernetes 集群中创建这个持久卷声明。创建成功后,Kubernetes 将会自动将该 PVC 与对应的 PV 进行绑定。

三、部署Elasticsearch

1、编写YAML文件

apiVersion: apps/v1  
kind: Deployment  
metadata:  
  name: elasticsearch  
  labels:  
    app: elasticsearch  
spec:  
  replicas: 1  
  selector:  
    matchLabels:  
      app: elasticsearch  
  template:  
    metadata:  
      labels:  
        app: elasticsearch  
    spec:  
      containers:  
      - name: elasticsearch  
        image: elasticsearch:7.17.18  # 使用合适的版本  
        ports:  
        - containerPort: 9200  
          name: http  
        - containerPort: 9300  
          name: transport  
        volumeMounts:  
        - name: elasticsearch-data  
          mountPath: /usr/share/elasticsearch/data  
        env:  
          - name: "discovery.type"  
            value: "single-node"  
          - name: "node.name"  
            value: "elasticsearch-node"  
          # 根据需要添加其他环境变量和配置  
      volumes:  
      - name: elasticsearch-data  
        persistentVolumeClaim:  
          claimName: nfs-pvc  

在这个文件中:

  • apiVersion kind 分别指定了 Kubernetes 资源的 API 版本和类型,这里是 Deployment。
  • metadata 部分包含了该 Deployment 的元数据,如名称和标签。
  • spec 部分指定了 Deployment 的规格,包括副本数量、选择器、容器模板等。
  • replicas 指定了副本数量,这里是 1。
  • selector 指定了用于选择 Pod 的标签。
  • template 包含了 Pod 的模板规格,包括容器、卷等。
  • containers 中描述了要在 Pod 中运行的容器。
  • image 指定了 Elasticsearch 容器的镜像。
  • ports 定义了容器的端口映射。
  • volumeMounts 定义了将持久卷挂载到容器的路径。
  • env 中定义了容器的环境变量。
  • volumes 中定义了持久卷声明,这里使用了之前创建的名为 nfs-pvc 的持久卷声明。

2、创建elasticsearch

[root@master csdn]# kubectl  apply -f  es.yaml

查看Pod状态

3、为es创建Service

这一步是为了能在集群外部使用es

编写创建Service的YAML文件

apiVersion: v1
kind: Service
metadata:
  name: elasticsearch
  labels:
    app: elasticsearch
spec:
  type: NodePort
  ports:
  - port: 9200
    name: http
  selector:
    app: elasticsearch

在这个文件中:

  • apiVersion kind 分别指定了 Kubernetes 资源的 API 版本和类型,这里是 Service。
  • metadata 部分包含了该 Service 的元数据,如名称和标签。
  • spec 部分指定了 Service 的规格。
  • type: NodePort 指定了 Service 的类型为 NodePort,这意味着该 Service 将会在每个节点上开放一个相同的端口,外部可以通过节点的 IP 地址和端口访问 Service。
  • ports 定义了 Service 监听的端口,这里指定了端口号为 9200,并命名为 http。
  • selector 指定了该 Service 应该路由流量到哪些 Pod。在这个例子中,它将流量路由到具有 app: elasticsearch 标签的 Pod。

创建Service

 

[root@master csdn]# kubectl  apply -f  es.yaml

查看svc,找到nodeport端口

[root@master csdn]# kubectl get svc

4、访问测试 

在浏览器输入node节点的IP加svc的端口

如果可以访问到es的Web界面,则部署成功

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Kubernetes的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/627342.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IP代理如何帮助SEO进行优化?

IP代理在SEO优化中扮演着重要的角色,它通过多种方式帮助提升网站的搜索排名和可见性。以下是IP代理如何帮助SEO进行优化的详细阐述: 第一点,数据采集与分析:在SEO过程中,大量的数据是必不可少的。通过使用IP代理&…

随笔:贝特弹琴

半年前,我买了一架朗朗代言的智能电子琴。所谓智能是指,它配套的手机软件知道你在按哪个键,它还能让任意按键发光。用专业术语说,它的键盘具有输入和输出功能,和软件组合起来是一个完整的计算机系统。 随着软件练习曲…

Kubernetes学习-深入Pod篇(二) 探针技术详解与应用

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Kubernetes渐进式学习-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 目录 1. 前言 2. 探针是什么 3. 探针的分类 3.1. StartupProbe(启动…

Ubuntu安装k8s集群

文章目录 Ubuntu安装k8s3台主机前置操作:3台主机k8s前置安装命令:k8s安装命令: 节点加入 Ubuntu安装k8s 官方文档:https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ 默认3台机子 注…

Java | Leetcode Java题解之第90题子集II

题目&#xff1a; 题解&#xff1a; class Solution {List<Integer> t new ArrayList<Integer>();List<List<Integer>> ans new ArrayList<List<Integer>>();public List<List<Integer>> subsetsWithDup(int[] nums) {Arra…

Postgresql中JIT函数能否inline的依据function_inlinable

相关 《Postgresql源码&#xff08;128&#xff09;深入分析JIT中的函数内联llvm_inline》 《LLVM的ThinLTO编译优化技术在Postgresql中的应用》 前置阅读&#xff1a;《Postgresql源码&#xff08;128&#xff09;深入分析JIT中的函数内联llvm_inline》 在JIT inline函数的过…

【C#】学习获取程序执行路径,Gemini 帮助分析

一、前言&#xff1a; 在Delphi中&#xff0c;如果想要获取当前执行程序的目录&#xff0c;程序代码如下&#xff1a; ExtractFilePath(ParamStr(0)); 今天在分析一个别人做的C#程序时看到了一段C#代码&#xff0c;意思是获取执行程序所在的文件目录&#xff1a; public stat…

Spring Boot集成dubbo快速入门Demo

1.什么是dubbo&#xff1f; Apache Dubbo 是一款微服务开发框架&#xff0c;它提供了 RPC通信 与 微服务治理 两大关键能力。这意味着&#xff0c;使用 Dubbo 开发的微服务&#xff0c;将具备相互之间的远程发现与通信能力&#xff0c; 同时利用 Dubbo 提供的丰富服务治理能力…

(教程)gpt-4o如何使用,怎么体验?gpt-4o和gpt-4-turbo的区别

今天OpenAI发布了gpt-4o&#xff0c;我体验之后&#xff0c;gpt-4o简直逆天了。中文能力也挺别强。速度比现在的gpt4还要快。 早在 5 月 11 日&#xff0c;Sam 就在推文中表示&#xff1a;OpenAI 并没有推出 GPT-5&#xff0c;或搜索引擎&#xff0c;但团队一直在努力研发一些…

halo博客--解决恶意刷评论的问题

原文网址&#xff1a;halo博客--解决恶意刷评论的问题_IT利刃出鞘的博客-CSDN博客 简介 本文介绍halo博客如何通过设置评论次数来解决恶意刷评论的问题。 评论功能要设置频率的限制&#xff0c;否则可能被人一直刷评论&#xff0c;然后数据库存的垃圾评论越来越多&#xff0…

51 单片机[2-2]:LED闪烁

摘要&#xff1a; 本文使用STC89C52RC单片机实现单个LED闪烁 新建一个项目&#xff0c;具体步骤见[2-1] 分析&#xff1a; 要使 LED 闪烁&#xff08;以D1为例&#xff09;&#xff0c;就要先让 P2 0xfe; 再让 P2 0xff; 先在keil5中把程序写成这样&#xff1a; #include &…

答辩PPT框架如何搭建?文心一言AI辅助构建

很多快要毕业的同学在做答辩PPT的时候总是感觉毫无思路&#xff0c;一窍不通。但这并不是你们的错&#xff0c;对于平时没接触过相关方面&#xff0c;第一次搞答辩PPT的人来说&#xff0c;这是很正常的一件事。一个好的答辩PPT可以根据以下分为以下几部分来写。 1.研究的背景和…

#自学习# 记一次py脚本打开浏览器页面

在项目总结中&#xff0c;遇到系统后台利用浏览器拉起一个已知路径页面的需求&#xff0c;趁着机会整理下。实现起来比较简单&#xff0c;浏览器默认谷歌。 一、技术原理 Selenium&#xff1a;Selenium 是一个用于自动化 Web 浏览器的工具&#xff0c;可模拟用户在浏览器中的各…

pnpm:无法加载文件 C:\Users\PC\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本。

使用pnpm命令启动vue时报了个错&#xff1a; 解决起来也简单&#xff0c;右击开始菜单&#xff0c;用管理员身份打开终端。win11的如下图&#xff1a; win10我记得应该是PowerShell&#xff08;管理员&#xff09;&#xff0c;这样的。 打开之后执行命令&#xff1a; set-…

cpu缓存一致性问题---cache写策略

为什么会有cpu缓存一致性问题&#xff1f; cpu缓存一致性指的&#xff1a;是缓存中和所其对应在主存中的数据的一致性。 因为cpu运算产生新数据后基于写回策略只更新缓存的值会导致缓存和主存不一致问题 解决cpu缓存一致性问题前&#xff0c;先了解写回策略是什么 了解写回策…

代码随想录——在每个树行中找最大值(Leetcode515)

题目链接 层序遍历 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) …

优雅谈论大模型8:神经网络与矩阵

向量与矩阵 上个章节的神经网络是为了解Transformer或者Mamba做好铺垫&#xff0c;在和后辈交流过程中发现有个障碍&#xff0c;那就是向量和矩阵。其实向量和矩阵的表达方式不是所有人都很习惯。在继续下面的章节之前小编认为有必要将向量、矩阵和神经网络做下补充解释。 向…

【并发程序设计】4. exec函数族

4.exec函数族 exec函数族是一组用于在进程中启动另一个程序来替换当前进程的函数。 exec函数族主要用于在当前进程内部执行一个新的程序&#xff0c;而不会创建新的进程。 子进程调用exec函数&#xff0c;族父进程不受影响。进程当前内容被指定的程序替换&#xff0c;但进程…

JAVA实验项目(二): 抽象类、接口的定义与使用

实验项目二 抽象类、接口的定义与使用 Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&…

Python游戏开发库:开启游戏编程之旅

引言 Python凭借其简洁明了的语法和丰富的库支持&#xff0c;在游戏开发领域占有一席之地。对于希望进入游戏编程世界的开发者来说&#xff0c;Python提供了一个理想的起点。本文将介绍几个关键的Python游戏开发库&#xff0c;帮助您开启游戏编程之旅。 第一部分&#xff1a;P…