【k8s部署elasticsearch】k8s环境下安装elasticsearch集群和kibana

文章目录

      • 简介
      • 一.条件及环境说明
      • 二.需求说明
      • 三.实现原理及说明
      • 四.详细步骤
        • 4.1.规划节点标签
        • 4.2.创建三个statefulset和service headless配置
        • 4.3.创建service配置
      • 五.安装kibana
      • 六.调整索引分区
      • 七.安装说明

简介

k8s集群中搭建有elasticsearch服务一般都会用到pvc,但是考虑到有些自建k8s环境下,搭建的共享存储可能会存在稳定性及性能问题,所以这次是通过采用节点亲和性和hostpath来实现,目前的operator的基本都是采用共享存储的方法。本文将根据现有环境及不同需求将elasticsearch集群的搭建采用hostpath+亲和性的权重+多个副本分区的方式来实现数据持久化和高可用。

一.条件及环境说明

k8s版本k8s-1.29.4,环境搭建在电信机房,六个worker节点,每个节点有一块非系统盘的ssd盘挂载到/data/路径,不采用ceph或nas之类的共享存储,也未采用operator。

二.需求说明

  • 搭建三个节点的elasticsearch集群,并配置三个主分区,2个副本分区。
  • 高可用:有一个k8s节点长期故障后或重启pod之后也不影响使用。
  • 高性能:读写本地磁盘实现高性能的io,共享存储如果资源及硬件性能不够的话,io将会是性能瓶颈。
  • 数据安全:在发生切换,节点故障以后,数据要尽可能的保证完整
  • 安装简单、管理维护容易

三.实现原理及说明

四.详细步骤

4.1.规划节点标签
节点名称角色标签
k8s-worker-120-81storage-selector=node-a-master
k8s-worker-120-82storage-selector=node-b-master
k8s-worker-120-83storage-selector=node-c-master
k8s-worker-120-84storage-selector=node-a-slve
k8s-worker-120-85storage-selector=node-a-slve
k8s-worker-120-86storage-selector=node-a-slve

注:这里的角色划分是指:redis由于是一主两从,每个redis的pod分别落在三个主的节点上,当主节点发生故障是,就切换到备节点,例如:名称为autopocket-es-a-0的pod,默认落在标签为storage-selector=node-a-master的节点上,当该节点发生故障是,就会根据权重匹配罗在storage-selector=node-a-slve的节点上。

4.2.创建三个statefulset和service headless配置

1.elasticsearch_a.yaml 节点a的statuflset配置和无头服务配置

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: autopocket-es-a
  namespace: zx-app
  labels:
    app: autopocket-es-a 
    appname: pcauto-pocket
    appgroup: autopocket-es
spec:
  serviceName: "autopocket-es-a"
  replicas: 1 
  selector:
    matchLabels:
      app: autopocket-es-a
      appgroup: autopocket-es
  template:
    metadata:
      labels:
        app: autopocket-es-a
        appgroup: autopocket-es
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 80
            preference:
              matchExpressions:
              - key: storage-selector 
                operator: In
                values:
                - node-a-master
          - weight: 20
            preference:
              matchExpressions:
              - key: storage-selector 
                operator: In
                values:
                - node-a-slave
      containers:
      - name: elasticsearch
        image: "xxx.cn-shenzhen.cr.aliyuncs.com/public/elasticsearch:7.17.22"
        command: ["/bin/sh","-c"]
        args:
        - mkdir -p /home/elastic/${POD_NAME}/data /home/elastic/${POD_NAME}/logs;chown elasticsearch.elasticsearch -R /home/elastic;su elasticsearch -c "/usr/share/elasticsearch/bin/elasticsearch"
        env:
        - name: cluster.name
          value: autopocket-es 
        - name: K8S_SERVICE_NAME
          value: autopocket-es-a 
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: discovery.seed_hosts
          value: "autopocket-es-a-0.autopocket-es-a.$(POD_NAMESPACE).svc.cluster.local,autopocket-es-b-0.autopocket-es-b.$(POD_NAMESPACE).svc.cluster.local,autopocket-es-c-0.autopocket-es-c.$(POD_NAMESPACE).svc.cluster.local"
        - name: cluster.initial_master_nodes
          value: "autopocket-es-a-0.autopocket-es-a.$(POD_NAMESPACE).svc.cluster.local"
        - name: node.name
          value: $(POD_NAME).$(K8S_SERVICE_NAME).$(POD_NAMESPACE).svc.cluster.local 
        - name: path.data
          value: /home/elastic/$(POD_NAME)/data
        - name: path.logs
          value: /home/elastic/$(POD_NAME)/logs
        - name: xpack.security.enabled
          value: "false"
        ports:
        - name: rest
          containerPort: 9200
        - name: inter-node
          containerPort: 9300
        volumeMounts:
        - name: elasticsearch-data
          mountPath: /home/elastic
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      volumes:
        - name: elasticsearch-data 
          hostPath:
            path: /data/es_data
            type: ""
      tolerations:
      - key: node.kubernetes.io/not-ready
        operator: Exists
        effect: NoExecute
        tolerationSeconds: 3600
      - key: node.kubernetes.io/unreachable
        operator: Exists
        effect: NoExecute
        tolerationSeconds: 3600
