在 Kubernetes 上部署 Elasticsearch

Elasticsearch 是一个分布式的搜索和分析引擎,它可以快速地对大量的数据进行索引和搜索。在前端开发过程中,通常会用到 Elasticsearch 来进行日志分析、用户行为分析等工作。而 Kubernetes 则是目前最流行的容器编排系统之一,它可以帮助我们方便地部署和管理 Elasticsearch 集群。本文将介绍如何在 Kubernetes 上部署 Elasticsearch。

准备工作

首先需要安装好 Kubernetes 环境,并且需要有一个 Docker 仓库来存储 Elasticsearch 镜像。我们可以使用自己搭建的 Docker 仓库,也可以使用公共的 Docker Hub。

在安装 Elasticsearch 之前,我们需要确保 Kubernetes 中已经安装了以下组件:

  • 存储类(StorageClass)
  • 静态的索引分配器(Static Index Allocator)
  • Headless 服务(Headless service)

如果你还没有安装这些组件,可以先参考 Kubernetes 官方文档进行安装。

部署 Elasticsearch

下面是一个简单的 Elasticsearch 部署配置文件:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: elasticsearch-cluster
spec:
  serviceName: elasticsearch-cluster
  replicas: 3  # 集群中节点的数量
  selector:
    matchLabels:
      app: elasticsearch
  template:
    metadata:
      labels:
        app: elasticsearch
    spec:
      containers:
      - name: elasticsearch
        image: your-docker-registry/elasticsearch:latest
        env:
        - name: ES_JAVA_OPTS
          value: "-Xms512m -Xmx512m" # JVM heap size
        ports:
        - containerPort: 9200 # Elasticsearch API 端口
        - containerPort: 9300 # Elasticsearch 内部通信端口
        volumeMounts: # 挂载数据存储卷
        - name: elasticsearch-data
          mountPath: /usr/share/elasticsearch/data
  volumeClaimTemplates: # 数据存储卷模板
  - metadata:
      name: elasticsearch-data
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 10Gi # 每个节点的数据存储大小

这个配置文件会创建一个由 3 个 Elasticsearch 节点组成的集群,并分配给每个节点 10Gi 的存储空间。每个节点的资源配置为 512m 的 heap size。

将上述配置文件保存为 elasticsearch.yaml 文件,然后使用 kubectl 命令进行部署:

$ kubectl create -f elasticsearch.yaml

这样就可以成功在 Kubernetes 上部署 Elasticsearch 集群了。

使用 Elasticsearch

使用 Elasticsearch 需要先访问到它的 API,接下来我们将在 Kubernetes 中创建一个服务来暴露 Elasticsearch 的 API 端口:

apiVersion: v1
kind: Service
metadata:
  name: elasticsearch-service
spec:
  clusterIP: None
  ports:
  - name: http
    port: 9200
    targetPort: 9200
  - name: transport
    port: 9300
    targetPort: 9300
  selector:
    app: elasticsearch

将上述配置文件保存为 elasticsearch-service.yaml 文件,然后使用 kubectl 命令进行创建:

$ kubectl create -f elasticsearch-service.yaml

现在可以使用 kubectl get services 命令来查看刚刚创建的服务:

$ kubectl get services
NAME                    TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)             AGE
elasticsearch-service   ClusterIP   None          <none>        9200/TCP,9300/TCP   5m

可以看到 elasticsearch-service 的类型为 ClusterIP,这代表它只能在 Kubernetes 集群内部使用。但是如果你想要访问它的 API 端口,则可以通过 kube-proxy 或者通过端口映射的方式来将它暴露到集群外部。

总结

在 Kubernetes 上部署 Elasticsearch 集群相对来说比较容易,同时它也有很多优点,如:易于扩展、容错、高可用;易于管理等。在实际的开发工作中应用 Elasticsearch 可以帮助我们更好地进行数据的索引和搜索。希望今天的文章可以帮助到大家,不足之处请多多指教!

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6595193eeb4cecbf2d95533a


纠错反馈