このページでは、ReadOnlyMany アクセスモードを使用して永続ディスクをクラスタに追加する方法について説明します。このモードでは、異なるノード上の複数の Pod で読み取るためのディスクをマウントできます。
このモードの詳細については、永続ボリュームのアクセスモードをご覧ください。
要件
- クラスタで GKE バージョン 1.22 以降を実行する必要があります。
- クラスタで Compute Engine 永続ディスクの CSI ドライバを使用する必要があります。
ソース永続ディスクのフォーマットとデータ入力
永続ディスクを読み取り専用モードで使用するには、ソース永続ディスクにデータを入力し、ボリュームのクローンを作成するか、ボリューム スナップショットを使用して新しい ReadOnlyMany Persistent Volume にデータを移動する必要があります。
- 既存の永続ディスクまたは動的プロビジョニングを使用して PersistentVolume を作成します。 
- ディスクをフォーマットして、データを追加します。ディスクをフォーマットするには、Pod 内でディスクを ReadWriteOnce PersistentVolume として参照します。GKE は基になるディスクを自動的にフォーマットし、Pod がデータをこのディスクに書き込むようにします。Pod の起動時に、Pod が必要なデータをディスクに書き込むことを確認します。 
ReadOnlyMany PersistentVolume を作成する
ReadOnlyMany PersistentVolume は、次のいずれかの方法で作成できます。
- データを入力するソース PersistentVolume のボリューム スナップショット。
- データを入力するソース PersistentVolume のボリューム クローン。
- すでにデータが入力されている既存の永続ディスク。 
ボリューム スナップショット
- 次の PersistentVolumeClaim マニフェストを - snapshot-pvc.yamlとして保存します。- kind: PersistentVolumeClaim apiVersion: v1 metadata: namespace: PVC_NAMESPACE name: PVC_NAME spec: dataSource: apiGroup: snapshot.storage.k8s.io kind: VolumeSnapshot name: SNAPSHOT_NAME accessModes: - ReadOnlyMany storageClassName: premium-rwo resources: requests: storage: STORAGE_SIZE- 次のように置き換えます。 - PVC_NAMESPACE: 新しい PersistentVolumeClaim の Namespace。
- PVC_NAME: 新しい PersistentVolumeClaim の名前。
- SNAPSHOT_NAME:- VolumeSnapshotオブジェクトの名前。
- STORAGE_SIZE: リクエストするストレージの容量。これは、ソース PersistentVolumeClaim でリクエストされた容量と同じにする必要があります。
 
- マニフェストをクラスタに適用します。 - kubectl apply -f snapshot-pvc.yaml
これにより、PVC_NAME という新しい PersistentVolumeClaim がクラスタに作成されます。GKE はこれを使用して、ソース永続ディスクのスナップショットのデータを含む新しい PersistentVolume を動的にプロビジョニングします。
ボリュームのクローン作成
ボリュームのクローン作成を使用する前に、この方法の制限事項を理解しておいてください。
- 次のマニフェストを - cloning-pvc.yamlとして保存します。- kind: PersistentVolumeClaim apiVersion: v1 metadata: namespace: PVC_NAMESPACE name: PVC_NAME spec: dataSource: name: SOURCE_PVC kind: PersistentVolumeClaim accessModes: - ReadOnlyMany storageClassName: STORAGE_CLASS_NAME resources: requests: storage: STORAGE_SIZE- 次のように置き換えます。 - PVC_NAMESPACE: 新しい PersistentVolumeClaim の Namespace。
- PVC_NAME: 新しい PersistentVolumeClaim の名前。
- SOURCE_PVC: データが入力されたソース PersistentVolumeClaim の名前。
- STORAGE_CLASS_NAME: 新しい PersistentVolumeClaim のストレージ クラス。これは、ソースの PersistentVolumeClaim のストレージ クラスと同じにする必要があります。
- STORAGE_SIZE: 新しい PersistentVolumeClaim のストレージの容量。これは、ソース PersistentVolumeClaim からリクエストされた容量と同じにする必要があります。
 
- マニフェストをクラスタに適用します。 - kubectl apply -f cloning-pvc.yaml
これにより、PVC_NAME という PersistentVolumeClaim が作成されます。GKE はこれを使用して、ソース PersistentVolume のデータを含む新しい PersistentVolume を ReadOnlyMany モードで作成します。
ボリュームのクローン作成の詳細については、永続ボリュームのクローンを作成するをご覧ください。
既存の永続ディスク
- 次のマニフェストを - preexisting-disk-pv-pvc.yamlとして保存します。- apiVersion: v1 kind: PersistentVolume metadata: name: PV_NAME spec: storageClassName: "STORAGE_CLASS_NAME" capacity: storage: DISK_SIZE accessModes: - ReadOnlyMany claimRef: namespace: PVC_NAMESPACE name: PVC_NAME csi: driver: pd.csi.storage.gke.io volumeHandle: DISK_ID fsType: FS_TYPE readOnly: true --- apiVersion: v1 kind: PersistentVolumeClaim metadata: namespace: PVC_NAMESPACE name: PVC_NAME spec: storageClassName: "STORAGE_CLASS_NAME" volumeName: PV_NAME accessModes: - ReadOnlyMany resources: requests: storage: DISK_SIZE- 次のように置き換えます。 - PV_NAME: 新しい PersistentVolume の名前。
- STORAGE_CLASS_NAME: 新しい StorageClass の名前。
- DISK_SIZE: 既存の永続ディスクのサイズ。例:- 500G
- PVC_NAMESPACE: 新しい PersistentVolumeClaim の Namespace。
- PVC_NAME: 新しい PersistentVolumeClaim の名前。
- DISK_ID: 既存の永続ディスクの ID。形式は、ゾーン永続ディスクの場合は- projects/{project_id}/zones/{zone_name}/disks/{disk_name}、リージョン永続ディスクの場合は- projects/{project_id}/regions/{region_name}/disks/{disk_name}です。
- FS_TYPE: ファイルシステムのタイプ。デフォルト(- ext4)のままにするか、- xfsを使用します。クラスタで Windows Server ノードプールを使用している場合は、- NTFSに変更する必要があります。
 
- マニフェストをクラスタに適用します。 - kubectl apply -f preexisting-disk-pv-pvc.yaml
これにより、PVC_NAME という PersistentVolumeClaim と、PV_NAME という PersistentVolumeClaim が ReadOnlyMany モードで作成されます。
既存の永続ディスクの使用について詳しくは、既存の永続ディスクをご覧ください。
PersistentVolumeClaim を Pod で使用する
複数のノードの複数の Pod で、新しい PersistentVolumeClaim を読み取り専用モードで同時に参照できるようになりました。ReadWriteOnce モードの永続ディスクを同時に複数のノードにアタッチすることはできません。詳細については、Deployment と StatefulSet の比較をご覧ください。
Pod の仕様では、次の例のように volumeMounts セクションと volumes セクションで readOnly: true を指定する必要があります。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: multi-read
  labels:
    app: web-server
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web-server
  template:
    metadata:
      labels:
        app: web-server
    spec:
      containers:
      - name: web-server
        image: nginx
        volumeMounts:
        - mountPath: /test-mnt
          name: my-volume
          readOnly: true
      volumes:
      - name: my-volume
        persistentVolumeClaim:
          claimName: PVC_NAME
          readOnly: true
次のステップ
- 既存の永続ディスクを PersistentVolume として使用する方法を確認する。
- Compute Engine の永続ディスクについて確認する。