当前位置:   article > 正文

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

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

  1. apiVersion: v1
  2. kind: Namespace
  3. metadata:
  4. name: elk
  5. labels:
  6. name: elk

2、创建es StorageClass和pvc

  1. apiVersion: storage.k8s.io/v1
  2. kind: StorageClass
  3. metadata:
  4. name: es-storageclass
  5. provisioner: nfs-storage-01
  6. allowVolumeExpansion: true
  7. reclaimPolicy: Retain
  1. apiVersion: v1
  2. kind: PersistentVolumeClaim
  3. metadata:
  4. name: es-storageclass
  5. namespace: elk
  6. annotations:
  7. volume.beta.kubernetes.io/storage-class: "es-storageclass"
  8. spec:
  9. resources:
  10. requests:
  11. storage: 200Gi
  12. volumeMode: Filesystem
  13. accessModes:
  14. - ReadWriteOnce

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

  1. apiVersion: apps/v1
  2. kind: StatefulSet
  3. metadata:
  4. name: es-cluster
  5. namespace: elk
  6. spec:
  7. # 必须设置
  8. serviceName: es-cluster-svc
  9. replicas: 3
  10. selector:
  11. # 设置标签
  12. matchLabels:
  13. app: es-cluster
  14. template:
  15. metadata:
  16. labels:
  17. app: es-cluster
  18. spec:
  19. # 初始化容器
  20. initContainers:
  21. - name: increase-vm-max-map
  22. image: busybox
  23. command: ["sysctl", "-w", "vm.max_map_count=262144"]
  24. securityContext:
  25. privileged: true
  26. - name: increase-fd-ulimit
  27. image: busybox
  28. command: ["sh", "-c", "ulimit -n 65536"]
  29. securityContext:
  30. privileged: true
  31. - name: increase-es-cluster
  32. image: busybox
  33. command: ["/bin/sh", "-c", "mkdir -p /data/esbak","chown -R elasticsearch.elasticsearch /data/esbak" ,"chmod -R 777 /data/esbak"]
  34. securityContext:
  35. privileged: true
  36. containers:
  37. - name: es-container
  38. image: elasticsearch:7.17.6
  39. ports:
  40. # 容器内端口
  41. - name: rest
  42. containerPort: 9200
  43. protocol: TCP
  44. # 设置挂载目录
  45. volumeMounts:
  46. - name: es-data
  47. mountPath: /usr/share/elasticsearch/data
  48. - name: es-plugins
  49. mountPath: /usr/share/elasticsearch/plugins
  50. #快照持久化路径
  51. - name: snapshot-volume
  52. mountPath: /data/esbak
  53. # 设置环境变量
  54. env:
  55. # 自定义集群名
  56. - name: cluster.name
  57. value: k8s-es
  58. # 定义节点名,使用metadata.name名称
  59. - name: node.name
  60. valueFrom:
  61. fieldRef:
  62. fieldPath: metadata.name
  63. # 初始化集群时,ES从中选出master节点
  64. - name: cluster.initial_master_nodes
  65. # 对应metadata.name名称加编号,编号从0开始
  66. value: "es-cluster-0,es-cluster-1,es-cluster-2"
  67. - name: discovery.zen.minimum_master_nodes
  68. value: "2"
  69. #es快照备份路径
  70. - name: path.repo
  71. value: /data/esbak
  72. # 发现节点的地址,discovery.seed_hosts的值应包括所有master候选节点
  73. # 如果discovery.seed_hosts的值是一个域名,且该域名解析到多个IP地址,那么es将处理其所有解析的IP地址。
  74. - name: discovery.seed_hosts
  75. value: "es-cluster-0.es-cluster-svc,es-cluster-1.es-cluster-svc,es-cluster-2.es-cluster-svc"
  76. # 配置内存
  77. - name: ES_JAVA_OPTS
  78. value: "-Xms8192m -Xmx8192m"
  79. - name: network.host
  80. value: "0.0.0.0"
  81. #允许来自任意源的跨域请求
  82. - name: "http.cors.allow-origin"
  83. value: "*"
  84. #启用跨域资源共享
  85. - name: "http.cors.enabled"
  86. value: "true"
  87. #索引分片数量
  88. - name: "number_of_shards"
  89. value: "5"
  90. #分片的副本数量
  91. - name: "number_of_replicas"
  92. value: "2"
  93. volumeClaimTemplates:
  94. - metadata:
  95. # 对应容器中volumeMounts.name
  96. name: es-data
  97. labels:
  98. app: es-volume
  99. spec:
  100. accessModes: [ "ReadWriteOnce" ]
  101. storageClassName: es-storageclass
  102. resources:
  103. requests:
  104. storage: 50Gi
  105. - metadata:
  106. name: es-plugins
  107. spec:
  108. accessModes: [ "ReadWriteOnce" ]
  109. storageClassName: es-storageclass
  110. resources:
  111. requests:
  112. storage: 2Gi
  113. - metadata:
  114. name: es-plugins
  115. spec:
  116. accessModes: [ "ReadWriteOnce" ]
  117. storageClassName: es-storageclass
  118. resources:
  119. requests:
  120. storage: 2Gi
  121. - metadata:
  122. name: snapshot-volume
  123. spec:
  124. accessModes: [ "ReadWriteOnce" ]
  125. storageClassName: es-storageclass
  126. # 申请资源的大小
  127. resources:
  128. requests:
  129. storage: 100Gi

