博客

如何在 GCP GKE Autopilot 上部署 Elasticsearch。

了解如何通过 GKE Autopilot 与 ECK 在 GCP 上部署 Elasticsearch 集群,实现部分托管的 Elasticsearch 设置配置。

刚接触 Elasticsearch 吗?欢迎参加我们的 Elasticsearch 入门网络研讨会。您也可以开始免费云服务试用,或立即在您的计算机上试用 Elastic。

在本文中,我们将学习如何使用 Autopilot 在 Google Cloud Kubernetes (GKE) 上部署 Elasticsearch。

对于 Elasticsearch,我们将使用 Elastic Cloud on Kubernetes (ECK),这是正式的 Elasticsearch Kubernetes 运维工具,简化了所有 Elastic Stack 组件的 Kubernetes 部署协调。

要了解更多关于如何在不同 GCP 基础架构上部署 Elasticsearch 集群的信息,您可以阅读我们关于 Google Cloud Compute 和 Google Cloud Marketplace 的入门文章。

Elasticsearch 部署步骤

什么是 GKE Autopilot?

Google Kubernetes Engine (GKE) Autopilot 提供完全托管的 Kubernetes 体验,由 Google 负责集群配置、节点管理、安全与扩展,而开发人员只需专注于应用程序部署,使团队能够凭借内置的最佳实践在几分钟内完成从代码到生产环境的转化。

来源:https://cloud.google.com/blog/products/containers-kubernetes/introducing-gke-autopilot

何时在 Google Cloud 中使用 ECK?

Elastic Cloud on Kubernetes (ECK) 最适合那些拥有现有 Kubernetes 基础架构并希望部署具有高级功能(如专用节点角色、高可用性和自动化)的 Elasticsearch 的组织。

如何在 Google Cloud 中设置 ECK?

1. 登录 Google Cloud Console 。

2. 在右上角点击“Cloud Shell”按钮进入控制台,并从那里部署 GKE 集群。或者,您也可以使用 gcloud CLI。

操作过程中记得将项目 ID 替换为您自己的项目 ID。

3. 启用 Google Kubernetes Engine API。

点击下一步。

现在,搜索 Kubernetes Engine API 时,应该显示 Kubernetes Engine API 已启用。

4. 在 Cloud Shell 中创建一个 Autopilot 集群。我们将其命名为 autopilot-cluster-1,并请将 autopilot-test 替换为您的项目 ID。

gcloud beta container --project "autopilot-test-457216" clusters create-auto "autopilot-cluster-1" --region "us-central1" --release-channel "regular" --tier "standard" --enable-ip-access --no-enable-google-cloud-access --network "projects/autopilot-test-457216/global/networks/default" --subnetwork "projects/autopilot-test-457216/regions/us-central1/subnetworks/default" --cluster-ipv4-cidr "/17" --binauthz-evaluation-mode=DISABLED

5. 等待集群就绪。创建过程大约需要 10 分钟。

正确设置集群后,将显示一条确认消息。

6. 配置 kubectl 命令行访问。

gcloud container clusters get-credentials autopilot-cluster-1 --region us-central1 --project autopilot-test-457216

您应该看到:

已为 autopilot-cluster-1 生成 kubeconfig 条目。

7. 安装 Elastic Cloud on Kubernetes(ECK) 运维工具。

# Install ECK Custom Resource Definitions
kubectl create -f https://download.elastic.co/downloads/eck/2.16.1/crds.yaml

# Install the ECK operator
kubectl apply -f https://download.elastic.co/downloads/eck/2.16.1/operator.yaml

8. 让我们创建一个具有默认值的单节点 Elasticsearch 实例。

如果您想查看不同设置的配方,可以访问此链接。

请注意,如果未指定 storageClass,ECK 将使用默认设置,GKE 的默认设置为 standard-rwo,该配置使用 Compute Engine 持久化磁盘 CSI 驱动)并创建 1GB 的卷。

cat <<EOF | kubectl apply -f -
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 9.0.0
  nodeSets:
  - name: default
    count: 1
    config:
      node.store.allow_mmap: false
EOF

我们禁用nmap,是因为默认 GKE 机器的 vm.max_map_count 值过低。不建议在生产环境中禁用它,但建议增加 vm.max_map_count 的值。您可以在这里阅读更多关于如何做到这一点的信息。