---
apiVersion: v1
kind: Service
metadata:
  name: autopocket-es-a
  namespace: zx-app
  labels:
    appname: pcauto-pocket
    app: autopocket-es-a
spec:
  ports:
  - port: 9200
    name: rest
  - port: 9300
    name: inter-node
  clusterIP: None
  selector:
    app: autopocket-es-a

2.elasticsearch_b.yaml 节点b的statuflset配置和无头服务配置

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: autopocket-es-b
  namespace: zx-app
  labels:
    app: autopocket-es-b 
    appname: pcauto-pocket
    appgroup: autopocket-es
spec:
  serviceName: "autopocket-es-b"
  replicas: 1 
  selector:
    matchLabels:
      app: autopocket-es-b
      appgroup: autopocket-es
  template:
    metadata:
      labels:
        app: autopocket-es-b
        appgroup: autopocket-es
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 80
            preference:
              matchExpressions:
              - key: storage-selector 
                operator: In
                values:
                - node-b-master
          - weight: 20
            preference:
              matchExpressions:
              - key: storage-selector 
                operator: In
                values:
                - node-b-slave
      containers:
      - name: elasticsearch
        image: "xxx.cn-shenzhen.cr.aliyuncs.com/public/elasticsearch:7.17.22"
        command: ["/bin/sh","-c"]
        args:
        - mkdir -p /home/elastic/${POD_NAME}/data /home/elastic/${POD_NAME}/logs;chown elasticsearch.elasticsearch -R /home/elastic;su elasticsearch -c "/usr/share/elasticsearch/bin/elasticsearch"
        env:
        - name: cluster.name
          value: autopocket-es 
        - name: K8S_SERVICE_NAME
          value: autopocket-es-b 
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: discovery.seed_hosts
          value: "autopocket-es-a-0.autopocket-es-a.$(POD_NAMESPACE).svc.cluster.local,autopocket-es-b-0.autopocket-es-b.$(POD_NAMESPACE).svc.cluster.local,autopocket-es-c-0.autopocket-es-c.$(POD_NAMESPACE).svc.cluster.local"
        - name: cluster.initial_master_nodes
          value: "autopocket-es-a-0.autopocket-es-a.$(POD_NAMESPACE).svc.cluster.local"
        - name: node.name
          value: $(POD_NAME).$(K8S_SERVICE_NAME).$(POD_NAMESPACE).svc.cluster.local 
        - name: path.data
          value: /home/elastic/$(POD_NAME)/data
        - name: path.logs
          value: /home/elastic/$(POD_NAME)/logs
        - name: xpack.security.enabled
          value: "false"
        ports:
        - name: rest
          containerPort: 9200
        - name: inter-node
          containerPort: 9300
        volumeMounts:
        - name: elasticsearch-data
          mountPath: /home/elastic
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      volumes:
        - name: elasticsearch-data 
          hostPath:
            path: /data/es_data
            type: ""
      tolerations:
      - key: node.kubernetes.io/not-ready
        operator: Exists
        effect: NoExecute
        tolerationSeconds: 3600
      - key: node.kubernetes.io/unreachable
        operator: Exists
        effect: NoExecute
        tolerationSeconds: 3600
---
apiVersion: v1
kind: Service
metadata:
  name: autopocket-es-b
  namespace: zx-app
  labels:
    appname: pcauto-pocket
    app: autopocket-es-b
spec:
  ports:
  - port: 9200
    name: rest
  - port: 9300
    name: inter-node
  clusterIP: None
  selector:
    app: autopocket-es-b

3.elasticsearch_c.yaml 节点c的statuflset配置和无头服务配置

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: autopocket-es-c
  namespace: zx-app
  labels:
    app: autopocket-es-c 
    appname: pcauto-pocket
    appgroup: autopocket-es
