如何在 GCP GKE Autopilot 上部署 Elasticsearch。
了解如何通过 GKE Autopilot 与 ECK 在 GCP 上部署 Elasticsearch 集群,实现部分托管的 Elasticsearch 设置配置。
在本文中,我们将学习如何使用 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=DISABLED5. 等待集群就绪。创建过程大约需要 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.yaml8. 让我们创建一个具有默认值的单节点 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 的信息,请查看以下文章:




