如何在 Kubernetes 上部署 Elasticsearch?
在当今世界,数据是企业的生命线。无论是客户数据、销售数据还是产品数据,能够有效地存储、搜索和分析数据都可能对公司的成功产生重大影响。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: requests : memory : "8Gi" cpu : "2" limits : memory : "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。对于不熟悉 API 或编程的人员,Kibana 使配置 ElasticSearch 实例变得更容易。
要在 Kibana 中创建索引模式,请转到管理选项卡并选择“索引模式”。然后单击“创建索引模式”并输入模式的名称。
配置节点设置以获得最佳性能
Elasticsearch 节点负责索引和存储文档,以及在执行查询时搜索文档。为了确保 Kubernetes 上的 Elasticsearch 部署的最佳性能,正确配置节点设置非常重要。配置节点时需要考虑的一个重要因素是内存分配。
默认情况下,Elasticsearch 为每个节点分配 1GB 的内存,如果您处理大型数据集,这可能不够。要调整此设置,只需编辑每个节点上的 jvm.options 文件并将 -Xms1g 和 -Xmx1g 更改为更高的值。
配置节点时需要考虑的另一个因素是每个索引的分片数。Elasticsearch 索引可以拆分为多个分片以提高性能。
在 Kubernetes 上部署 Kibana
通过 Helm 图表安装 Kibana
Kibana 是一款开源数据可视化和探索工具,可用于可视化 Elasticsearch 数据。它通常与 Elasticsearch 一起部署,以提供一个用户友好的界面来与数据交互。为了在 Kubernetes 上部署 Kibana,我们将使用 Helm 包管理器。
Helm 是一款强大的工具,允许我们将预配置的包(称为图表)部署到 Kubernetes 集群。为了使用 Helm 安装 Kibana,我们首先需要将 Elastic 存储库添加到 Helm 配置中:
bash helm repo add elastic https://helm.elastic.co
添加 Elastic 存储库后,我们可以安装 Kibana 图表:
bash helm install kibana elastic/kibana
这将在 Kubernetes 集群上部署 Kibana 的单个实例,可以通过 Web 浏览器访问 http://:5601。
配置 Kibana 以连接到已部署的 ElasticSearch 集群
为了使 Kibana 与 Elasticsearch 交互,它需要知道如何连接到它。默认情况下,Helm 图表将使用一些合理的默认值配置 Kibana,这些值应该可以开箱即用。但是,如果您需要更多地控制 Kibana 如何连接到 Elasticsearch(例如,如果您已为 Elasticsearch 部署配置了高可用性),则可能需要编辑一些配置文件。
最简单的方法是使用 Kubernetes 中的 ConfigMap。首先,我们将创建一个名为 `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 以获得最佳性能设置,并在 Kubernetes 上使用 Helm 图表部署了 Kibana。此外,我们讨论了如何使用 Prometheus 监控 ElasticSearch 集群。
在 Kubernetes 上部署 Elasticsearch 可以为组织带来许多好处,例如可扩展性、自动化管理和提高效率。通过遵循本文中概述的步骤,您可以成功地在 Kubernetes 上部署自己的 ElasticSearch 集群。