2021/05/25
GKEにシングルノード構成のElasticsarchをデプロイする
小規模なアプリで全文検索が必要だったので、Elasticsearchを導入しました。
GKE上にアプリをデプロイしている関係で、同一クラスターにElasticsearchを構築しました。
小規模なので、シングル構成でサクッと動かすようなイメージです。
注意事項
- 大規模向けではありません。
- 耐障害性がないので、可用性重視の人は使えません。
本記事では、GKE上にシングルノード構成のElasticSearchを手軽に構築する手順を説明します。
k8sのデプロイ内容詳細
以下の通り設定ファイルを作って、順番にdeployしました。
事前準備
- データの永続化のためのCompute Diskを作成しました。
以下のようなコマンドで作成しました。(daily-snapshotという一日に一回スナップショットをとるポリシー付きです)
gcloud beta compute disks create "elasticsearch" \
--project="your-google-project-id" \
--zone="your-google-project-zone" \
--type=pd-ssd \
--size=5GB \
--resource-policies=projects/your-google-project-id/regions/your-google-project-region/resourcePolicies/daily-snapshot
k8sへのデプロイ設定ファイル及び順序
namespace
apiVersion: v1
kind: Namespace
metadata:
name: elasticsearch
pv & pvc
apiVersion: v1
kind: PersistentVolume
metadata:
name: elasticsearch
spec:
storageClassName: elasticsearch
capacity:
storage: 5Gi # <- 事前準備で作成したDisk Size
accessModes:
- ReadWriteOnce
gcePersistentDisk:
pdName: elasticsearch # <- 事前準備で作成したDisk Name
fsType: ext4
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: elasticsearch
namespace: elasticsearch
spec:
storageClassName: elasticsearch
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
statefulset
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: elasticsearch
namespace: elasticsearch
spec:
serviceName: elasticsearch
replicas: 1
selector:
matchLabels:
app: elasticsearch
template:
metadata:
name: elasticsearch
labels:
app: elasticsearch
spec:
securityContext:
fsGroup: 1000
initContainers:
- name: init-elasticsearch-data
image: docker.elastic.co/elasticsearch/elasticsearch:7.11.0
command: ['chown', '-R', '1000:1000', '/usr/share/elasticsearch/data']
volumeMounts:
- mountPath: /usr/share/elasticsearch/data
name: elasticsearch
containers:
- name: elasticsearch
# pluginが別途必要であれば、別途Dockerfileを使ってプラグインインストール済のimageをビルドして使います。
image: docker.elastic.co/elasticsearch/elasticsearch:7.11.0
env:
- name: discovery.type
value: "single-node"
- name: discovery.seed_hosts
value: "elasticsearch" # look up to service
- name: cluster.initial_master_nodes
value: null
# 必要に応じて設定
# - name: ES_JAVA_OPTS
# value: "-Xms768m -Xmx768m"
# 必要に応じて設定
# resources:
# requests:
# memory: "1Gi"
# cpu: "500m"
# limits:
# memory: "4Gi"
# cpu: "940m"
ports:
- name: elasticsearch
containerPort: 9200
- name: node
containerPort: 9300
volumeMounts:
- mountPath: /usr/share/elasticsearch/data
name: elasticsearch
volumes:
- name: elasticsearch
persistentVolumeClaim:
claimName: elasticsearch
service
apiVersion: v1
kind: Service
metadata:
name: elasticsearch
namespace: elasticsearch
spec:
ports:
- name: elasticsearch
port: 9200
targetPort: elasticsearch
selector:
app: elasticsearch
以上です。
関連する記事
[小〜中規模向け]GKEにTiDBをデプロイする
MySQL互換のNewSQLであるTiDBをGKEにデプロイしてみました。
NATS JetStream Controllerを使ってNATSをGKEにデプロイする
helm chartのnackを使って、NATS JetStreamサーバーをデプロイして、Stream/Consumerをk8sリソースとして管理する
GKEにDragonflydbをデプロイする
redis互換のdragonflydbをGKEにデプロイしました
[GKE]Kafka Strimziをアップグレードする
GKEにデプロイしているKafka Strimzi 0.26.0を0.30.0にアップグレードする