Kubernetes上部署Elasticsearch集群记录

  1. 规划
· 部署三个节点集群
· 采用Pod控制器部署ES应用
· ConfigMap配置应用
· 通过SVC发布应用
· PVPVC集群资源持久化数据
  1. 准备
    Docker镜像,基于elasticsearch:7.9.3打包增加SSL密钥库文件,密钥库可以自己通过ES自带工具生成,集群统一配置,这里为了方便直接打进镜像
From elasticsearch:7.9.3

COPY elastic-certificates.p12 /usr/share/elasticsearch/config/
  1. Yaml 文件
    PV、PVC 资源, 共三组

elastic-storage.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: elastic-master-pv
spec:
  storageClassName: elastic-master-pv
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteMany
  nfs: ## NFS挂载
    server: 192.168.31.233  ##NFS服务器地址
    path: /nfs/elastic/data/master ##NFS服务器挂载目录
    
    
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: elastic-data1-pv
spec:
  storageClassName: elastic-data1-pv
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 192.168.31.233
    path: /nfs/elastic/data/data1

    
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: elastic-data2-pv
spec:
  storageClassName: elastic-data2-pv
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 192.168.31.233
    path: /nfs/elastic/data/data2
    
    
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: elastic-master-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: elastic-master-pv
  resources:
    requests:
      storage: 20Gi
      
      
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: elastic-data1-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: elastic-data1-pv
  resources:
    requests:
      storage: 20Gi


---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: elastic-data2-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: elastic-data2-pv
  resources:
    requests:
      storage: 20Gi

Pod 声明
master.yaml

apiVersion: v1
kind: Pod
metadata:
  name: elastic-master
  labels:
    app: es-master
spec:
  containers:
    - name: es-master
      image: elasticsearch:7.9.3
      ports:
        - containerPort: 9200
        - containerPort: 9300
      env:
        - name: ES_JAVA_OPTS
          value: "-Xms4g -Xmx4g"
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: network.publish_host
          value: "master-node.default" ## 发布地址,使用svc的dns和其他节点通信
      volumeMounts:
        - name: elastic-data
          mountPath: /usr/share/elasticsearch/data
        - name: elastic-config
          subPath: elasticsearch.yml
          mountPath: /usr/share/elasticsearch/config/elasticsearch.yml
  volumes:
    - name: elastic-data
      persistentVolumeClaim:
        claimName: elastic-master-pvc
    - name: elastic-config
      configMap:
        name: elastic-config-map


---
apiVersion: v1
kind: Service
metadata:
  name: master-node
spec:
  selector:
    app: es-master
  ports:
    - name: http-1
      protocol: TCP
      port: 9200
      targetPort: 9200
    - name: tcp-1
      protocol: TCP
      port: 9300
      targetPort: 9300

data1.yaml

apiVersion: v1
kind: Pod
metadata:
  name: elastic-data1
  labels:
    app: es-data1
spec:
  containers:
    - name: es-data1
      image: elasticsearch:7.9.3
      resources:
        requests:
          memory: 8Gi
        limits:
          memory: 16Gi
      ports:
        - containerPort: 9200
        - containerPort: 9300
      env:
        - name: ES_JAVA_OPTS
          value: "-Xms8g -Xmx8g"
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: network.publish_host
          value: "data1-node.default"
      volumeMounts:
        - name: elastic-data
          mountPath: /usr/share/elasticsearch/data
        - name: elastic-config
          subPath: elasticsearch.yml
          mountPath: /usr/share/elasticsearch/config/elasticsearch.yml
  volumes:
    - name: elastic-data
      persistentVolumeClaim:
        claimName: elastic-data1-pvc
    - name: elastic-config
      configMap:
        name: elastic-config-map


---
apiVersion: v1
kind: Service
metadata:
  name: data1-node
spec:
  selector:
    app: es-data1
  ports:
    - name: http-1
      protocol: TCP
      port: 9200
      targetPort: 9200
    - name: tcp-1
      protocol: TCP
      port: 9300
      targetPort: 9300

data2.yaml

apiVersion: v1
kind: Pod
metadata:
  name: elastic-data2
  labels:
    app: es-data2
spec:
  containers:
    - name: es-data1
      image: elasticsearch:7.9.3
      resources:
        requests:
          memory: 8Gi
        limits:
          memory: 16Gi
      ports:
        - containerPort: 9200
        - containerPort: 9300
      env:
        - name: ES_JAVA_OPTS
          value: "-Xms8g -Xmx8g"
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: network.publish_host
          value: "data2-node.default"
      volumeMounts:
        - name: elastic-data
          mountPath: /usr/share/elasticsearch/data
        - name: elastic-config
          subPath: elasticsearch.yml
          mountPath: /usr/share/elasticsearch/config/elasticsearch.yml
  volumes:
    - name: elastic-data
      persistentVolumeClaim:
        claimName: elastic-master-pvc
    - name: elastic-config
      configMap:
        name: elastic-config-map


---
apiVersion: v1
kind: Service
metadata:
  name: data2-node
spec:
  selector:
    app: es-data2
  ports:
    - name: http-1
      protocol: TCP
      port: 9200
      targetPort: 9200
    - name: tcp-1
      protocol: TCP
      port: 9300
      targetPort: 9300

ConfigMap 配置文件
elastic-map.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: elastic-config-map
data:
  elasticsearch.yml: |-
    cluster:
      name: aaron-cluster
      initial_master_nodes: ## 集群初始化master节点,接受 节点名称(node.name) 和 IP, 尝试使用域名无果
        - elastic-master
    node:
      name: ${POD_NAME}
      master: true
      data: true
      max_local_storage_nodes: 3  ## 多个ES服务使用一个磁盘需要配置
    discovery:
      seed_hosts: ## svc 提供的DNS记录
        - master-node.default
        - data1-node.default
        - data2-node.default
    network:
      host: 0.0.0.0
    indices:
      memory:
        index_buffer_size: 20%
    bootstrap:
      system_call_filter: false
    http:
      cors:
        enabled: true
        allow-origin: "*"
    xpack:
      security:
        enabled: true
        transport:
          ssl:
            enabled: true
            verification_mode: certificate
            keystore:
              path: /usr/share/elasticsearch/config/elastic-certificates.p12
            truststore:
              path: /usr/share/elasticsearch/config/elastic-certificates.p12

  1. 发布所以资源

所有yaml放到同一目录

kubectl apply -f .

进入容器初始化集群密码

kubectl exec -it elastic-master bash

## 容器内执行
bin/elasticsearch-setup-passwords interactive

## 输入密码....

##容器内验证
curl -u elastic localhost:9200/_cat/nodes?v
## 输入上面的密码
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三千烦恼丝xzh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值