k8s部署新版elasticsearch+kibana并配置快照备份

版本:es 7.17.6 kibana 7.17.6 k8s:1.19.16

一、介绍

Elasticsearch和Kibana是一对强大的开源工具,通常一起使用以构建实时数据分析和可视化解决方案。

  • Elasticsearch: Elasticsearch是一个分布式、高性能的实时搜索和分析引擎。它构建在开源搜索引擎库Lucene之上,并提供了一个分布式、可扩展的架构,用于存储、检索和分析大规模的数据。Elasticsearch支持全文搜索、结构化搜索、地理空间搜索等多种查询方式,并提供了强大的聚合和分析功能。它还支持实时数据的索引和搜索,使得您可以快速地在大数据集中进行复杂的搜索和分析操作。

  • Kibana: Kibana是一个开源的数据可视化工具,专门用于分析和展示Elasticsearch中的数据。它提供了直观的图表、图形和仪表盘,可用于实时监控和可视化大规模数据集。Kibana允许用户通过仪表盘配置和自定义可视化组件,然后通过交互式的界面进行数据的探索和导航。它还支持复杂的数据过滤、查询和聚合操作,使用户能够深入了解数据并发现隐藏的模式和见解。

通过将Elasticsearch和Kibana结合在一起,可以构建强大的实时数据分析和可视化解决方案。Elasticsearch负责高性能的数据存储、检索和分析,而Kibana则提供了直观易用的界面和工具,使您能够将数据转化为有意义的见解和洞察。无论是监控日志数据、分析业务指标,还是构建实时仪表盘和报告,Elasticsearch和Kibana的组合可以帮助您实现强大的数据分析和可视化需求。

二、部署es

1、创建es namespace

apiVersion: v1
kind: Namespace
metadata:
   name: elk
   labels:
     name: elk

2、创建es StorageClass和pvc

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: es-storageclass
provisioner: nfs-storage-01
allowVolumeExpansion: true
reclaimPolicy: Retain
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: es-storageclass
  namespace: elk
  annotations:
    volume.beta.kubernetes.io/storage-class: "es-storageclass"
spec:
  resources:
    requests:
      storage: 200Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce

3、通过sts的方式来部署es集群

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: es-cluster
  namespace: elk
