ブログ

GCP GKE AutopilotでElasticsearchをデプロイする方法

部分的に管理されたElasticsearchセットアップ構成のために、GKEオートパイロットとECKを使用してElasticsearchクラスターをGCPにデプロイする方法を学びます。

この記事では、Autopilotを使用してGoogle Cloud Kubernetes(GKE)にElasticsearchをデプロイする方法を学びます。

Elasticsearchでは、Elastic Cloud on Kubernetes(ECK)を使用します。これはElasticsearch Kubernetes公式オペレーターであり、すべてのElastic StackコンポーネントのKubernetes導入のオーケストレーションを簡素化します。

ElasticsearchクラスターをさまざまなGCPインフラストラクチャーにデプロイする方法の詳細は、Google Cloud ComputeGoogle Cloud Marketplaceの入門記事をご覧ください。

Elasticsearchの導入作業

Elasticsearch ECKの導入作業。

GKE Autopilotとは何ですか?

Google Kubernetes Engine(GKE)Autopilotは、Googleがクラスター設定、ノード管理、セキュリティ、スケーリングを処理し、開発者がアプリケーションのデプロイに集中できる、完全に管理されたKubernetesエクスペリエンスを提供します。これにより、チームは組み込まれたベストプラクティスを使用し、コードから本番環境まで数分で移行できます。

GKE Autopilot コンテナ。

出典 : 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に更新してください。

GCP GKE AutopilotでElasticsearchを設定する方法。

3. Google Kubernetes Engine APIを有効にします。

Google Kubernetes Engine APIの有効化。

[次へ] をクリックします。

これで、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=DISABLED

5. 準備ができるまで待ちます。作成には10分ほどかかります。

Autopilotクラスターのセットアップの画像。

クラスターを正しく設定すると確認メッセージが表示されます。

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.yaml

8. デフォルト値で単一ノードのElasticsearchインスタンスを作成しましょう。

異なる設定のレシピを確認したい場合はこちらのリンクをご覧ください。

storageClassを指定しない場合、ECKはデフォルトで設定されたものを使用します。GKEの場合はstandard-rwoで、これはCompute Engine persistent disk CSI Driverを使用して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

デフォルトの GKE マシンのvm.max_map_count値が低すぎるため、 nmapを無効にしました。本番環境ではこれを無効にせず、 vm.max_map_countの値を増やすことが推奨されます。詳しくはこちらをご覧ください。

9. Kibanaのシングルノードクラスターもデプロイしましょう。Kibanaの場合、デバイスからKibanaにアクセスするために使用できる外部IPを提供するLoadBalancerを追加します。

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. ポッドが動作していることを確認します。

kubectl get pods

11. また、run kubectl get elasticsearchkubectl 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 にアクセスします。

  • URL: https://<EXTERNAL_IP>:5601

  • ユーザー名:elastic

  • パスワード:28Pao50lr2GpyguX470L2uj5(前のステップから)

Elasticウェルカム画面。

15. ブラウザからアクセスすると、ウェルカム画面が表示されます。

Elasticsearchのホームページです。

ノードの変更やサイズ変更など、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

この例では、ノードをもう1つ追加して、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について詳しく知りたい場合は、次の記事をご覧ください。

関連記事

Elasticsearch の異なるバージョン間およびクラスター間でデータを移行する方法

Kofi Bartlett

Kibana に Elasticsearch クエリルール UI を導入

Jhon Guzmán

JavaScript で Elasticsearch を正しく使う方法、パート II

Jeffrey Rengifo

セマンティック検索の実装: Elasticsearch を使ったレシピ検索の構築

Andre Luiz

AWS MarketplaceでElasticsearchをデプロイする方法

Eduard Martin

最先端の検索体験を構築する準備はできましたか?

十分に高度な検索は 1 人の努力だけでは実現できません。Elasticsearch は、データ サイエンティスト、ML オペレーター、エンジニアなど、あなたと同じように検索に情熱を傾ける多くの人々によって支えられています。ぜひつながり、協力して、希望する結果が得られる魔法の検索エクスペリエンスを構築しましょう。

はじめましょう