3.6.3 Elasticsearchデータディレクトリの永続ボリュームおよびストレージクラスのKubernetesマニフェストの作成
「6.4.14 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) × (g))) × (h) (a) SQL-Participant、TCC-ParticipantおよびTP1-Bridge以外が出力する分散トレースのサイズ:500MB (b) SQL-Participantが出力する分散トレースのサイズ:400MB (c) SQL-ParticipantのPod数 (d) TCC-Participantが出力する分散トレースのサイズ:300MB (e) TCC-ParticipantのPod合計数 (f) TP1-Bridgeが出力する分散トレースのサイズ:300MB (g) TP1-BridgeのPod数 (h) 想定する1秒間のトランザクション数 (B)メッセージログで使用する1時間当たりのindexサイズ indexサイズ = (a) (a) 1時間当たりの使用量:100MB(エラーなどによってメッセージログが継続して出力される場合を想定した推奨値) (C)メトリクスで使用する1時間当たりのindexサイズ indexサイズ = ((a) + ((b) × (c)) + ((d) × (e)) + ((f) × (g))) × 15 / (h) (a) SQL-Participant、TCC-ParticipantおよびTP1-Bridge以外が出力するメトリクスのサイズ:1000MB (b) SQL-Participantが出力するメトリクスのサイズ:100MB (c) SQL-ParticipantのPod数 (b) TCC-Participantが出力するメトリクスのサイズ:100MB (e) TCC-ParticipantのPod数 (f) TP1-Bridgeが出力するメトリクスのサイズ:100MB (g) TP1-BridgeのPod数 (h) メトリクスの取得間隔。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台ある場合の例としています。