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 ComputeとGoogle Cloud Marketplaceの入門記事をご覧ください。
Elasticsearchの導入作業

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

出典 : 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 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 elasticsearchとkubectl 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(前のステップから)

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