spec:
  serviceName: "autopocket-es-c"
  replicas: 1 
  selector:
    matchLabels:
      app: autopocket-es-c
      appgroup: autopocket-es
  template:
    metadata:
      labels:
        app: autopocket-es-c
        appgroup: autopocket-es
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 80
            preference:
              matchExpressions:
              - key: storage-selector 
                operator: In
                values:
                - node-c-master
          - weight: 20
            preference:
              matchExpressions:
              - key: storage-selector 
                operator: In
                values:
                - node-c-slave
      containers:
      - name: elasticsearch
        image: "xxx.cn-shenzhen.cr.aliyuncs.com/public/elasticsearch:7.17.22"
        command: ["/bin/sh","-c"]
        args:
        - mkdir -p /home/elastic/${POD_NAME}/data /home/elastic/${POD_NAME}/logs;chown elasticsearch.elasticsearch -R /home/elastic;su elasticsearch -c "/usr/share/elasticsearch/bin/elasticsearch"
        env:
        - name: cluster.name
          value: autopocket-es 
        - name: K8S_SERVICE_NAME
          value: autopocket-es-c 
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: discovery.seed_hosts
          value: "autopocket-es-a-0.autopocket-es-a.$(POD_NAMESPACE).svc.cluster.local,autopocket-es-b-0.autopocket-es-b.$(POD_NAMESPACE).svc.cluster.local,autopocket-es-c-0.autopocket-es-c.$(POD_NAMESPACE).svc.cluster.local"
        - name: cluster.initial_master_nodes
          value: "autopocket-es-a-0.autopocket-es-a.$(POD_NAMESPACE).svc.cluster.local"
        - name: node.name
          value: $(POD_NAME).$(K8S_SERVICE_NAME).$(POD_NAMESPACE).svc.cluster.local 
        - name: path.data
          value: /home/elastic/$(POD_NAME)/data
        - name: path.logs
          value: /home/elastic/$(POD_NAME)/logs
        - name: xpack.security.enabled
          value: "false"
        ports:
        - name: rest
          containerPort: 9200
        - name: inter-node
          containerPort: 9300
        volumeMounts:
        - name: elasticsearch-data
          mountPath: /home/elastic
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      volumes:
        - name: elasticsearch-data 
          hostPath:
            path: /data/es_data
            type: ""
      tolerations:
      - key: node.kubernetes.io/not-ready
        operator: Exists
        effect: NoExecute
        tolerationSeconds: 3600
      - key: node.kubernetes.io/unreachable
        operator: Exists
        effect: NoExecute
        tolerationSeconds: 3600
---
apiVersion: v1
kind: Service
metadata:
  name: autopocket-es-c
  namespace: zx-app
  labels:
    appname: pcauto-pocket
    app: autopocket-es-c
spec:
  ports:
  - port: 9200
    name: rest
  - port: 9300
    name: inter-node
  clusterIP: None
  selector:
    app: autopocket-es-c
4.3.创建service配置

给9200 9300配置一个service的代理服务,注意其中的selector是指向到appgroup,这是将三个statefulset定义了一个appgroup的标签。

apiVersion: v1
kind: Service
metadata:
  name: autopocket-es
  namespace: zx-app
  labels:
    app: autopocket-es
    appname: pcauto-zx
spec:
  ports:
  - port: 9200
    name: rest
  - port: 9300
    name: inter-node
  selector:
    appgroup: autopocket-es
  type: LoadBalancer 

五.安装kibana

apiVersion: apps/v1
kind: Deployment
metadata:
  name: autopocket-es-kibana
  namespace: zx-app
  labels:
    app: autopocket-es-kibana
    appname: pcauto-pocket
spec:
  replicas: 1
  selector:
    matchLabels:
      app: autopocket-es-kibana
  template:
    metadata:
      labels:
        app: autopocket-es-kibana
    spec:
      containers:
      - name: kibana
        image: "xxx.cn-shenzhen.cr.aliyuncs.com/public/kibana:7.17.22"
        ports:
        - containerPort: 5601
        env:
        - name: ELASTICSEARCH_HOSTS
          value: '["http://autopocket-es-a-0.autopocket-es-a:9200","http://autopocket-es-b-0.autopocket-es-b:9200","http://autopocket-es-c-0.autopocket-es-c:9200"]'
---
apiVersion: v1
kind: Service
metadata:
  name: autopocket-es-kibana
  namespace: zx-app
  labels:
    app: autopocket-es-kibana
    appname: pcauto-pocket
spec:
  selector:
    app: autopocket-es-kibana
  ports:
  - port: 5601
    targetPort: 5601
  type: LoadBalancer

查看集群健康情况:http://10.16.xx.xx:9200/_cat/health?v