spec:
  # 必须设置
  serviceName: es-cluster-svc
  replicas: 3
  selector:
    # 设置标签
    matchLabels:
      app: es-cluster
  template:
    metadata:
      labels:
        app: es-cluster
    spec:
      # 初始化容器
      initContainers:
        - name: increase-vm-max-map
          image: busybox
          command: ["sysctl", "-w", "vm.max_map_count=262144"]
          securityContext:
            privileged: true
        - name: increase-fd-ulimit
          image: busybox
          command: ["sh", "-c", "ulimit -n 65536"]
          securityContext:
            privileged: true
        - name: increase-es-cluster
          image: busybox
          command: ["/bin/sh", "-c", "mkdir -p /data/esbak","chown -R elasticsearch.elasticsearch /data/esbak" ,"chmod -R 777 /data/esbak"]
          securityContext:
            privileged: true
      containers:
        - name: es-container
          image: elasticsearch:7.17.6
          ports:
            # 容器内端口
            - name: rest
              containerPort: 9200
              protocol: TCP
          # 设置挂载目录
          volumeMounts:
            - name: es-data
              mountPath: /usr/share/elasticsearch/data
            - name: es-plugins
              mountPath: /usr/share/elasticsearch/plugins
              #快照持久化路径
            - name: snapshot-volume
              mountPath: /data/esbak      
          # 设置环境变量
          env:
            # 自定义集群名
            - name: cluster.name
              value: k8s-es
            # 定义节点名,使用metadata.name名称
            - name: node.name
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            # 初始化集群时,ES从中选出master节点
            - name: cluster.initial_master_nodes
              # 对应metadata.name名称加编号,编号从0开始
              value: "es-cluster-0,es-cluster-1,es-cluster-2"
            - name: discovery.zen.minimum_master_nodes
              value: "2"
              #es快照备份路径
            - name: path.repo
              value: /data/esbak
            # 发现节点的地址,discovery.seed_hosts的值应包括所有master候选节点
            # 如果discovery.seed_hosts的值是一个域名,且该域名解析到多个IP地址,那么es将处理其所有解析的IP地址。
            - name: discovery.seed_hosts
              value: "es-cluster-0.es-cluster-svc,es-cluster-1.es-cluster-svc,es-cluster-2.es-cluster-svc"
            # 配置内存
            - name: ES_JAVA_OPTS
              value: "-Xms8192m -Xmx8192m"
            - name: network.host
              value: "0.0.0.0"
              #允许来自任意源的跨域请求
            - name: "http.cors.allow-origin"
              value: "*"
              #启用跨域资源共享
            - name: "http.cors.enabled"
              value: "true"
              #索引分片数量
            - name: "number_of_shards"
              value: "5"
              #分片的副本数量
            - name: "number_of_replicas"
              value: "2"

  volumeClaimTemplates:
    - metadata:
        # 对应容器中volumeMounts.name
        name: es-data
        labels:
          app: es-volume
      spec:
        accessModes: [ "ReadWriteOnce" ]
        storageClassName: es-storageclass
        resources:
          requests:
            storage: 50Gi
    - metadata:
        name: es-plugins
      spec:
        accessModes: [ "ReadWriteOnce" ]
        storageClassName: es-storageclass
        resources:
          requests:
            storage: 2Gi
    - metadata:
        name: es-plugins
      spec:
        accessModes: [ "ReadWriteOnce" ]
        storageClassName: es-storageclass
        resources:
          requests:
            storage: 2Gi
    - metadata:
        name: snapshot-volume
      spec:
        accessModes: [ "ReadWriteOnce" ]
        storageClassName: es-storageclass
        # 申请资源的大小
        resources:
          requests:
            storage: 100Gi          

4、部署es svc

apiVersion: v1
kind: Service
metadata:
  name: es-svc
  namespace: elk
spec:
  selector:
    app: es-cluster
  type: NodePort
  ports:
  - name: cluster
    port: 9200
    targetPort: 9200
    nodePort: 19200
  - name: transport
    port: 9300
    targetPort: 9300

5、发布es

kubectl applf -f ./

 6、验证

ip+端口验证一下,浏览器访问、curl命令都可以

三、部署es-head插件

这个插件方便我们查询es集群状态

 1、编写yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: elasticsearch-head
  name: elasticsearch-head
  namespace: elk
spec:
  replicas: 1
  selector:
    matchLabels:
      app: elasticsearch-head
  template:
    metadata:
      labels:
        app: elasticsearch-head
    spec:
      containers:
      - image: springgos/es-head:latest
        imagePullPolicy: Always
        name: elasticsearch-head
        ports:
        - containerPort: 9100
          name: 9100tcp191001
          protocol: TCP
        resources: {}

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: elasticsearch-head
  name: elasticsearch-head
  namespace: elk
spec:
  ports:
  - name: 9100tcp191001
    nodePort: 19100
    port: 9100
    protocol: TCP
    targetPort: 9100
  selector:
    app: elasticsearch-head
  type: NodePort

2、访问验证

 

 四、部署kibana

1、编写kibana-deploy.yaml和svc

注意:kibana必须跟es保持同一个版本

 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kibana
  namespace: elk
spec:
  selector:
    matchLabels:
      app: kibana
  replicas: 1
  template:
    metadata:
      labels:
        app: kibana
    spec:
      restartPolicy: Always
      containers:
        - name: kibana
          image: kibana:7.17.6
          imagePullPolicy: Always
          ports:
            - containerPort: 5601
          env:
            - name: ELASTICSEARCH_HOSTS
              value: http://es-cluster-svc:9200
---
apiVersion: v1
kind: Service
metadata:
  name: kibana
  namespace: elk
