K8s 部署 elasticsearch-7.14.0 集群 及 kibana 客户端

一、K8s 部署 elasticsearch-7.14.0 集群

安装规划

组件 replicas 类型
es 3 StatefulSet
kibana 1 Deployment

使用 k8s 版本为:v1.18.0

本次使用 OpenEBS 来作为存储引擎,OpenEBS 是一个开源的、可扩展的存储平台,它提供了一种简单的方式来创建和管理持久化存储卷。它支持各种存储后端,包括但不限于 ZFSBtrfsXFS 等。同时,OpenEBS 具有高度的可扩展性和可配置性,可以满足不同的存储需求。

安装 OpenEBS

kubectl apply -f https://openebs.github.io/charts/openebs-operator.yaml

验证OpenEBS是否正确安装:

kubectl get pods -n openebs

在这里插入图片描述
所有的 OpenEBS pods 都处于Running状态表示正常。

1. 创建命名空间

vi es-ns.yml
apiVersion: v1
kind: Namespace
metadata:
  name: es
  labels:
    name: es
kubectl apply -f es-ns.yml

查看命名空间:

kubectl get ns

在这里插入图片描述

2. 创建存储卷

使用 OpenEBS 本地存储模式:

vi es-local-storage.yml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: es-local-storage
  annotations:
    openebs.io/cas-type: local
    cas.openebs.io/config: |
      - name: StorageType
        value: hostpath
      - name: BasePath
        value: /data/openebs/es 
provisioner: openebs.io/local
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
kubectl apply -f es-local-storage.yml

查看存储卷:

kubectl get sc

在这里插入图片描述

3. 创建 ConfigMap 配置

主要声明 elasticsearch.yml 配置文件:

vi es-config.yml
apiVersion: v1
kind: ConfigMap
metadata:
  name: es-config
  namespace: es
  labels:
    app: es-config
data:
  elasticsearch.yml: |+     
    #集群名称
    cluster.name: cluster-es
    #节点名称,每个节点的名称不能重复,这里不指定,使用当前主机的名称
    # node.name: 
    #ip 地址,每个节点的地址不能重复
    network.host: 0.0.0.0
    #是不是有资格主节点
    node.master: true
    node.data: true
    http.port: 9200
    # head 插件需要这打开这两个配置,解决跨域问题
    http.cors.allow-origin: "*"
    http.cors.enabled: true
    http.max_content_length: 200mb
    #es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举 master
    cluster.initial_master_nodes: ["es-0"]
    #es7.x 之后新增的配置,节点发现
    discovery.seed_hosts: ["es-0.es-svc.es.svc.cluster.local:9300","es-1.es-svc.es.svc.cluster.local:9300","es-2.es-svc.es.svc.cluster.local:9300"]
    gateway.recover_after_nodes: 2
    network.tcp.keep_alive: true
    network.tcp.no_delay: true
    transport.tcp.compress: true
    #集群内同时启动的数据任务个数,默认是 2 个
    cluster.routing.allocation.cluster_concurrent_rebalance: 16
    #添加或删除节点及负载均衡时并发恢复的线程个数,默认 4 个
    cluster.routing.allocation.node_concurrent_recoveries: 16
    #初始化数据恢复时,并发恢复线程的个数,默认 4 个
    cluster.routing.allocation.node_initial_primaries_recoveries: 16

注意这里的集群间的访问使用域名:es-X.es-svc.es.svc.cluster.local ,格式为:

(podname).(headless server name).(namespace).svc.cluster.local

所以注意下面创建 Headless Service 服务名字需要为 es-svcStatefulSetPod 的名字需要为 es

kubectl apply -f es-config.yml

查看 ConfigMap:

kubectl get cm -n es

在这里插入图片描述

4. 创建 Service 服务

这里需要创建两个,一个用于集群建访问的 Headless Service ,一个用于外部访问的 NodePort Service :

vi es-svc.yml
# headless service 
apiVersion: v1
kind: Service
metadata:
  name: es-svc
  namespace: es
  labels:
    app: es-svc
spec:
  clusterIP: None
  ports:
  - name: rest-port
    port: 9200
  - name: cluster-port
    port: 9300
  selector:
    app: es

---
# NodePort service 
apiVersion: v1
kind: Service
metadata:
  name: es-svc-nodeport
  namespace: es
  labels:
    app: es-svc
spec:
  clusterIP: 
  ports:
  - name: rest-port
    port: 9200
    nodePort: 31920
    targetPort: 9200
  selector:
    app: es
  type: NodePort
  target-port:
  externalTrafficPolicy: Cluster # Local 只有所在node可以访问,Cluster 公平转发