elasticsearch集群状态查看:http://10.16.1xx.xx:9200/_cat/nodes?v
在这里插入图片描述

索引状态查看:http://10.16.1xx.xx:9200/_cat/indices?v
在这里插入图片描述

kibana地址登录:http://10.16.1xx.xx:5601/app/home#/
在这里插入图片描述

六.调整索引分区

调整已存在索引的副本分区:curl -XPUT -H "Content-Type:application/json" -d '{"settings":{"number_of_replicas":2}}' 'http://10.16.xx.xx:9200/testindex/_settings'

调整集群最大分片数:curl -XPUT -H "Content-Type:application/json" http://10.16.xx.xx:9200/_cluster/settings -d '{"transient":{"cluster":{"max_shards_per_node":10000}}}'

调整默认主分片和副本分片数: curl -X PUT -H "Content-Type:application/json" -d '{"index_patterns":["*"],"settings":{"number_of_shards":3,"number_of_replicas":2}}' http://10.16.xx.xx:9200/_template/template_http_request_record

七.安装说明

  • 需要先在k8s的节点创建/data/es_data的路径来存放数据。
  • 使用配置前将配置中的autopocket替换成自己需要的命名,配置的命名空间为:zx-app,修改成自己的命名空间,appname为pcauto-pocket,修改成自己的应用名称,该标签也可以删除。
  • 配置中的镜像地址采用了私有的镜像地址,镜像是dockerhub上下载的elasticsearch:7.17.22 镜像到私有镜像仓库的,如果能直通外网的k8s可以直接用elasticsearch:7.17.22,kibana的镜像是kibana:7.17.22。否则配置一个可以通的镜像地址。
  • 默认没有配置用户名和密码。
  • 节点标签的命名规则若有更改需要在每个statefulset中的affinity: 中的标签名称进行修改。

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

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

相关文章

Unity AssetsBundle 详解

文章目录 1.AssetBundle 概念2.AssetBundle 优势3.AssetBundle 特性4.AssetBundle 使用流程4.1 分组4.2 打包4.3 加载包4.4 加载资源4.5 卸载资源 5.AssetBundleManifest6.AssetBundle的内存占用7.AB包资源加密 1.AssetBundle 概念 AssetBundle又称AB包,是Unity提供…

Linux项目自动化构建工具make/Makefile

目录 前言1. Makefile 文件的基本构成2. makefile的依赖关系的自动化推导3. make执行过程中的一些现象及其原理3.1 证明该现象原理3.2 关于 stat 时间属性的拓展 前言 身处 linux 平台环境开发中的伙伴们都知道 gcc/g 编译器以及编译指令,但是不难想象在以后的生活…

解决方案 | IP地址申请专用HTTPS证书的常见问题

IP地址专用的HTTPS证书是一种专门为IP地址设计的SSL/TLS证书,它可以通过HTTPS协议安全地访问基于IP地址实现的网站或服务,以下是申请IP地址https证书时经常遇到的问题以及解决办法。 一 、如何选择合适的IP地址https证书的类型? 1、DV类型IP…

水文:CBA业务架构师

首先, 我们来了解一下什么是CBA业务架构师? CBA业务架构师认证是由业务架构师公会(Business Architecture Guild)授予的一种专业认证。标志着证书持有者已经掌握了业务架构的核心技能和知识,能够在实际工作中熟练运用业务架构技术和框架&…

安全极客团队荣获首届“矩阵杯”网络安全大赛人工智能挑战赛“三等奖”

近日,东半球规格高、规模大且奖金丰厚的网络安全顶级赛事——首届“矩阵杯”网络安全大赛在青岛国际会议中心圆满落幕。本次大赛设置了五大赛事,包括通用产品漏挖赛、国产软硬件安全检测赛、原创漏洞挖掘赛、人工智能(大模型)挑战…

CDH实操--集群卸载

作者:耀灵 1、停止正在运行的服务 a、控制台停止集群服务 b、控制台停止Cloudera Management Service c、命令行停止cm服务 systemctl stop cloudera-scm-agent #所有节点执行 systemctl stop cloudera-scm-server #cdh01节点执行2、主线并移除Parcles rm -r…

【完结】LeetCode 热题 HOT 100分类+题解+代码详尽指南

目录 LeetCode 热题 100 前言 Leetcode Top100题目和答案-哈希 Leetcode Top100题目和答案-双指针篇 Leetcode Top100题目和答案-滑动窗口篇 Leetcode Top100题目和答案-子串篇 Leetcode Top100题目和答案-普通数组篇 Leetcode Top100题目和答案-矩阵篇 Leetcode Top1…

