3.6. ブロックボリュームのサポート
raw ブロックボリュームは、アプリケーションがパフォーマンスを向上させるために直接アクセスするファイルシステムのないストレージです。永続ボリュームと要求で volumeMode: Block を指定し、特権コンテナーを設定します。ストレージプロバイダーによるサポート範囲は異なり、静的のみ、動的のみ、両方対応、または非対応のいずれかとなります。
raw ブロックボリュームを使用する Pod は、特権付きコンテナーを許可するように設定する必要があります。
以下の表は、ブロックボリュームをサポートするボリュームプラグインを表示しています。
| ボリュームプラグイン | 手動のプロビジョニング | 動的なプロビジョニング | フルサポート |
|---|---|---|---|
| Amazon Elastic Block Store (Amazon EBS) | ✅ | ✅ | ✅ |
| Amazon Elastic File Storage (Amazon EFS) | |||
| Azure Disk | ✅ | ✅ | ✅ |
| Azure File | |||
| Cinder | ✅ | ✅ | ✅ |
| Fibre Channel | ✅ | ✅ | |
| GCP | ✅ | ✅ | ✅ |
| HostPath | |||
| IBM Cloud Block Storage ボリューム | ✅ | ✅ | ✅ |
| iSCSI | ✅ | ✅ | |
| Local volume | ✅ | ✅ | |
| LVM Storage | ✅ | ✅ | ✅ |
| NFS | |||
| Red Hat OpenShift Data Foundation | ✅ | ✅ | ✅ |
| CIFS/SMB | |||
| VMware vSphere | ✅ | ✅ | ✅ |
手動でプロビジョニングできるものの、完全にサポートされていないブロックボリュームの使用は、テクノロジープレビュー機能としてのみ提供されます。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
3.6.1. ブロックボリュームの例 リンクのコピーリンクがクリップボードにコピーされました!
raw ブロックボリュームの例は、ファイルシステムなしでブロックストレージデバイスに直接アクセスする必要があるアプリケーションの設定を示しています。このアプローチは、従来のファイルシステム層をバイパスして、低レベルのストレージ制御を必要とするデータベースやその他のアプリケーションで一般的に使用されています。
この例では、ブロックボリュームストレージに不可欠な 3 つのコンポーネントを設定する方法を示します。
-
raw ブロックストレージリソースを定義するための
volumeMode:Blockが設定されたPersistentVolume(PV)。 -
volumeMode:Blockを設定してブロックストレージをリクエストするPersistentVolumeClaim(PVC)。 -
ファイルシステムボリュームに使用される一般的な
volumeMountsおよびmountPathの代わりに、volumeDevicesおよびdevicePathを使用してブロックデバイスをマウントする Pod 仕様。
以下の参照表は、volumeMode の許容値 (デフォルトは Filesystem、Block は明示的に設定する必要があります) と、PV と PVC 間のバインディングシナリオを示しています。これらのバインディングルールを理解しておくことは非常に重要です。バインドを正常に行うには、PV と PVC の両方で volumeMode: Block を指定する必要があります。Block PV に Filesystem PVC を指定するなど、ボリュームモードが一致しない場合はバインドが防止されるため、Pod のスケジューリング失敗の原因となる可能性があります。
PV の例
apiVersion: v1
kind: PersistentVolume
metadata:
name: block-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
volumeMode: Block
persistentVolumeReclaimPolicy: Retain
fc:
targetWWNs: ["50060e801049cfd1"]
lun: 0
readOnly: false
spec.volumeMode を Block に設定して、この PV が raw ブロックボリュームであることを示します。
PVC の例
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: block-pvc
spec:
accessModes:
- ReadWriteOnce
volumeMode: Block
resources:
requests:
storage: 10Gi
spec.volumeMode を Block に設定して、raw ブロック PVC がリクエストされていることを示します。
Pod の仕様例
apiVersion: v1
kind: Pod
metadata:
name: pod-with-block-volume
spec:
containers:
- name: fc-container
image: fedora:26
command: ["/bin/sh", "-c"]
args: [ "tail -f /dev/null" ]
volumeDevices:
- name: data
devicePath: /dev/xvda
volumes:
- name: data
persistentVolumeClaim:
claimName: block-pvc
-
spec.container.volumeDevices:volumeMountsの代わりに、このパラメーターがブロックデバイスに使用されます。PersistentVolumeClaimソースのみを raw ブロックボリュームと共に使用できます。 -
spec.container.volumeDevices.devicePath: このパラメーターは、mountPathの代わりに、raw ブロックがシステムにマッピングされている物理デバイスへのパスを表します。 -
spec.volumes.persistentVolumeClaim.claimName: ボリュームソースのタイプはpersistentVolumeClaimで、PVC の名前と想定どおりに一致している必要があります。
| 値 | デフォルト |
|---|---|
| Filesystem | はい |
| Block | いいえ |
PV volumeMode | PVC volumeMode | バインディングの結果 |
|---|---|---|
| Filesystem | Filesystem | バインド |
| Unspecified | Unspecified | バインド |
| Filesystem | Unspecified | バインド |
| Unspecified | Filesystem | バインド |
| Block | Block | バインド |
| Unspecified | Block | バインドなし |
| Block | Unspecified | バインドなし |
| Filesystem | Block | バインドなし |
| Block | Filesystem | バインドなし |
値を指定しないと、Filesystem のデフォルト値が指定されます。