9. 我们还要部署一个 Kibana 单节点集群。对于 Kibana,我们将添加一个 LoadBalancer,它将为我们提供一个外部 IP,我们可以使用该 IP 从我们的设备访问 Kibana。

cat <<EOF | kubectl apply -f -
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: quickstart
spec:
  version: 9.0.0
  http:
    service:
      metadata:
        annotations:
          cloud.google.com/l4-rbs: "enabled"
      spec:
        type: LoadBalancer
  count: 1
  elasticsearchRef:
    name: quickstart
EOF

请注意注释:

cloud.google.com/l4-rbs: "enabled"

该注释非常重要,因为它指示 Autopilot 提供一个面向公众的 LoadBalancer。如果未设置,LoadBalancer 将为内部类型。

10. 检查您的 pod 是否正在运行

kubectl get pods

11. 您还可以使用 run kubectl get elasticsearch 和 kubectl get kibana 来获取更具体的统计信息,例如 Elasticsearch 版本、节点和健康状况。

12. 获取您的服务。

kubectl get svc

这将显示 Kibana 在 EXTERNAL-IP 下的外部 URL。可能需要几分钟时间来配置 LoadBalancer。复制 EXTERNAL-IP 的值。

13. 获取“elastic”用户的 Elasticsearch 密码:

kubectl get secret quickstart-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode

14. 通过浏览器访问 Kibana:

  • URL: https://<EXTERNAL_IP>:5601

  • 用户名:elastic

  • 密码:28Pao50lr2GpyguX470L2uj5(来自上一步)

15. 通过浏览器访问时,您将看到欢迎界面。

如果您想更改 Elasticsearch 集群规格,例如更改或调整节点大小,可重新应用包含新设置的 yml 配置文件:

cat <<EOF | kubectl apply -f -
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 9.0.0
  nodeSets:
    - name: default
      count: 2
      config:
        node.store.allow_mmap: false
      podTemplate:
        spec:
          containers:
            - name: elasticsearch
              resources:
                requests:
                  memory: 1.5Gi
                  cpu: 2
                limits:
                  memory: 1.5Gi
                  cpu: 2
EOF

在此示例中,我们将再添加一个节点,并修改 RAM 和 CPU。如您所见,现在 kubectl get elasticsearch 显示 2 个节点:

这同样适用于 Kibana:

cat <<EOF | kubectl apply -f -
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: quickstart
spec:
  version: 9.0.0
  http:
    service:
      metadata:
        annotations:
          cloud.google.com/l4-rbs: "enabled"
      spec:
        type: LoadBalancer
  count: 1
  elasticsearchRef:
    name: quickstart
  podTemplate:
    spec:
      containers:
        - name: kibana
          env:
            - name: NODE_OPTIONS
              value: "--max-old-space-size=1024"
          resources:
            requests:
              memory: 0.5Gi
              cpu: 0.5
            limits:
              memory: 1Gi
              cpu: 1
EOF

我们可以调整容器 CPU/RAM 以及 Node.js 的内存使用量(max-old-space-size)。

请注意,现有的卷声明无法缩小容量。应用更新后,运维工具将在最短中断时间内完成更改。

请记得在测试结束后删除集群,以避免产生不必要的成本。

gcloud container clusters delete autopilot-cluster-1

后续步骤

如果您想了解更多关于 Kubernetes 和 Google Kubernetes Engine 的信息,请查看以下文章:

这些内容对您有多大帮助?

相关内容

如何在 Azure AKS 上自动部署 Elasticsearch

如何在 Azure AKS 上自动部署 Elasticsearch

Eduard Martin
在 Elasticsearch 中为结构化文档配置递归分块

在 Elasticsearch 中为结构化文档配置递归分块

Daniel Rubinstein
介绍 Kibana 中的 Elasticsearch 查询规则用户界面

介绍 Kibana 中的 Elasticsearch 查询规则用户界面

Jhon Guzmán
如何在 AWS Marketplace 上部署 Elasticsearch

如何在 AWS Marketplace 上部署 Elasticsearch

Eduard Martin
Elasticsearch 分片和副本:实用指南

Elasticsearch 分片和副本:实用指南

Piotr Przybyl

准备好打造最先进的搜索体验了吗?

足够先进的搜索不是一个人的努力就能实现的。Elasticsearch 由数据科学家、ML 操作员、工程师以及更多和您一样对搜索充满热情的人提供支持。让我们联系起来,共同打造神奇的搜索体验,让您获得想要的结果。