spec:
  type: NodePort
  ports:
    - name: kibana
      port: 5601
      targetPort: 5601
      nodePort: 25601
  selector:
    app: kibana

然后发布应用  kubectl applf -f ./

2、浏览器验证

如果es集群没有启动正常这里面是会报错的

 五、通过kibana来创建es快照

1、什么是es快照

在Elasticsearch中,快照备份是一种将索引和集群的状态数据保存到可恢复的快照中的机制。通过创建快照,你可以在需要时恢复数据,或在不同的集群之间迁移数据。

  1. 存储库(Repository):存储库是用来保存快照数据的位置,可以是本地文件系统、远程文件系统或云存储服务。你需要在Elasticsearch中配置一个存储库,指定存储快照的位置。
  2. 快照(Snapshot):快照是在存储库中保存的索引和集群状态的副本。它包含了所有或指定的索引的数据、设置和元数据信息。
  3. 过程(Process):创建快照的过程涉及协调节点(coordinating node)与数据节点(data node)之间的协作。协调节点负责指导数据节点将数据写入存储库,并协调快照的创建过程

2、创建es快照

(1)、点击Stack Management

 (2)、创建快照库

 

参数解释

(File system location

这个是定义快照仓库路径,我这边直接在es容器里面创建了所以我直接写的/data/esbak,填写的目录一定要存在哟,要不保存会报错提示没有这个目录。

Snapshot compression

参数用于压缩快照的索引映射和设置文件,而数据文件本身不会被压缩。减少快照对磁盘空间占用。

Chunk size

“分块大小”是用于在快照过程中将大文件分成较小单元的概念。当创建快照时,通常会将数据分割成更小、可管理的块,以便进行高效的存储和备份。

Max snapshot bytes per second

“Max snapshot bytes per second”是每个节点创建快照的最大速率。

在数据存储系统中,当创建快照时,系统会复制数据并保存为快照。但是,为了避免对系统的过度负载,可以设置每个节点可以每秒复制的最大字节数。

Max restore bytes per second

Max restore bytes per second” 是每个节点进行快照还原的最大速率。

在数据存储系统中,当需要从快照还原数据时,系统会将快照中的数据复制回原始存储位置或目标位置。为了避免对系统造成过载,可以设置每个节点每秒复制的最大字节数。

通过设置 “Max restore bytes per second”,可以限制每个节点进行快照还原的速率。这有助于平衡系统资源的使用,确保还原操作不会过多地消耗节点的处理能力或网络带宽。

Read-only

表示只有一个集群可以对该存储库进行写入操作,而其他所有集群只能进行读取操作。

 3、创建定时备份

 

参数解释

Data streams and indices

要备份索引和数据流,可以手动选择它们或定义索引模式以动态匹配它们

参数解释

Data streams and indices

要备份索引和数据流,可以手动选择它们或定义索引模式以动态匹配它们

Ignore unavailable indices

在进行快照时忽略不可用的索引。否则,整个快照将会失败。

在进行数据快照时,如果其中一个索引不可用(比如索引已被删除或处于不可访问状态),默认情况下整个快照操作都将失败。为了避免这种情况,可以选择忽略不可用的索引。

通过设置 “忽略不可用的索引”,即使某些索引在快照时不可用,快照操作也会继续进行,并且其他可用的索引将会被备份。这样可以确保整个快照操作的成功。

Allow partial indices

允许备份部分索引,即允许备份包含不可用主分片的索引。否则,整个快照将会失败。

在进行数据快照时,如果某个索引的主分片不可用(比如主分片丢失或不可访问),默认情况下整个快照操作都将失败。为了避免这种情况,可以选择允许备份部分索引。

通过设置 “允许部分索引”,即使某个索引的主分片不可用,快照操作仍将继续进行,并且其他可用的分片将被备份。这样可以确保整个快照操作的成功。

Include global state

是指在进行数据快照时,将全局集群状态和系统索引作为快照的一部分进行存储。

全局集群状态包含了有关整个Elasticsearch集群的配置和元数据信息,例如索引模板、映射和设置等。系统索引包含了与Elasticsearch集群运行和管理相关的索引,例如集群状态索引(cluster state)、索引模板索引、别名索引等。

通过包含全局状态,可以完整地备份整个集群配置和元数据,以便在需要时进行还原或迁移。

在进行快照时忽略不可用的索引。否则,整个快照将会失败。

在进行数据快照时,如果其中一个索引不可用(比如索引已被删除或处于不可访问状态),默认情况下整个快照操作都将失败。为了避免这种情况,可以选择忽略不可用的索引。

通过设置 “忽略不可用的索引”,即使某些索引在快照时不可用,快照操作也会继续进行,并且其他可用的索引将会被备份。这样可以确保整个快照操作的成功。

参数解释

Snapshots to retain

最小快照数: 这是策略中必须保留的最低快照数。无论其他条件如何,都将保留至少此数量的快照。这确保了在最坏的情况下至少有一定数量的备份可供恢复。

最大快照数: 这是策略中允许保留的最大快照数。超过此数量的快照将被删除,以避免无限增加存储空间的需求。保留较少的快照可以节省存储空间,并提供更好的管理快照的能力。

 

 

注意一下,kibana这个时区是美国时区,跟中国时区相差12小时

六、验证

在kibana和服务器看已经有备份了,快照备份成功

 

 

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

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

相关文章

【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题三时间序列预测Python代码分析

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B:美国纽约公共自行车使用量预测分析 问题三时间序列预测Python代码分析 相关链接 【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题一Python代码分析 【2023 年…

【数据结构】AVL树/红黑树

目录 1.AVL树(高度平衡二叉搜索树) 10.1.基本概念 10.2.实现 10.2.1.AVL树节点的定义 10.2.2.AVL树的插入 10.2.3.AVL树的旋转 1.新节点插入较高左子树的左侧---左左:右单旋 2.新节点插入较高右子树的右侧---右右:左单旋 3.新节点…

第三章 HL7 架构和可用工具 - 使用 HL7 架构结构页面

文章目录 第三章 HL7 架构和可用工具 - 使用 HL7 架构结构页面使用 HL7 架构结构页面查看文档类型列表查看消息结构查看段结构 第三章 HL7 架构和可用工具 - 使用 HL7 架构结构页面 使用 HL7 架构结构页面 通过 HL7 架构页面,可以导入和查看 HL7 版本 2 架构规范。…

Tensorflow benchmark 实操指南

环境搭建篇见环境搭建-CentOS7下Nvidia Docker容器基于TensorFlow1.15测试GPU_东方狱兔的博客-CSDN博客 1. 下载Benchmarks源码 从 TensorFlow 的 Github 仓库上下载 TensorFlow Benchmarks,可以通过以下命令来下载 https://github.com/tensorflow/benchmarks 我…

Jenkins 安装构建

一、CentOS 安装 1. 使用该存储库 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key 2. 安装 Java yum install fontconfig java-11-openjdk配…

【iOS】iOS持久化

文章目录 一. 数据持久化的目的二. iOS中数据持久化方案三. 数据持有化方式的分类1. 内存缓存2. 磁盘缓存SDWebImage缓存 四. 沙盒机制的介绍五. 沙盒目录结构1. 获取应用程序的沙盒路径2. 访问沙盒目录常用C函数介绍3. 沙盒目录介绍 六. 持久化数据存储方式1. XML属性列表2. P…

Appium+python自动化(二十)- Monkey(猴子)日志(超详解)

简介 日志是非常重要的,用于记录系统、软件操作事件的记录文件或文件集合,可分为事件日志和消息日志。具有处理历史数据、诊断问题的追踪以及理解系统、软件的活动等重要作用,在开发或者测试软系统过程中出现了问题,我们首先想到的…

CSDN原理等级的提升方法

文章目录 原力增长是一种积分型的社交平台,它有多个可以增长用户积分的渠道,也可以升级发付费资源,以下是几个主要的渠道:1.原创文章:2.回答问题:3.发动态:4.浏览文章:5.翻译文章&am…

Rust vs Go:常用语法对比(十)

题图来自 Rust vs. Golang: Which One is Better?[1] 182. Quine program Output the source of the program. 输出程序的源代码 package mainimport "fmt"func main() { fmt.Printf("%s%c%s%c\n", s, 0x60, s, 0x60)}var s package mainimport "fm…

qt打包发布项目

目录 QT打包发布项目正常操作流程(不包含第三方库)包含第三方库 QT打包发布项目 qt 版本:5.14.2 qtcreator 版本 4.11.1 正常操作流程(不包含第三方库) 首先在左下角的把项目模式从常用的Debug模式改成Release模式&…

未来行星探索希望:新型多脚机器人-团队版

机器人正在探索一个模拟的外星环境 即使一个机器人失败了,其余的团队成员也可以抵消它的损失。 背景 虽然探测器取得了令人难以置信的发现,但它们的轮子可能会拖慢它们的速度,而不稳定的地形可能会导致损坏。虽然没有东西可以取代“毅力号”…

linux 在excel里面找内容

linux 在excel里面找内容 背景:在大数据行业中,很多数据源是excel文件,但是常常会出现查找excel内容找到对应的文件,所以制作了简单的shell脚本方便查询对应的excel文件 查看下面精简的内容即可,开箱即用 shell转换 …

基于Java+SpringBoot+Vue+uniapp微信小程序实现仓储管理系统

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

windos 服务器设置指定ip访问指定端口,其他ip不能访问

需求:设置指定ip访问指定端口,其他ip不能访问 一,禁止所有ip访问 需要打开IP安全策略 或者winR 输入secpol.msc 1.先创建一个ip安全策略 2.点击添加,不使用添加向导,建一个安全策略 继续点添加 二,放开需…

Echarts 柱状图显示百分比

以下是生成的 option option {yAxis: { name: 金额(元), type: value },xAxis: { type: category },legend: {},series: [{stack: x,name: 早餐,label: {normal: {show: true,position: insideRight,// 格式化显示formatter: function (params) {let …

LabVIEW使用自定义模板和示例项目来开发LabVIEW项目

LabVIEW使用自定义模板和示例项目来开发LabVIEW项目 创建项目时,LabVIEW将显示“创建项目”对话框,以帮助您选择模板或示例项目来作为开发起点。如果要使用您创建的项目作为自定义模板和示例项目,您必须将每个项目的源文件和元数据添加到相应…

软件外包开发的需求分析

需求分析是软件开发中的关键步骤,其目的是确定用户需要什么样的软件,以及软件应该完成哪些任务。需求分析是软件工程的早期工作,也是软件项目成功的基础,因此花费大量精力和时间去做好需求分析是值得的。今天和大家分享软件需求分…

Macbook M1编译安装Java OpenCV

OpenCV-4.8.0编辑安装 查询编译依赖 brew info opencv确保所有需要模块都打上了✔,未打✔的需要使用brew进行安装 下载OpenCV源码 在此处下载OpenCV源代码,选择Source,点击此处下载opencv_contrib-4.8.0 或者使用如下命令,通…

MultipartFile类型接收上传文件报出的UncheckedIOException以及删除tomcat临时文件失败源码探索

1、描述异常背景: 因为需要分析数据,待处理excel文件的数据行数太大,手动太累,花半小时写了一个定制的数据入库工具,改成了通用的,整个项目中的万级别数据都在工具上分析,写SQL进行分析&#x…

2_Apollo4BlueLite中断控制器NVIC

1.概述 Apollo4BlueLite 的中断控制器是采用 ARM Cortex-M4 内核,并集成了 NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器)作为其中断控制器。 NVIC 是 ARM Cortex-M 系列处理器中常用的中断控制器&#xff0c…