このチュートリアルでは、Google Kubernetes Engine(GKE)に Elasticsearch ベクトル データベース クラスタをデプロイする方法について説明します。
ベクトル データベースは、高次元ベクトルの大規模なコレクションを管理および検索するために特別に設計されたデータストアです。これらのベクトルは、テキスト、画像、音声、動画などのデータのほか、数値でエンコードできるデータを表します。完全一致に依存するリレーショナル データベースとは異なり、ベクトル データベースは大規模なデータセット内の類似アイテムの検索やパターンの識別に特化しています。
Elasticsearch は、検索機能と分析機能を組み合わせたベクトル データベースです。クラスタを管理するためのオープンな REST API が用意されており、構造化クエリ、全文クエリ、複雑なクエリをサポートしています。Elasticsearch では、予測入力の候補を使用して、フレーズ検索、類似検索、接頭辞検索を行うことができます。
このチュートリアルは、GKE に Elasticsearch データベース クラスタをデプロイすることに関心があるクラウド プラットフォーム管理者とアーキテクト、ML エンジニア、MLOps(DevOps)の専門家を対象としています。
利点
Elasticsearch には次のようなメリットがあります。
- さまざまなプログラミング言語に対応している幅広いライブラリと、他のサービスと統合できるオープン API。
- 水平スケーリングと、シャーディング / レプリケーション サポートにより、スケーリングと高可用性を簡素化。
- 最適なリソース使用率を実現するマルチノード クラスタのバランス調整。
- コンテナと Kubernetes のサポートにより、最新のクラウドネイティブ環境にシームレスに統合。
目標
このチュートリアルでは、以下の方法について学習します。
- Elasticsearch 向けに GKE インフラストラクチャを計画して、デプロイする。
- GKE クラスタに Elasticsearch をデプロイして構成する。
- StatefulHA オペレーターをデプロイして、Elasticsearch の高可用性を確保する。
- ノートブックを実行して、サンプル ベクトル エンベディングの生成と保存、ベクトルベースの検索クエリを実行する。
- 指標を収集してダッシュボードで可視化する。
デプロイ アーキテクチャ
このチュートリアルでは、複数のアベイラビリティ ゾーンに複数の Kubernetes ノードを分散させ、Elasticsearch 用に高可用性のリージョン GKE クラスタをデプロイします。この設定により、フォールト トレランス、スケーラビリティ、地理的冗長性を確保できます。稼働時間と可用性の SLA を提供しながら、ローリング アップデートとメンテナンスが可能になります。詳細については、リージョン クラスタをご覧ください。
ノードがアクセス不能になっても、そのノード上の Pod はすぐには再スケジュールされません。StatefulSet を使用する Pod では、アプリケーション Pod が削除されて新しいノードに再スケジュールされるまでに 8 分以上かかることがあります。
この問題に対処するために、StatefulHA オペレーターは次の処理を行います。
.forceDeleteStrategy
:AfterNodeUnreachable
設定を使用して、再スケジュールの遅延の解決、フェイルオーバー設定の処理、復旧時間の短縮を行います。- StatefulSet アプリケーションが RePD を使用していることを確認します。
- Elasticsearch と同じ Namespace にデプロイされるカスタム HighAvailabilityApplication リソースにより GKE を拡張します。これにより、StatefulHA オペレーターはフェイルオーバー イベントをモニタリングし、対応できます。
次の図は、GKE クラスタ内の複数のノードとゾーンで実行されている Elasticsearch クラスタを示しています。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
Elasticsearch は、Server Side Public License(SSPL)に基づいて無料で利用できます。
始める前に
このチュートリアルでは、Cloud Shell を使用してコマンドを実行します。Google Cloud Shell は、Google Cloud でホストされているリソースを管理するためのシェル環境です。これには、Google Cloud CLI、kubectl、Helm、Terraform コマンドライン ツールがプリインストールされています。Cloud Shell を使用しない場合は、Google Cloud CLI をインストールする必要があります。
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Resource Manager, Compute Engine, GKE, IAM Service Account Credentials, and Backup for GKE APIs:
gcloud services enable cloudresourcemanager.googleapis.com
compute.googleapis.com container.googleapis.com iamcredentials.googleapis.com gkebackup.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Resource Manager, Compute Engine, GKE, IAM Service Account Credentials, and Backup for GKE APIs:
gcloud services enable cloudresourcemanager.googleapis.com
compute.googleapis.com container.googleapis.com iamcredentials.googleapis.com gkebackup.googleapis.com -
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/storage.objectViewer, roles/container.admin, roles/iam.serviceAccountAdmin, roles/compute.admin, roles/gkebackup.admin, roles/monitoring.viewer
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
環境を設定する
Cloud Shell を使用して環境を設定するには、次の操作を行います。
プロジェクト、リージョン、Kubernetes クラスタ リソースの接頭辞に環境変数を設定します。
export PROJECT_ID=PROJECT_ID export KUBERNETES_CLUSTER_PREFIX=elasticsearch export REGION=us-central1
PROJECT_ID
は、実際の Google Cloud プロジェクト ID に置き換えます。
このチュートリアルでは、
us-central1
リージョンを使用して Deployment リソースを作成します。Helm のバージョンを確認します。
helm version
3.13 より古い場合は、バージョンを更新します。
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
GitHub からサンプルコード リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
elasticsearch
ディレクトリに移動して、Deployment リソースの作成を開始します。cd kubernetes-engine-samples/databases/elasticsearch
クラスタ インフラストラクチャを作成する
このセクションでは、Terraform スクリプトを実行して、限定公開の高可用性リージョン GKE クラスタを作成し、Elasticsearch データベースをデプロイします。
Elasticsearch のデプロイには、Standard クラスタまたは Autopilot クラスタを使用できます。それぞれに利点があり、料金モデルも異なります。
Autopilot
次の図は、プロジェクトにデプロイされた Autopilot GKE クラスタを示しています。
クラスタ インフラストラクチャをデプロイするには、Cloud Shell で次のコマンドを実行します。
export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
terraform -chdir=terraform/gke-autopilot init
terraform -chdir=terraform/gke-autopilot apply \
-var project_id=${PROJECT_ID} \
-var region=${REGION} \
-var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}
GKE は、実行時に次の変数を置き換えます。
GOOGLE_OAUTH_ACCESS_TOKEN
は、gcloud auth print-access-token
コマンドを使用して、さまざまな Google Cloud APIs とのやり取りを認証するアクセス トークンを取得します。PROJECT_ID
、REGION
、KUBERNETES_CLUSTER_PREFIX
は、環境を設定するセクションで定義した環境変数で、作成する Autopilot クラスタの新しい関連変数に割り当てられます。
プロンプトが表示されたら、「yes
」と入力します。
出力は次のようになります。
...
Apply complete! Resources: 9 added, 0 changed, 0 destroyed.
Outputs:
kubectl_connection_command = "gcloud container clusters get-credentials elasticsearch-cluster --region us-central1"
Terraform が次のリソースを作成します。
- Kubernetes ノード用のカスタム VPC ネットワークとプライベート サブネット
- ネットワーク アドレス変換(NAT)を介してインターネットにアクセスするための Cloud Router。
us-central1
リージョンの限定公開 GKE クラスタ。- クラスタのロギングとモニタリングの権限を持つ
ServiceAccount
。 - クラスタのモニタリングおよびアラート用の Google Cloud Managed Service for Prometheus の構成。
Standard
次の図は、3 つの異なるゾーンにデプロイされた限定公開のリージョン GKE Standard クラスタを示しています。
クラスタ インフラストラクチャをデプロイするには、Cloud Shell で次のコマンドを実行します。
export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
terraform -chdir=terraform/gke-standard init
terraform -chdir=terraform/gke-standard apply \
-var project_id=${PROJECT_ID} \
-var region=${REGION} \
-var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}
GKE は、実行時に次の変数を置き換えます。
GOOGLE_OAUTH_ACCESS_TOKEN
は、gcloud auth print-access-token
コマンドを使用して、さまざまな Google Cloud APIs とのやり取りを認証するアクセス トークンを取得します。PROJECT_ID
、REGION
、KUBERNETES_CLUSTER_PREFIX
は、環境を設定するセクションで定義した環境変数で、作成する Standard クラスタの新しい関連変数に割り当てられます。
プロンプトが表示されたら、「yes
」と入力します。これらのコマンドが完了し、クラスタが「準備完了」ステータスになるまでに数分かかることがあります。
出力は次のようになります。
...
Apply complete! Resources: 10 added, 0 changed, 0 destroyed.
Outputs:
kubectl_connection_command = "gcloud container clusters get-credentials elasticsearch-cluster --region us-central1"
Terraform が次のリソースを作成します。
- Kubernetes ノード用のカスタム VPC ネットワークとプライベート サブネット
- ネットワーク アドレス変換(NAT)を介してインターネットにアクセスするための Cloud Router。
- 自動スケーリングを有効にした
us-central1
リージョンの限定公開 GKE クラスタ(ゾーンあたり 1~2 ノード)。 - クラスタのロギングとモニタリングの権限を持つ
ServiceAccount
。 - クラスタのモニタリングおよびアラート用の Google Cloud Managed Service for Prometheus の構成。
クラスタに接続する
認証情報を取得し、新しい GKE クラスタと通信できるように kubectl
を構成します。
gcloud container clusters get-credentials \
${KUBERNETES_CLUSTER_PREFIX}-cluster --region ${REGION}
Elasticsearch データベースと StatefulHA オペレーターをデプロイする
このセクションでは、ECK Operator Helm チャートを使用して、Elasticsearch データベース(クラスタモード)と StatefulHA オペレーターを GKE クラスタにデプロイします。
Deployment により、次の構成の GKE クラスタが作成されます。
- Elasticsearch ノードの 3 つのレプリカ。
- DaemonSet。Elasticsearch のパフォーマンスを最適化するために仮想メモリ設定を変更します。
- NodeAffinity と PodAntiAffinity の構成。Kubernetes ノード間で適切な分散を行い、ノードプールの使用が最適化され、複数のゾーンで可用性が最大化されます。
- フェイルオーバー プロセスを管理し、高可用性を確保する Stateful HA オペレーター。
- 認証のために、データベースは認証情報、パスワード、証明書を含む Kubernetes Secret を作成します。
Helm チャートを使用して Elasticsearch データベースをデプロイする手順は次のとおりです。
StatefulHA アドオンを有効にします。
Autopilot
GKE は、クラスタの作成時に
StatefulHA
アドオンを自動的に有効にします。Standard
次のコマンドを実行します。
gcloud container clusters update ${KUBERNETES_CLUSTER_PREFIX}-cluster \ --project=${PROJECT_ID} \ --region=${REGION} \ --update-addons=StatefulHA=ENABLED
このコマンドが完了し、クラスタが準備完了ステータスになるまでに 15 分かかることがあります。
Elastic Cloud on Kubernetes(ECK)カスタム リソース定義(CRD)を作成します。
kubectl apply -f https://download.elastic.co/downloads/eck/2.11.1/crds.yaml
ECK オペレーターをデプロイします。
kubectl apply -f https://download.elastic.co/downloads/eck/2.11.1/operator.yaml
データベースに Namespace
elastic
を作成します。kubectl create ns elastic
Elasticsearch のフェイルオーバー ルールを定義する
HighAvailabilityApplication
(HAA)リソースをインストールします。kubectl apply -n elastic -f manifests/01-regional-pd/ha-app.yaml
ha-app.yaml
マニフェストには、HighAvailabilityApplication
リソースが記述されています。マニフェストを適用して、リージョン SSD 永続ディスク
StorageClass
を作成します。kubectl apply -n elastic -f manifests/01-regional-pd/regional-pd.yaml
regional-pd.yaml
マニフェストには、永続 SSD ディスクStorageClass
が記述されています。DaemonSet リソースをデプロイして、各ノードで仮想メモリを設定します。
kubectl apply -n elastic -f manifests/02-elasticsearch/mmap-count.yaml
mmap-count.yaml
マニフェストには、DaemonSet
が記述されています。マニフェストを適用して Elasticsearch クラスタをデプロイします。
kubectl apply -n elastic -f manifests/02-elasticsearch/elasticsearch.yaml
elasticsearch.yaml
マニフェストには Deployment が記述されています。Elasticsearch クラスタが完全に起動するまで数分待ちます。
デプロイのステータスを確認します。
kubectl get elasticsearch -n elastic --watch
elasticsearch
データベースが正常にデプロイされると、次のように出力されます。NAME HEALTH NODES VERSION PHASE AGE elasticsearch-ha green 3 8.11.4 Ready 2m30s
HEALTH
が「green
」と表示されるまで待ちます。必要に応じて、Ctrl+C キーを押してコマンドを終了します。内部ロードバランサをデプロイして、GKE クラスタと同じ VPC で実行されている Elasticsearch データベースにアクセスします。
kubectl apply -n elastic -f manifests/02-elasticsearch/ilb.yaml
ilb.yaml
マニフェストには、LoadBalancer
Service が記述されています。フェイルオーバー ルールが適用されているかどうかを確認するには、リソースの説明を取得して
Status: Message: Application is protected
を確認します。kubectl describe highavailabilityapplication elasticsearch-ha-es-main -n elastic
出力は次のようになります。
Status: Conditions: Last Transition Time: 2024-02-01T13:27:50Z Message: Application is protected Observed Generation: 1 Reason: ApplicationProtected Status: True Type: Protected Events: <none>
GKE がワークロードを開始したら、GKE が Elasticsearch ワークロードを作成していることを確認します。
kubectl get pod,svc,statefulset,pdb,secret,daemonset -n elastic
出力は次のようになります。
NAME READY STATUS RESTARTS AGE pod/elasticsearch-ha-es-main-0 2/2 Running 0 7m16s pod/elasticsearch-ha-es-main-1 2/2 Running 0 7m16s pod/elasticsearch-ha-es-main-2 2/2 Running 0 7m16s pod/max-map-count-setter-28wt9 1/1 Running 0 7m27s pod/max-map-count-setter-cflsw 1/1 Running 0 7m27s pod/max-map-count-setter-gzq9k 1/1 Running 0 7m27s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/elasticsearch-ha-es-http ClusterIP 10.52.8.28 <none> 9200/TCP 7m18s service/elasticsearch-ha-es-internal-http ClusterIP 10.52.3.48 <none> 9200/TCP 7m18s service/elasticsearch-ha-es-main ClusterIP None <none> 9200/TCP 7m16s service/elasticsearch-ha-es-transport ClusterIP None <none> 9300/TCP 7m18s NAME READY AGE statefulset.apps/elasticsearch-ha-es-main 3/3 7m16s NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE poddisruptionbudget.policy/elasticsearch-ha-es-default 2 N/A 1 7m16s NAME TYPE DATA AGE secret/elasticsearch-ha-es-elastic-user Opaque 1 7m18s secret/elasticsearch-ha-es-file-settings Opaque 1 7m16s secret/elasticsearch-ha-es-http-ca-internal Opaque 2 7m17s secret/elasticsearch-ha-es-http-certs-internal Opaque 3 7m17s secret/elasticsearch-ha-es-http-certs-public Opaque 2 7m17s secret/elasticsearch-ha-es-internal-users Opaque 4 7m18s secret/elasticsearch-ha-es-main-es-config Opaque 1 7m16s secret/elasticsearch-ha-es-main-es-transport-certs Opaque 7 7m16s secret/elasticsearch-ha-es-remote-ca Opaque 1 7m16s secret/elasticsearch-ha-es-transport-ca-internal Opaque 2 7m16s secret/elasticsearch-ha-es-transport-certs-public Opaque 1 7m16s secret/elasticsearch-ha-es-xpack-file-realm Opaque 4 7m18s NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/max-map-count-setter 6 6 6 6 6 <none> 13m
Elasticsearch クラスタ用に、次の GKE リソースが作成されます。
- 3 つの Pod レプリカを制御する Elasticsearch
StatefulSet
。 - 仮想メモリ設定を構成する DaemonSet。
- Elasticsearch に接続するサービス。
- スーパーユーザー認証情報とサービス関連の証明書を含む Secret。
- Elasticsearch アプリケーションをアクティブにモニタリングする、ステートフル HA オペレーター Pod と
HighlyAvailableApplication
リソース。
Vertex AI Colab Enterprise ノートブックでクエリを実行する
このセクションでは、Colab Enterprise ノートブックで公式の Elasticsearch Python クライアントを使用して、Elasticsearch ドキュメントにエンベディングを生成し、セマンティック検索クエリを実行する方法について説明します。Elasticsearch のドキュメントは、それぞれ対応する値とペアになっているフィールドで構成されます。
Elasticsearch を効果的に活用するには、データをドキュメントに構造化し、検索用のインデックスに登録することをおすすめします。
この例では、さまざまなジャンルの書籍のリストを含む CSV ファイルのデータセットを使用します。Elasticsearch は検索エンジンとして機能し、作成した Pod は Elasticsearch データベースをクエリするクライアントとして機能します。
ノートブックが GKE クラスタ内のリソースと通信できるように、elasticsearch-vpc
VPC(Virtual Private Cloud)にデプロイする専用のランタイム テンプレートを使用します。
ランタイム テンプレートを作成する
ランタイム テンプレートを作成するには:
Google Cloud コンソールで、Colab Enterprise の [ランタイム テンプレート] ページに移動し、プロジェクトが選択されていることを確認します。
[add_box 新しいテンプレート] をクリックします。[ランタイム テンプレートの新規作成] ページが表示されます。
[ランタイムの基本情報] セクションで、次の操作を行います。
- [表示名] フィールドに「
elastic-connect
」と入力します。 - [リージョン] プルダウン リストで、
us-central1
を選択します。これは、GKE クラスタと同じリージョンです。
- [表示名] フィールドに「
[コンピューティングの構成] セクションで、次の操作を行います。
- [マシンタイプ] プルダウン リストで [
e2-standard-2
] を選択します。 - [ディスクサイズ] フィールドに「
30
」と入力します。
- [マシンタイプ] プルダウン リストで [
[ネットワーキングとセキュリティ] セクションで、次の操作を行います。
- [ネットワーク] プルダウン リストで、GKE クラスタが存在するネットワークを選択します。
- [サブネットワーク] プルダウン リストで、対応するサブネットワークを選択します。
- [公共のインターネット アクセスを有効にする] チェックボックスをオフにします。
[作成] をクリックして、ランタイム テンプレートの作成を完了します。ランタイム テンプレートが [ランタイム テンプレート] タブのリストに表示されます。
ランタイムを作成する
ランタイムを作成するには:
ランタイム テンプレートのリストで、作成したテンプレートの [操作] 列の more_vert をクリックし、[ランタイムを作成] をクリックします。[Vertex AI ランタイムの作成] ペインが表示されます。
[作成] をクリックして、テンプレートに基づいてランタイムを作成します。
表示された [ランタイム] タブで、ステータスが「正常」に切り替わるまで待ちます。
ノートブックをインポートする
ノートブックをインポートするには:
[ノートブック] タブに移動し、[Import notebook from URLs] をクリックします。
[インポート ソース] で [URL] を選択します。
[ノートブックの URL] に、
raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/databases/elasticsearch/manifests/03-notebook/vector-database.ipynb
を貼り付けます。[インポート] をクリックします。
ランタイムに接続してクエリを実行する
ランタイムに接続してクエリを実行するには:
ノートブックで、[接続] ボタンの横にある [arrow_drop_down Additional connection options] をクリックします。[Vertex AI ランタイムへの接続] ペインが表示されます。
[Connect to a runtime] を選択し、[既存のランタイムに接続] を選択します。
起動したランタイムを選択し、[接続] をクリックします。
各コードセルの左側にある [ セルを実行] ボタンをクリックして、ノートブック セルを実行します。
ノートブックには、コードセルと、各コードブロックを説明するテキストが含まれています。コードセルを実行すると、そのコマンドが実行され、出力が表示されます。セルを順番に実行することも、必要に応じて個別に実行することもできます。
Vertex AI Colab Enterprise の詳細については、Colab Enterprise のドキュメントをご覧ください。
クラスタの Prometheus 指標を表示する
GKE クラスタは Google Cloud Managed Service for Prometheus で構成されており、Prometheus 形式での指標の収集が可能です。このサービスは、モニタリングとアラート用のフルマネージド ソリューションを提供し、クラスタとそのアプリケーションからの指標の収集、保存、分析を可能にします。
次の図は、Prometheus がクラスタの指標を収集する方法を示しています。
この図の GKE 限定公開クラスタには、次のコンポーネントが含まれています。
- パス
/
とポート9114
で指標を公開する Elasticsearch Pod。これらの指標は、elasticsearch_exporter を含むmetrics
というサイドカー コンテナによって提供されます。 - Elasticsearch Pod から取得した指標を処理する Prometheus ベースのコレクタ
- Cloud Monitoring に指標を送信する PodMonitoring リソース
クラスタ構成では、Prometheus 形式の指標エクスポータを含むサイドカー コンテナを定義します。
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
name: elasticsearch-ha
spec:
...
nodeSets:
- name: main
...
podTemplate:
spec:
containers:
...
- name: metrics
image: quay.io/prometheuscommunity/elasticsearch-exporter:v1.7.0
command:
- /bin/elasticsearch_exporter
- --es.ssl-skip-verify
- --es.uri=https://$(ES_USER):$(ES_PASSWORD)@localhost:9200
...
env:
- name: ES_USER
value: "elastic"
- name: ES_PASSWORD
valueFrom:
secretKeyRef:
name: elasticsearch-ha-es-elastic-user
key: elastic
指標をエクスポートして表示する手順は次のとおりです。
labelSelector
で指標を収集するPodMonitoring
リソースを作成します。kubectl apply -n elastic -f manifests/04-prometheus-metrics/pod-monitoring.yaml
pod-monitoring.yaml
マニフェストには、PodMonitoring
リソースが記述されています。数分後、組み込みダッシュボード(Elasticsearch Prometheus Overview)が表示されます。
データに関連するグラフをさらに表示するには、
dashboard.json
で定義された構成を使用して、カスタムの Cloud Monitoring ダッシュボードをインポートします。gcloud --project "${PROJECT_ID}" monitoring dashboards create --config-from-file monitoring/dashboard.json
コマンドが正常に実行されたら、Cloud Monitoring のダッシュボードに移動します。
ダッシュボードのリストで、
ElasticSearch Overview
ダッシュボードを開きます。指標の収集と表示には 1~2 分かかる場合があります。ダッシュボードには、次の主要な指標のカウントが表示されます。
- インデックス
- ドキュメントとシャード
- 保留中のオペレーション
- 実行中のノードとその健全性ステータス
クラスタ構成をバックアップする
Backup for GKE 機能を使用すると、デプロイされたワークロードとそのデータを含む GKE クラスタ構成全体の定期的なバックアップ スケジュールを設定できます。
このチュートリアルでは、Secret と Volume を含むすべてのワークロードのバックアップを毎日午前 3 時に実行するように、GKE クラスタのバックアップ プランを構成します。ストレージ管理を効率的に行うため、3 日以上経過したバックアップは自動的に削除されます。
クラスタで Backup for GKE 機能を有効にします。
gcloud container clusters update ${KUBERNETES_CLUSTER_PREFIX}-cluster \ --project=${PROJECT_ID} \ --region=${REGION} \ --update-addons=BackupRestore=ENABLED
クラスタ内のすべての Namespace の日次スケジュールでバックアップ プランを作成します。
gcloud beta container backup-restore backup-plans create ${KUBERNETES_CLUSTER_PREFIX}-cluster-backup \ --project=${PROJECT_ID} \ --location=${REGION} \ --cluster="projects/${PROJECT_ID}/locations/${REGION}/clusters/${KUBERNETES_CLUSTER_PREFIX}-cluster" \ --all-namespaces \ --include-secrets \ --include-volume-data \ --cron-schedule="0 3 * * *" \ --backup-retain-days=3
このコマンドは、実行時に関連する環境変数を使用します。
クラスタ名の形式は、プロジェクトとリージョンに対して相対的です。
projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_NAME
プロンプトが表示されたら、「
y.
」と入力します。出力は次のようになります。Create request issued for: [elasticsearch-cluster-backup] Waiting for operation [projects/PROJECT_ID/locations/us-central1/operations/operation-1706528750815-610142ffdc9ac-71be4a05-f61c99fc] to complete...⠹
このオペレーションが正常に完了するまで数分かかることがあります。実行が完了すると、出力は次のようになります。
Created backup plan [elasticsearch-cluster-backup].
新しく作成したバックアップ プラン
elasticsearch-cluster-backup
が Backup for GKE コンソールに表示されます。
保存したバックアップ構成を復元する場合は、バックアップを復元するをご覧ください。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトを削除する
課金が発生しないようにする最も簡単な方法は、このチュートリアル用に作成したプロジェクトを削除することです。
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
プロジェクトを削除すると、クリーンアップが完了します。プロジェクトを削除していない場合は、個々のリソースを削除します。
リソースを個別に削除する
環境変数を設定します。
export PROJECT_ID=${PROJECT_ID} export KUBERNETES_CLUSTER_PREFIX=elasticsearch export REGION=us-central1
terraform destroy
コマンドを実行します。export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token) terraform -chdir=terraform/FOLDER destroy \ -var project_id=${PROJECT_ID} \ -var region=${REGION} \ -var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}
作成した GKE クラスタのタイプに応じて、
FOLDER
をgke-autopilot
またはgke-standard
に置き換えます。プロンプトが表示されたら、「
yes
」と入力します。アタッチされていないすべてのディスクを検索します。
export disk_list=$(gcloud compute disks list --filter="-users:* AND labels.name=${KUBERNETES_CLUSTER_PREFIX}-cluster" --format "value[separator=|](name,region)")
ディスクを削除します。
for i in $disk_list; do disk_name=$(echo $i| cut -d'|' -f1) disk_region=$(echo $i| cut -d'|' -f2|sed 's|.*/||') echo "Deleting $disk_name" gcloud compute disks delete $disk_name --region $disk_region --quiet done
GitHub リポジトリを削除します。
rm -r ~/kubernetes-engine-samples/
次のステップ
- Elasticsearch オープンソース ソフトウェアを確認する。
- GKE にデータベースをデプロイするためのベスト プラクティスについて学習する。
- GKE でデータ量の多いワークロードを実行するためのソリューションを確認する。