3.7.2 MediatorのConsensusLogの永続ボリュームおよびストレージクラスのKubernetesマニフェストの作成
「7.5.8 Mediatorの要件」に記載されているMediatorのConsensusLogの永続ボリュームの要件を満たすように、MediatorのConsensusLogの永続ボリュームおよびストレージクラスのKubernetesマニフェストを作成してください。
マネージドファイルサービスを使用する場合、次のマネージドファイルサービスを永続ボリュームとしてマウントするために必要なKubernetesマニフェストについては、それぞれの公式ドキュメントを参照してください。
-
Microsoft Azure環境
-
Azure Files
-
Azure Blob Storage
-
-
Google Cloud Platform環境
-
Filestore
-
永続ボリュームの種類を選択する判断基準の例を示します。
-
Blue/Greenデプロイメントのように、MediatorのPodをデプロイするノードを固定したくない場合は、NFSストレージを選択してください。
-
NFSサーバを用意しないで、最小限の構成としたい場合は、ローカル永続ボリューム(local)を選択してください。
-
ローカル永続ボリューム(local)を選択すると、NFSストレージよりも永続ボリュームへアクセスする性能が高くなります。
-
ローカル永続ボリューム(local)を選択すると、ノードが障害になったときの稼働率が安定します。MediatorのPodをデプロイするノードを固定することで、Mediatorをノードに均等に配置するためです。
永続ボリュームの種類がローカル永続ボリューム(local)の場合は、Mediatorで使用する永続ボリュームの種類を「ローカル永続ボリューム(local)」とし、KubernetesのnodeAffinityで永続ボリュームの割り当てノードを固定することで、その永続ボリュームを使用するMediatorのPodはKubernetesスケジューラによって必ず永続ボリュームと同一ノードに割り当てられるようになります。これによって、MediatorのPodが必ずノードにアタッチされたローカルストレージデバイスを使用できるようにします。
また、Mediator専用のストレージクラスを作成することで、MediatorのConsensusLogの永続ボリュームとMediatorのConsensusLogの永続ボリュームクレームのバインドを必ず一対一になるようにします。
永続ボリュームの種類がNFSストレージの場合は、Mediatorで使用する永続ボリュームの種類を「NFSストレージ」とし、KubernetesのnodeAffinityで永続ボリュームの割り当てノードを固定しないことで、MediatorのPodを不特定のノード上に割り当てます。
MediatorのConsensusLogの永続ボリュームおよびストレージクラスのKubernetesマニフェストの作成要領を次に示します。
<ストレージクラスの作成要領>
-
ストレージクラスの名称(metadata.nameフィールド)に、ユーザ任意の名称を指定してください。ここで指定した名称は、各永続ボリュームのstorageClassNameフィールド、およびMediatorのHelmチャートのconsensusLog.storageClassNameパラメタの値に指定します。
-
ストレージクラスのprovisionerフィールドに、「kubernetes.io/no-provisioner」を指定してください。
<永続ボリュームの作成要領>
-
オートスケールを使用しない場合は、Kubernetesクラスタに起動するMediatorの数と同じ数だけ、永続ボリュームを作成するよう定義したKubernetesマニフェストを作成してください。
オートスケールを使用する場合は、「4.2.4 HPAのKubernetesマニフェストの作成」で作成したMediator用のHPAのマニフェストファイルに指定した「スケールアウトできる最大のPod数」と同じ数だけ、永続ボリュームを作成するよう定義したKubernetesマニフェストを作成してください。
-
各永続ボリュームの名称(metadata.nameフィールド)に、ユーザ任意の名称を指定してください。
-
永続ボリュームの種類によって、次のどちらかの作業を実施してください。
-
永続ボリュームの種類がローカル永続ボリューム(local)の場合
各永続ボリュームの.spec.localフィールドに、「(1) MediatorのConsensusLogの永続ボリュームマウント用ディレクトリの作成(ローカル永続ボリューム(local)とする場合)」で作成するワーカーノード上のボリュームマウント用ディレクトリパスを指定してください。
-
永続ボリュームの種類がNFSストレージの場合
各永続ボリュームの.spec.nfsフィールドに、「3.6.3 MediatorのConsensusLogの永続ボリュームマウント用ディレクトリの作成(NFSストレージとする場合)」で作成するNFSのサーバアドレスとディレクトリパスを指定してください。
-
-
永続ボリュームの種類がローカル永続ボリューム(local)の場合、各永続ボリュームのnodeAffinityフィールドに、Mediatorを配置する個々のワーカーノードを決めてノード名を指定してください。
例として、Kubernetesクラスタに起動するMediatorの最大台数が「5」で、ワーカーノードが5台(「ワーカーノード-0」、「ワーカーノード-1」、「ワーカーノード-2」、「ワーカーノード-3」、「ワーカーノード-4」)がある場合、次のように指定します。
-
「永続ボリューム-0」のnodeAffinityフィールドに、「ワーカーノード-0」を指定する
-
「永続ボリューム-1」のnodeAffinityフィールドに、「ワーカーノード-1」を指定する
-
「永続ボリューム-2」のnodeAffinityフィールドに、「ワーカーノード-2」を指定する
-
「永続ボリューム-3」のnodeAffinityフィールドに、「ワーカーノード-3」を指定する
-
「永続ボリューム-4」のnodeAffinityフィールドに、「ワーカーノード-4」を指定する
-
-
永続ボリュームの種類がNFSストレージの場合、各永続ボリュームの.spec.nodeAffinityフィールドで、Mediatorを配置しないノード(コントロールプレーンなど)を決め、それ以外のノードに配置されるように指定してください。例として、.spec.nodeAffinity.required.nodeSelectorTerms.matchExpressionsフィールドに「operator: NotIn」「values:- control-plane-0」のように指定します。
-
各永続ボリュームのcapacity.storageフィールドに、次に示す値以上のサイズを指定してください。
指定サイズ=「(a) × (b) + (c)」以上のサイズ (a) MediatorのHelmチャートの.consensusLog.sizeパラメタに指定した値 (b) 1,024(1つのConsensusLogのサイズ) (c) 1,048,576(ボリュームの書き込み容量不足にならないための予備サイズ(1MB))
例として、(a)が「256」の場合、「256×1,024+1,048,576」=「1,310,720」以上となるため、capacity.storageフィールドには「2Mi」(2メビバイト)を指定します。
-
各永続ボリュームのaccessModesフィールドに、「ReadWriteOnce」を指定してください。
-
各永続ボリュームのpersistentVolumeReclaimPolicyフィールドに、「Retain」を指定してください。
-
各永続ボリュームのstorageClassNameフィールドに、前述のストレージクラスで指定した名称を指定してください。
<ストレージクラスおよび永続ボリュームの記述例>
ローカル永続ボリューム(local)とする場合と、NFSストレージとする場合の、MediatorのConsensusLogの永続ボリュームおよびストレージクラスのKubernetesマニフェストの記述例を次に示します。
<永続ボリュームをローカル永続ボリューム(local)とする場合>
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: mediator-consensus-log
provisioner: kubernetes.io/no-provisioner
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mediator-consensus-log-0
spec:
capacity:
storage: 2Mi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mediator-consensus-log
local:
path: /mediator-consensus-log-volume
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-0
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mediator-consensus-log-1
spec:
capacity:
storage: 2Mi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mediator-consensus-log
local:
path: /mediator-consensus-log-volume
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-1
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mediator-consensus-log-2
spec:
capacity:
storage: 2Mi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mediator-consensus-log
local:
path: /mediator-consensus-log-volume
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-2
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mediator-consensus-log-3
spec:
capacity:
storage: 2Mi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mediator-consensus-log
local:
path: /mediator-consensus-log-volume
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-3
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mediator-consensus-log-4
spec:
capacity:
storage: 2Mi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mediator-consensus-log
local:
path: /mediator-consensus-log-volume
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-4
この例では、Kubernetesクラスタに起動するMediatorの数を「5」、ワーカーノードを5台としています。
<永続ボリュームをNFSストレージとする場合>
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: mediator-consensus-log
provisioner: kubernetes.io/no-provisioner
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mediator-consensus-log-0
spec:
capacity:
storage: 2Mi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mediator-consensus-log
nfs:
server: nfs-server.example.com
path: /mediator-consensus-log-volume
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: NotIn
values:
- control-plane-0
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mediator-consensus-log-1
spec:
capacity:
storage: 2Mi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mediator-consensus-log
nfs:
server: nfs-server.example.com
path: /mediator-consensus-log-volume
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: NotIn
values:
- control-plane-0
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mediator-consensus-log-2
spec:
capacity:
storage: 2Mi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mediator-consensus-log
nfs:
server: nfs-server.example.com
path: /mediator-consensus-log-volume
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: NotIn
values:
- control-plane-0
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mediator-consensus-log-3
spec:
capacity:
storage: 2Mi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mediator-consensus-log
nfs:
server: nfs-server.example.com
path: /mediator-consensus-log-volume
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: NotIn
values:
- control-plane-0
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mediator-consensus-log-4
spec:
capacity:
storage: 2Mi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: mediator-consensus-log
nfs:
server: nfs-server.example.com
path: /mediator-consensus-log-volume
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: NotIn
values:
- control-plane-0
この例では、Kubernetesクラスタに起動するMediatorの数を「5」、ワーカーノードを5台としています。