ABAQUS大连正版代理商:亿达四方——开启东北工业智能仿真新篇章

在东北老工业基地的振兴道路上,大连以其独特的地理位置和深厚的产业基础,成为推动区域经济发展的领头羊。作为国际知名的仿真软件ABAQUS在大连地区的官方授权代理商,亿达四方正以科技创新为驱动,引领当地制造业迈向数字化、智能化…

c++多态——virtual关键字,C++11 override 和 final,析构函数的重写。

目录 多态基本概念 virtual关键字 C11 override 和 final 举个栗子 析构函数的重写(基类与派生类析构函数的名字不同) 多态基本概念 概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会 产生出不同…

Coze触发器:触发任务的Python接口源码

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Coze触发器 📒📝 触发器接口源码⚓️ 相关链接 ⚓️📖 介绍 📖 自动化,一个在现代软件开发中不可或缺的概念,它让我们的生活和工作变得更加高效。Coze也支持定时任务/触发任务,通过触发器,我们可以更自由的控制Bot去…

【中项第三版】系统集成项目管理工程师 | 第 11 章 规划过程组② | 11.3 - 11.5

前言 第 11 章对应的内容选择题和案例分析都会进行考查,这一章节属于10大管理的内容,学习要以教材为准。本章上午题分值预计在15分。 目录 11.3 收集需求 11.3.1 主要输入 11.3.2 主要工具与技术 11.3.3 主要输出 11.4 定义范围 11.4.1 主要输入…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【密钥派生(C/C++)】

密钥派生(C/C) 以HKDF256密钥为例,完成密钥派生。具体的场景介绍及支持的算法规格,请参考[密钥生成支持的算法]。 在CMake脚本中链接相关动态库 target_link_libraries(entry PUBLIC libhuks_ndk.z.so)开发步骤 生成密钥 指定密钥别名。 初始化密钥属…

【JavaEE】Spring AOP详解

一.AOP的定义. Aspect Oriented Programming(面向切面编程)概括的来说AOP是一种思想, 是对某一类事情的集中处理 什么是面向切面编程呢? 切面就是指某一类特定问题, 所以AOP也可以理解为面向特定方法编程.什么是面向特定方法编程呢? 比如上个博客文章…

Python基础教学之四:面向对象编程——迈向更高级编程

Python基础教学之四:面向对象编程——迈向更高级编程 一、面向对象编程概念 1. 类和对象 定义:在面向对象编程(OOP)中,类是创建对象的模板,它定义了对象的属性和方法。对象是类的实例,具体存在的实体,拥有…

从0到1开发一个Vue3的新手引导组件(附带遇到的问题以及解决方式)

1. 前言: 新手引导组件,顾名思义,就是强制性的要求第一次使用的用户跟随引导使用应用,可以让一些第一次使用系统的新手快速上手,正好我最近也遇到了这个需求,于是就想着开发一个通用组件拿出来使用(写完之后才发现element就有,后悔了哈哈哈😭😭) 示例图…

回车不搜索直接页面刷新问题解决

使用技术栈:vue3、elementUiPlus 问题:回车触发方法,会刷新整个页面,不执行搜索 解决方法:在搜索的表单中增加submit.native.prevent submit.native.prevent

LLM 合成数据生成完整指南

大型语言模型是强大的工具,不仅可以生成类似人类的文本,还可以创建高质量的合成数据。这种能力正在改变我们进行 AI 开发的方式,特别是在现实世界数据稀缺、昂贵或隐私敏感的情况下。在本综合指南中,我们将探索 LLM 驱动的合成数据…

学习测试8-数据库mysql操作

下载配置mysql 网络博客 使用 在Linux里 1 service mysql start 启动服务 2 在Navicatt 中连接Linux服务器 3 第一步 将所有文件上传到/opt目录下 第二步 chmod 777 deploy-mysql.sh 第三步 ./deploy-mysql.sh4 service mysql status 查看状态是否安装成功 5 重启mys…

WPS打开PDF文件的目录

WPS打开PDF文件的目录 其实WPS中PDF文件并没有像Word那样标准的目录,但是倒是有书签,和目录一个效果 点击左上角书签选项,或者使用Alt Shift 1快捷键即可

『Django』自带的后台

theme: smartblue 本文简介 点赞 关注 收藏 学会了 上一篇讲了 Django 操作 MySQL 的方法,讲了如何创建模型,如何对数据库做增删改查的操作。但每次修改数据都要写代码,多少有点麻烦。 有没有简单一点的方法呢? 有的有的&#…