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 负责集群配置、节点管理、安全性和扩展性,而开发者专注于部署应用程序,使团队可以借助内置的最佳实践在几分钟内将代码投入生产环境。

何时在 Google Cloud 中使用 ECK?
Elastic Cloud on Kubernetes( ECK )最适合那些已经拥有 Kubernetes 基础设施、希望部署具备专用节点角色、高可用性和自动化等高级功能的 Elasticsearch 的组织。
如何设置
-
登录 Google Cloud 控制台。
-
在右上角点击 Cloud Shell 按钮访问控制台,并从那里部署 GKE 集群。或者,你也可以使用 gcloud CLI。在教程过程中,记得将项目 ID 替换为你自己的。
-
启用 Google Kubernetes Engine API。
点击 “Next”。
现在,当搜索 Kubernetes Engine API 时,应该显示为已启用。
-
在 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
-
等待直到准备好。创建大约需要 10 分钟。
正确设置集群后,会显示确认消息。
-
配置 kubectl 命令行访问权限。
gcloud container clusters get-credentials autopilot-cluster-1 --region us-central1 --project autopilot-test-457216
你应该看到:
为 autopilot-cluster-1 生成了 kubeconfig 条目。
-
安装 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
- 让我们用默认值创建一个单节点 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.0nodeSets:- name: defaultcount: 1config:node.store.allow_mmap: false EOF
我们禁用了 nmap,因为默认的 GKE 机器的 vm.max_map_count 值太低。禁用它不建议用于生产环境,应该提高 vm.max_map_count 的值。你可以在这里了解更多如何操作。
-
我们也来部署一个单节点 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.0http:service:metadata:annotations:cloud.google.com/l4-rbs: "enabled"spec:type: LoadBalancercount: 1elasticsearchRef:name: quickstart EOF
注意这个注解:
cloud.google.com/l4-rbs: "enabled"
这非常重要,因为它告诉 Autopilot 提供一个面向公网的 LoadBalancer。如果不设置,LoadBalancer 将是内部的。
-
检查你的 pods 是否正在运行。
kubectl get pods
-
你也可以运行 kubectl get elasticsearch 和 kubectl get kibana,查看更具体的信息,比如 Elasticsearch 版本、节点和健康状态。
-
访问你的服务。
kubectl get svc
这会在 EXTERNAL-IP 下显示 Kibana 的外部 URL。LoadBalancer 可能需要几分钟来配置。复制 EXTERNAL-IP 的值。
-
获取 ‘elastic’ 用户的 Elasticsearch 密码:
kubectl get secret quickstart-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode
-
通过浏览器访问 Kibana:网址:https://< EXTERNAL_IP >:5601
用户名: elastic
密码:28Pao50lr2GpyguX470L2uj5(来自上一步) -
通过浏览器访问时,你会看到欢迎界面。
如果你想更改 Elasticsearch 集群配置,比如更改或调整节点大小,可以用新的设置重新应用 yml 清单:
cat <<EOF | kubectl apply -f -
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:name: quickstart
spec:version: 9.0.0nodeSets:- name: defaultcount: 2config:node.store.allow_mmap: falsepodTemplate:spec:containers:- name: elasticsearchresources:requests:memory: 1.5Gicpu: 2limits:memory: 1.5Gicpu: 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.0http:service:metadata:annotations:cloud.google.com/l4-rbs: "enabled"spec:type: LoadBalancercount: 1elasticsearchRef:name: quickstartpodTemplate:spec:containers:- name: kibanaenv:- name: NODE_OPTIONSvalue: "--max-old-space-size=1024"resources:requests:memory: 0.5Gicpu: 0.5limits:memory: 1Gicpu: 1
EOF
我们可以调整容器的 CPU/内存,还有 Node.js 的内存使用(max-old-space-size)。
请注意,已有的存储卷声明不能缩小。应用更新后,运维工具会尽量以最小中断时间完成更改。
测试结束后,记得删除集群,避免产生不必要的费用。
gcloud container clusters delete autopilot-cluster-1
下一步
如果你想了解更多关于 Kubernetes 和 Google Kubernetes Engine 的内容,可以查看这些文章:
- Elastic Cloud on Kubernetes | Elastic Docs
- Introducing GKE Autopilot | Google Cloud Blog
- Autopilot overview | Google Kubernetes Engine (GKE)
原文:ECK made simple: Deploying Elasticsearch on GCP GKE Autopilot - Elasticsearch Labs