返回

K8s 上灵活安装 Elasticsearch 并确保数据持久性

见解分享

在容器化的世界中,Kubernetes(k8s)因其强大的容器编排和管理功能而备受青睐。Elasticsearch 作为一种流行的分布式搜索和分析引擎,也常用于容器化环境中。为了充分发挥这两个技术的优势,我们需要在 Kubernetes 上安装和配置 Elasticsearch,同时确保数据的持久性。本教程将指导您完成这些步骤,并使用 NFS 作为持久存储。

首先,您需要创建一个 NFS 服务器并导出共享目录。您可以使用 NFS 软件包在 Linux 系统上轻松设置 NFS 服务器。然后,您需要在 Kubernetes 集群中创建 PersistentVolume(PV)和 PersistentVolumeClaim(PVC)来将 NFS 共享目录挂载到 Pod 中。

在创建完 PV 和 PVC 之后,您就可以部署 Elasticsearch 了。您可以使用官方的 Elasticsearch Helm Chart 或直接使用 kubectl 命令来部署 Elasticsearch。

最后,您需要配置 Elasticsearch 以使用 NFS 作为持久存储。这可以通过修改 Elasticsearch 配置文件来实现。

完成这些步骤后,您就可以在 Kubernetes 集群中使用 Elasticsearch 了。它将能够存储和处理大量数据,并确保数据的持久性。

  1. 创建 NFS 服务器

    您可以使用 Linux 系统上的 NFS 软件包来轻松设置 NFS 服务器。在 Ubuntu 中,您可以使用以下命令安装 NFS 软件包:

    sudo apt-get install nfs-kernel-server
    

    安装完成后,您可以使用以下命令导出共享目录:

    sudo mkdir /mnt/nfs/share
    sudo chown nobody:nogroup /mnt/nfs/share
    sudo chmod 777 /mnt/nfs/share
    sudo echo "/mnt/nfs/share *(rw,sync,no_root_squash)" >> /etc/exports
    sudo systemctl restart nfs-kernel-server
    
  2. 在 Kubernetes 中创建 PV 和 PVC

    现在,您需要在 Kubernetes 集群中创建 PV 和 PVC 来将 NFS 共享目录挂载到 Pod 中。您可以使用以下命令创建 PV:

    kubectl create -f - <<EOF
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: nfs-pv
    spec:
      storageClassName: nfs
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteMany
      nfs:
        server: 192.168.1.100
        path: /mnt/nfs/share
    EOF
    

    然后,您可以使用以下命令创建 PVC:

    kubectl create -f - <<EOF
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: nfs-pvc
    spec:
      storageClassName: nfs
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
    EOF
    
  3. 部署 Elasticsearch

    现在,您就可以部署 Elasticsearch 了。您可以使用官方的 Elasticsearch Helm Chart 或直接使用 kubectl 命令来部署 Elasticsearch。

    如果您使用 Helm Chart,您可以使用以下命令安装 Elasticsearch:

    helm install elasticsearch bitnami/elasticsearch
    

    如果您使用 kubectl 命令,您可以使用以下命令部署 Elasticsearch:

    kubectl create -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: elasticsearch
    spec:
      selector:
        matchLabels:
          app: elasticsearch
      template:
        metadata:
          labels:
            app: elasticsearch
        spec:
          volumes:
            - name: nfs-volume
              persistentVolumeClaim:
                claimName: nfs-pvc
          containers:
            - name: elasticsearch
              image: docker.elastic.co/elasticsearch/elasticsearch:8.4.3
              ports:
                - containerPort: 9200
              volumeMounts:
                - name: nfs-volume
                  mountPath: /usr/share/elasticsearch/data
    EOF
    
  4. 配置 Elasticsearch

    最后,您需要配置 Elasticsearch 以使用 NFS 作为持久存储。这可以通过修改 Elasticsearch 配置文件来实现。

    您可以使用以下命令编辑 Elasticsearch 配置文件:

    kubectl exec -it elasticsearch-0 -- /bin/bash
    vim /usr/share/elasticsearch/config/elasticsearch.yml
    

    在 Elasticsearch 配置文件中,找到以下部分:

    cluster.routing.allocation.disk.threshold_enabled: true
    cluster.routing.allocation.disk.watermark.high: 85%
    cluster.routing.allocation.disk.watermark.low: 75%
    

    并将它们更改为以下内容:

    cluster.routing.allocation.disk.threshold_enabled: false
    cluster.routing.allocation.disk.watermark.high: 100%
    cluster.routing.allocation.disk.watermark.low: 90%
    

    保存并退出配置文件。

  5. 重启 Elasticsearch

    现在,您需要重启 Elasticsearch 以使新配置生效。您可以使用以下命令重启 Elasticsearch:

    kubectl rollout restart deployment elasticsearch
    
  6. 验证 Elasticsearch

    现在,您可以使用以下命令来验证 Elasticsearch 是否正在运行:

    kubectl get pods -l app=elasticsearch
    

    您应该会看到 Elasticsearch Pod 正在运行。

  7. 测试 Elasticsearch

    现在,您可以使用以下命令来测试 Elasticsearch:

    curl -XGET 'http://localhost:9200/_cat/health?v'
    

    您应该会看到 Elasticsearch 正在运行且状态良好。

现在,您已经成功地在 Kubernetes 集群中安装和配置了 Elasticsearch,并使用 NFS 作为持久存储。这样,您就可以在 Kubernetes 集群中使用 Elasticsearch 来存储和处理大量数据,并确保数据的持久性。