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