如何在 Kubernetes 上部署 Elasticsearch?

linuxoperating systemopen source

在当今世界,数据是企业的命脉。无论是客户数据、销售数据还是产品数据,有效地存储、搜索和分析数据的能力都对公司的成功至关重要。Elasticsearch 是一个分布式搜索和分析引擎,专为速度和可扩展性而设计。

它每秒可以处理数百万次查询,并轻松处理 PB 级数据。而 Kubernetes 是一个开源容器编排系统,可以自动化应用程序的部署、扩展和管理。

设置环境

安装必要的工具(kubectl、helm)

在 Kubernetes 上部署 Elasticsearch 之前,您需要在本地计算机上安装 kubectl 和 helm。 Kubectl 是一个命令行界面 (CLI) 工具,用于与 Kubernetes 集群通信并管理部署、服务和 Pod 等资源。

Helm 是 Kubernetes 的包管理器,它通过提供预配置的图表简化了应用程序的安装过程。

配置 Kubernetes 集群以部署 Elasticsearch

在本地计算机上安装 kubectl 和 helm 后,您需要配置 Kubernetes 集群以部署 Elasticsearch。这涉及为 Elasticsearch 资源创建命名空间并设置持久存储。使用 kubectl 创建命名空间的步骤如下:

kubectl create namespace elasticsearch

这将创建一个名为"elasticsearch"的新命名空间。

下一步是配置持久存储,允许将数据存储在单个 Pod 之外,这样即使 Pod 因维护或扩展需求而发生故障或重启,数据仍然可用。您应该安装外部存储提供程序,例如 NFS 存储类配置程序或提供预配置块卷的云提供商的块存储类。

创建 Elasticsearch 部署

创建用于部署配置的 YAML 文件

在 Kubernetes 上部署 Elasticsearch 之前,您需要创建一个 YAML 文件来定义 Elasticsearch 部署的配置。Kubernetes 使用此 YAML 文件来了解您希望如何部署 ElasticSearch。

以下是您的 YAML 文件的示例:

apiVersion: apps/v1 
kind: Deployment metadata: 
name: elasticsearch spec: 
selector: matchLabels: 
app: elasticsearch replicas: 1 
template: metadata: 
labels: app: elasticsearch 
spec: containers: 
- name: elasticsearch image: docker.elastic.co/elasticsearch/elasticsearch:{VERSION} 
ports: - containerPort: 9200 
name: http - containerPort: 9300 
name: tcp  

此 YAML 文件包含在 Kubernetes Pod 中运行的 Elasticsearch 容器的单个副本的规范。

在 YAML 文件中定义资源、副本和其他设置

除了定义 Elasticsearch 部署的副本数量和镜像标签外,您还可以指定各种资源需求,例如 CPU 和内存限制。默认情况下,Kubernetes 会根据每个容器的已知特性为其分配默认资源请求和限制。要为您的 ElasticSearch 部署定义自定义资源限制或要求,请在容器规范中添加以下行:

resources: 请求:
memory : "8Gi" cpu : "2"
limits : 内存 : "16Gi"
cpu : "4"

您还可以配置各种其他设置,例如环境变量、命令行参数、活性探测等。

使用 kubectl apply 命令部署 Elasticsearch 实例

创建 YAML 文件后,您可以使用 kubectl apply 命令将其部署到您的 Kubernetes 集群:

kubectl apply -f elasticsearch.yaml

此命令将使用 YAML 中指定的配置创建一个新的部署文件。

您可以通过运行"kubectl get deployments"和"kubectl get pods"来查看 Elasticsearch 部署的状态。恭喜!

您已成功在 Kubernetes 上创建并部署 Elasticsearch 实例。下一步是配置 Elasticsearch 设置,例如节点、索引模式、映射等。

配置 Elasticsearch

设置索引模式和映射

在 Kubernetes 上成功部署 ElasticSearch 集群后,下一步是根据您的数据需求进行配置。此配置的一个重要方面是设置索引模式和映射。索引模式用于定义数据在 ElasticSearch 中的组织方式,而映射则指定将存储在每个索引中的字段及其数据类型。

要创建索引模式,您可以使用 Kibana 或 ElasticSearch REST API。 Kibana 让不熟悉 API 或编程的用户也能更轻松地配置 ElasticSearch 实例。

要在 Kibana 中创建索引模式,请转到"管理"选项卡并选择"索引模式"。然后点击"创建索引模式"并输入模式名称。

配置节点设置以获得最佳性能

Elasticsearch 节点负责索引和存储文档,以及在执行查询时搜索文档。为了确保 Elasticsearch 在 Kubernetes 上的部署达到最佳性能,正确配置节点设置至关重要。配置节点时需要考虑的一个重要因素是内存分配。

默认情况下,Elasticsearch 为每个节点分配 1GB 内存,如果您处理的是大型数据集,这可能不够用。要调整此设置,只需编辑每个节点上的 jvm.options 文件,并将 -Xms1g 和 -Xmx1g 更改为更高的值。

配置节点时需要考虑的另一个因素是每个索引的分片数量。为了获得更好的性能,Elasticsearch 索引可以拆分成多个分片。

在 Kubernetes 上部署 Kibana

通过 Helm Chart 安装 Kibana

Kibana 是一款开源数据可视化和探索工具,可用于可视化 Elasticsearch 数据。它通常与 Elasticsearch 一起部署,以提供用户友好的数据交互界面。为了在 Kubernetes 上部署 Kibana,我们将使用 Helm 软件包管理器。

Helm 是一款功能强大的工具,它允许我们将预配置的软件包(称为 Chart)部署到我们的 Kubernetes 集群上。为了使用 Helm 安装 Kibana,我们首先需要将 Elastic 存储库添加到我们的 Helm 配置中 -

bash helm repo add elastic https://helm.elastic.co    

添加 Elastic 代码库后,我们就可以安装 Kibana chart 了 -

bash helm install kibana elastic/kibana

这将在我们的 Kubernetes 集群上部署一个 Kibana 实例,您可以通过 Web 浏览器访问 http://:5601。

配置 Kibana 以连接到已部署的 ElasticSearch 集群

为了使 Kibana 能够与 Elasticsearch 交互,它需要知道如何连接到 Elasticsearch。默认情况下,Helm chart 会使用一些合理的默认设置来配置 Kibana,这些默认设置应该可以开箱即用。但是,如果您需要更好地控制 Kibana 连接到 Elasticsearch 的方式(例如,如果您已将 Elasticsearch 部署配置为高可用性),则可能需要编辑一些配置文件。

最简单的方法是使用 Kubernetes 中的 ConfigMaps。首先,我们将创建一个名为"kibana.yml"的新 ConfigMap -

bash kubectl create configmap kibana-yml --from-file=kibana.yml

接下来,我们将告诉 Elastic 图表我们希望它使用我们自定义的"kibana.yml"文件进行配置 -

bash helm upgrade kibana elastic/kibana --set configMap=kibana-yml

此时,Kibana 应该已配置好,可以连接到我们的 Elasticsearch 部署。

结论

在本文中,我们讨论了在 Kubernetes 上部署 Elasticsearch 的重要性,并提供了详细的指南。我们介绍了在 Kubernetes 上部署 Elasticsearch 的先决条件、环境搭建、使用 kubectl apply 命令创建 Elasticsearch 部署、配置 Elasticsearch 以获得最佳性能设置,并使用 Helm Chart 在 Kubernetes 上部署 Kibana。此外,我们还讨论了如何使用 Prometheus 监控 ElasticSearch 集群。

在 Kubernetes 上部署 Elasticsearch 可以为组织带来诸多优势,例如可扩展性、自动化管理和效率提升。按照本文概述的步骤,您可以成功在 Kubernetes 上部署您自己的 ElasticSearch 集群。


相关文章


有用资源