4、部署es svc

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: es-svc
  5. namespace: elk
  6. spec:
  7. selector:
  8. app: es-cluster
  9. type: NodePort
  10. ports:
  11. - name: cluster
  12. port: 9200
  13. targetPort: 9200
  14. nodePort: 19200
  15. - name: transport
  16. port: 9300
  17. targetPort: 9300

5、发布es

kubectl applf -f ./

 6、验证

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

三、部署es-head插件

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

 1、编写yaml文件

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. labels:
  5. app: elasticsearch-head
  6. name: elasticsearch-head
  7. namespace: elk
  8. spec:
  9. replicas: 1
  10. selector:
  11. matchLabels:
  12. app: elasticsearch-head
  13. template:
  14. metadata:
  15. labels:
  16. app: elasticsearch-head
  17. spec:
  18. containers:
  19. - image: springgos/es-head:latest
  20. imagePullPolicy: Always
  21. name: elasticsearch-head
  22. ports:
  23. - containerPort: 9100
  24. name: 9100tcp191001
  25. protocol: TCP
  26. resources: {}
  27. ---
  28. apiVersion: v1
  29. kind: Service
  30. metadata:
  31. labels:
  32. app: elasticsearch-head
  33. name: elasticsearch-head
  34. namespace: elk
  35. spec:
  36. ports:
  37. - name: 9100tcp191001
  38. nodePort: 19100
  39. port: 9100
  40. protocol: TCP
  41. targetPort: 9100
  42. selector:
  43. app: elasticsearch-head
  44. type: NodePort

2、访问验证

 

 四、部署kibana

1、编写kibana-deploy.yaml和svc

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

 

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: kibana
  5. namespace: elk
  6. spec:
  7. selector:
  8. matchLabels:
  9. app: kibana
  10. replicas: 1
  11. template:
  12. metadata:
  13. labels:
  14. app: kibana
  15. spec:
  16. restartPolicy: Always
  17. containers:
  18. - name: kibana
  19. image: kibana:7.17.6
  20. imagePullPolicy: Always
  21. ports:
  22. - containerPort: 5601
  23. env:
  24. - name: ELASTICSEARCH_HOSTS
  25. value: http://es-cluster-svc:9200
  26. ---
  27. apiVersion: v1
  28. kind: Service
  29. metadata:
  30. name: kibana
  31. namespace: elk
  32. spec:
  33. type: NodePort
  34. ports:
  35. - name: kibana
  36. port: 5601
  37. targetPort: 5601
  38. nodePort: 25601
  39. selector:
  40. 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和服务器看已经有备份了,快照备份成功

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/766737
推荐阅读
相关标签
  

闽ICP备14008679号