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

作者:来自 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

相关推荐
蓝宗林41 分钟前
Spark入门到实践
大数据·分布式·spark
一个天蝎座 白勺 程序猿2 小时前
深度体验KingbaseES在线平台:从零掌握企业级数据库实战(附架构图+代码案例)
数据库·k8s
ThisIsClark2 小时前
什么是Spark
大数据·分布式·spark
qq_397752932 小时前
革新仓储新纪元:海格里斯HEGERLS四向穿梭车智领未来
大数据·人工智能
事变天下2 小时前
店匠科技闪耀“跨博会”,技术+生态打造灵活出海能力
大数据·人工智能·科技
文艺倾年3 小时前
【八股消消乐】Elasticsearch优化—检索Labubu
大数据·elasticsearch·搜索引擎
武子康3 小时前
大数据-18 Flume HelloWorld 实现Source Channel Sink 控制台流式收集
大数据·后端·apache flume
青软青之LIMS3 小时前
King’s LIMS 系统引领汽车检测实验室数字化转型
大数据·人工智能·汽车·实验室数字化管理系统·实验室综合管理平台·实验室检测管理系统
会飞的小妖3 小时前
Elasticsearch相关操作
elasticsearch
Allen_LVyingbo4 小时前
从“数据困境”到“数据生态”:DaaS重塑三甲医院医疗数据治理
人工智能·搜索引擎·架构·健康医疗