【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-81 storage-selector=node-a-master
k8s-worker-120-82 storage-selector=node-b-master
k8s-worker-120-83 storage-selector=node-c-master
k8s-worker-120-84 storage-selector=node-a-slve
k8s-worker-120-85 storage-selector=node-a-slve
k8s-worker-120-86 storage-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"
        

你可能感兴趣的:(kubernetes,elasticsearch,kibana,kubernetes,elasticsearch,kibana,k8s,docker)