ECK 简化:在 GCP GKE Autopilot 上部署 Elasticsearch

发布于:2025-06-21 ⋅ 阅读:(14) ⋅ 点赞:(0)

作者:来自 Elastic Eduard Martin

学习如何使用 GKE Autopilot 和 ECK 在 GCP 上部署 Elasticsearch 集群。

想要获得 Elastic 认证?了解下一次 Elasticsearch Engineer 培训的时间!

Elasticsearch 拥有丰富的新功能,可以帮助你为你的使用场景构建最佳搜索解决方案。深入了解我们的示例笔记本,开始免费 cloud 试用,或者立即在本地机器上试用 Elastic。


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

对于 Elasticsearch,我们将使用 Elastic Cloud on Kubernetes( ECK ),这是官方的 Elasticsearch Kubernetes 运维工具,可以简化对所有 Elastic Stack 组件在 Kubernetes 上的部署编排。

什么是 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 的组织。

如何设置

  1. 登录 Google Cloud 控制台

  2. 在右上角点击 Cloud Shell 按钮访问控制台,并从那里部署 GKE 集群。或者,你也可以使用 gcloud CLI在教程过程中,记得将项目 ID 替换为你自己的。

  3. 启用 Google Kubernetes Engine API

    点击 “Next”。

    现在,当搜索 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 )operator。

    # 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,方便我们从设备访问 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. 检查你的 pods 是否正在运行。

    kubectl get pods

  11. 你也可以运行 kubectl get elasticsearch 和 kubectl get kibana,查看更具体的信息,比如 Elasticsearch 版本、节点和健康状态。

  12. 访问你的服务。

    kubectl get svc

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

  13. 获取 ‘elastic’ 用户的 Elasticsearch 密码:

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

  14. 通过浏览器访问 Kibana:网址: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

在这个例子中,我们将增加一个节点,并修改内存和 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/内存,还有 Node.js 的内存使用(max-old-space-size)。

请注意,已有的存储卷声明不能缩小。应用更新后,运维工具会尽量以最小中断时间完成更改。

测试结束后,记得删除集群,避免产生不必要的费用。

gcloud container clusters delete autopilot-cluster-1

下一步

如果你想了解更多关于 Kubernetes 和 Google Kubernetes Engine 的内容,可以查看这些文章:

原文:ECK made simple: Deploying Elasticsearch on GCP GKE Autopilot - Elasticsearch Labs


网站公告

今日签到

点亮在社区的每一天
去签到