3.4.3 Elasticsearchデータディレクトリの永続ボリュームおよびストレージクラスのKubernetesマニフェストの作成
「5.4.13 Elasticsearchの要件」に記載されているElasticsearchデータディレクトリの永続ボリュームの要件を満たすように、Elasticsearchデータディレクトリの永続ボリュームおよびストレージクラスのKubernetesマニフェストを作成してください。
また、Elasticsearchデータディレクトリ専用のストレージクラスを作成することで、Elasticsearchの永続ボリュームとElasticsearchデータディレクトリの永続ボリュームクレームのバインドを必ず一対一になるようにします。クラスタ構成で構築する場合、マスターノード用、データノード用の2つのストレージクラスを作成してください。
Elasticsearchデータディレクトリの永続ボリュームおよびストレージクラスのKubernetesマニフェストの作成要領を次に示します。
<ストレージクラスの作成要領>
-
ストレージクラスの名称(metadata.nameフィールド)に、ユーザ任意の名称を指定してください。ここで指定した名称は、各永続ボリュームのstorageClassNameフィールド、およびElasticsearchのHelmチャートのdata.storage-class-nameパラメタの値に指定します。
-
ストレージクラスのprovisionerフィールドに、「kubernetes.io/no-provisioner」を指定してください。
<永続ボリュームの作成要領>
-
Kubernetesクラスタに起動するElasticsearchのノード数と同じ数だけ、永続ボリュームのKubernetesマニフェストを作成してください。クラスタ構成の場合はマスターノードとデータノードの数の合計の数だけ作成してください。
-
各永続ボリュームの名称(metadata.nameフィールド)に、ユーザ任意の名称を指定してください。
-
各永続ボリュームの.spec.nodeAffinityフィールドに、Elasticsearchを配置する個々のワーカーノードを決めてノード名を指定してください。マスターノード内で同じワーカーノードを指定しないでください。また、クラスタ構成で構築する場合、データノード内で同じワーカーノードを指定しないでください。
例として、Kubernetesクラスタに起動するElasticsearchのマスターノードの数が「3」、データノードの数が「3」で、ワーカーノードが3台(「ワーカーノード-1」、「ワーカーノード-2」、「ワーカーノード-3」)がある場合、次のように指定します。
-
マスターノード向け「永続ボリューム-1」の.spec.nodeAffinityフィールドに、「ワーカーノード-1」を指定する。
-
マスターノード向け「永続ボリューム-2」の.spec.nodeAffinityフィールドに、「ワーカーノード-2」を指定する。
-
マスターノード向け「永続ボリューム-3」の.spec.nodeAffinityフィールドに、「ワーカーノード-3」を指定する。
-
データノード向け「永続ボリューム-1」の.spec.nodeAffinityフィールドに、「ワーカーノード-1」を指定する。
-
データノード向け「永続ボリューム-2」の.spec.nodeAffinityフィールドに、「ワーカーノード-2」を指定する。
-
データノード向け「永続ボリューム-3」の.spec.nodeAffinityフィールドに、「ワーカーノード-3」を指定する。
-
-
各永続ボリュームの.spec.capacity.storageフィールドにElasticsearchデータディレクトリとして割り当てる永続ボリュームのサイズを指定します。データ量については次の式を目安とし、実測するようお願いします。
[必要なデータ量] = ((A) + (B) + (C)) × (D) × (E) 以上のサイズ (A) 分散トレースで使用する1時間当たりのindexサイズ(MB) (B) メッセージログで使用する1時間当たりのindexサイズ(MB) (C) メトリクスで使用する1時間当たりのindexサイズ(MB) (D) 1日当たりのシステムの想定稼働時間(h) (E) 保存期間(日) (A)分散トレースで使用する1時間当たりのindexサイズ indexサイズ = ((a) + ((b) × (c)) + ((d) × (e))) × (f) (a) SQL-ParticipantおよびTCC-Participant以外が出力する分散トレースのサイズ:500 MB (b) SQL-Participantが出力する分散トレースのサイズ:400 MB (c) SQL-ParticipantのPod数 (d) TCC-Participantが出力する分散トレースのサイズ:300 MB (e) TCC-ParticipantのPod合計数 (f) 想定する1秒間のトランザクション数 (B)メッセージログで使用する1時間当たりのindexサイズ indexサイズ = (a) (a) 1時間当たりの使用量:100MB(エラーなどによってメッセージログが継続して出力される場合を想定した推奨値) (C)メトリクスで使用する1時間当たりのindexサイズ indexサイズ = ((a) + ((b) × (c)) + ((d) × (e))) × 15) / (f) (a) SQL-ParticipantおよびTCC-Participant以外が出力するメトリクスのサイズ:1500 MB (b) SQL-Participantが出力するメトリクスのサイズ:100 MB (c) SQL-ParticipantのPod数 (b) TCC-Participantが出力するメトリクスのサイズ:100 MB (c) TCC-ParticipantのPod数 (f) メトリクスの取得間隔。Prometheusのパラメタglobal.scrape_intervalの指定値の単位を秒に変換した値。
-
シングル構成の場合: 「必要なデータ量」の式から計算した値を記載してください。
-
クラスタ構成の場合
・マスターノードについては3GBを指定してください。
・データノードについては、「必要なデータ量」で計算した値を各ノードに配置されるプライマリシャード、レプリカシャードの合計数倍してください。
-
-
各永続ボリュームのaccessModesフィールドに、「ReadWriteOnce」を指定してください。
-
各永続ボリュームのpersistentVolumeReclaimPolicyフィールドに、「Retain」を指定してください。
-
各永続ボリュームのstorageClassNameフィールドに、ストレージクラスで指定した名称を指定してください。
Elasticsearchデータディレクトリの永続ボリュームおよびストレージクラスのKubernetesマニフェストの記述例を次に示します。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: elasticsearch-data-masternode
provisioner: kubernetes.io/no-provisioner
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: elasticsearch-data-datanode
provisioner: kubernetes.io/no-provisioner
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: elasticsearch-data-masternode-0
spec:
capacity:
storage: 3Gi
storageClassName: elasticsearch-data-masternode
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
local:
path: /elasticsearch-data-volume-masternode
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-1
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: elasticsearch-data-masternode-1
spec:
capacity:
storage: 3Gi
storageClassName: elasticsearch-data-masternode
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
local:
path: /elasticsearch-data-volume-masternode
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-2
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: elasticsearch-data-masternode-2
spec:
capacity:
storage: 3Gi
storageClassName: elasticsearch-data-masternode
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
local:
path: /elasticsearch-data-volume-masternode
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-3
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: elasticsearch-data-datanode-0
spec:
capacity:
storage: 3Gi
storageClassName: elasticsearch-data-datanode
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
local:
path: /elasticsearch-data-volume-datanode
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-1
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: elasticsearch-data-datanode-1
spec:
capacity:
storage: 3Gi
storageClassName: elasticsearch-data-datanode
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
local:
path: /elasticsearch-data-volume-datanode
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-2
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: elasticsearch-data-datanode-2
spec:
capacity:
storage: 3Gi
storageClassName: elasticsearch-data-datanode
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
local:
path: /elasticsearch-data-volume-datanode
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-3この例では、Kubernetesクラスタに起動するElasticsearchのマスターノードの数が「3」、データノードの数が「3」で、ワーカーノードが3台ある場合の例としています。