使用 Elasticsearch 和 Kubernetes 进行数据存储的最佳实践

maz*_*zze 6 elasticsearch kubernetes

在阅读了一些关于Kubernetes 中的Persistent Volumes 的文档后,我想知道哪一个是运行高可用 ElasticSearch 集群的最佳设置(存储方面)。我没有运行典型的EFK(或 ELK)设置,但我使用 ElasticSearch 作为合适的全文搜索引擎。

我已经阅读了官方的 Elastic Documentation,但我发现它非常缺乏说明。根据“Kubernetes in Action”,第 6 章:

当在 pod 中运行的应用程序需要将数据持久化到磁盘并且即使 pod 重新调度到另一个节点时也有相同的数据可用时,您不能使用我们迄今为止提到的任何卷类型。由于需要从任何集群节点访问此数据,因此必须将其存储在某种类型的网络附加存储 (NAS) 上。

所以,如果我没有记错的话,我需要一个Volume和访问它通过PersistentVolumesPersistentVolumeClaimRetain政策。

在查看Official Volumes 时,我感觉应该自己定义 Volume 类型。但是,在查看DigitalOcean 指南时,那里似乎没有任何 Volume 设置。我选择了那个教程,但是在 Medium 上有几十个都在做同样的事情。

那么:哪个是 ElasticSearch 集群的最佳设置?当然要记住,为了不丢失索引中的任何数据,并且能够添加可以访问索引的 pods(Kubernetes) 或节点 (ElasticSearch)。

小智 3

在 kubernetes 中部署 ElasticSearch 集群的一个好模式是定义一个StatefulSets.

由于 StatefulSet 复制多个 Pod,因此您不能简单地引用持久卷声明。persistent volume claim template相反,您需要向 StatefulSet 状态定义添加一个。

为了使这些复制的持久卷正常工作,您需要创建动态卷配置存储类,以允许按需创建存储卷。

DigitalOcean指导教程中,持久卷声明模板如下:

  volumeClaimTemplates:
  - metadata:
      name: data
      labels:
        app: elasticsearch
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: do-block-storage
      resources:
        requests:
          storage: 100Gi
Run Code Online (Sandbox Code Playgroud)

在这里,StorageClassdo-block-storage. 您可以将其替换为您自己的存储类别