kubectl apply -f es-svc.yml

查看创建的 Service

kubectl get svc -n es

在这里插入图片描述

5. 创建 StatefulSet 应用

vi es-sfe.yml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: es
  namespace: es
spec:
  serviceName: "es-svc"   #填写无头服务的名称
  replicas: 3
  selector: 
    matchLabels: 
      app: es
  template:
    metadata:
      labels:
        app: es
    spec:
      containers:
      - name: es
        image: elasticsearch:7.14.0
        ports:
        - containerPort: 9200
          name: es-rest-port
        - containerPort: 9200
          name: es-cluster-port
        env:
        - name: ES_JAVA_OPTS
          value: "-Xms1g -Xmx1g"
        volumeMounts:                           
          - name: es-config     #挂载配置
            mountPath: /usr/share/elasticsearch/config/elasticsearch.yml
            subPath: elasticsearch.yml
          - name: es-data       #挂载数据
            mountPath: /usr/share/elasticsearch/data 
      volumes:
      - name: es-config
        configMap:                                
          name: es-config
  volumeClaimTemplates:
    - metadata:
        name: es-data
      spec:
        accessModes: ["ReadWriteOnce"]
        storageClassName: es-local-storage
        resources:
          requests:
            storage: 5Gi

这里使用 volumeClaimTemplates 动态创建 pvpvc

kubectl apply -f es-sfe.yml

查看 statefulset :

kubectl get statefulset -n es

在这里插入图片描述

查看 pod:

kubectl get pods -n es

在这里插入图片描述

使用 http 请求验证 es 服务是否正常:

http://ip:31920/_cluster/health?pretty

在这里插入图片描述

从结果上可以看出 ES 启动正常。

二、K8s 部署 kibana 客户端

1. 创建 Service 服务

vi kibana-svc.yml
apiVersion: v1
kind: Service
metadata:
  name: kibana-svc-nodeport
  namespace: es
  labels:
    app: kibana-svc
spec:
  clusterIP: 
  ports:
  - name: kibana
    port: 5601
    nodePort: 31561
    targetPort: 5601
  selector:
    app: kibana
  type: NodePort
  target-port:
  externalTrafficPolicy: Cluster # Local 只有所在node可以访问,Cluster 公平转发
kubectl apply -f kibana-svc.yml

2. 创建 Deployment 应用

vi kibana-dm.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kibana
  namespace: es
spec:
  replicas: 1
  selector: 
    matchLabels: 
      app: kibana
  template:
    metadata:
      labels:
        app: kibana
    spec:
      containers:
      - name: kibana
        image: kibana:7.14.0
        ports:
        - containerPort: 5601
          name: ui-port
        env:
        - name: ELASTICSEARCH_HOSTS
          value: http://es-0.es-svc.es.svc.cluster.local:9200
kubectl apply -f kibana-dm.yml

查看 pod :

kubectl get pods -n es

在这里插入图片描述

下面在浏览器访问 kibana 页面:

http://ip:31561/

在这里插入图片描述

三、测试

使用 kibana 创建一个 test_index 索引:

PUT /test_index

在这里插入图片描述

查看 test_index 索引信息:

GET /test_index

在这里插入图片描述

test_index 索引中添加数据:

PUT /test_index/user/1
{
	"name": "张三",
	"age": 15,
	"sex": "男"
}

在这里插入图片描述

查询添加的数据:

GET /test_index/user/1

在这里插入图片描述

相关推荐

  1. Kubernetes (K8s) 部署

    2024-04-13 13:32:07       70 阅读
  2. kubeadm部署k8s

    2024-04-13 13:32:07       52 阅读
  3. kubeasz部署k8s

    2024-04-13 13:32:07       54 阅读
  4. k8s部署Minio

    2024-04-13 13:32:07       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-13 13:32:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-13 13:32:07       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-13 13:32:07       82 阅读
  4. Python语言-面向对象

    2024-04-13 13:32:07       91 阅读

热门阅读

  1. openjudge_2.5基本算法之搜索_1792:迷宫

    2024-04-13 13:32:07       32 阅读
  2. Django序列化常用字段与参数

    2024-04-13 13:32:07       39 阅读
  3. C++11中的lambda、包装器(function、bind)

    2024-04-13 13:32:07       32 阅读
  4. 学习 Rust 的第二天:Cargo包管理器的使用

    2024-04-13 13:32:07       30 阅读
  5. FineBI概述

    2024-04-13 13:32:07       39 阅读
  6. 前端学习(第三天)

    2024-04-13 13:32:07       143 阅读