複数のリーダーで永続ディスクを使用する


このページでは、ReadOnlyMany アクセスモードを使用して永続ディスクをクラスタに追加する方法について説明します。このモードでは、異なるノード上の複数の Pod で読み取るためのディスクをマウントできます。

このモードの詳細については、永続ボリュームのアクセスモードをご覧ください。

要件

ソース永続ディスクのフォーマットとデータ入力

永続ディスクを読み取り専用モードで使用するには、ソース永続ディスクにデータを入力し、ボリュームのクローンを作成するか、ボリューム スナップショットを使用して新しい ReadOnlyMany Persistent Volume にデータを移動する必要があります。

  1. 既存の永続ディスクまたは動的プロビジョニングを使用して PersistentVolume を作成します。

  2. ディスクをフォーマットして、データを追加します。ディスクをフォーマットするには、Pod 内でディスクを ReadWriteOnce PersistentVolume として参照します。GKE は基になるディスクを自動的にフォーマットし、Pod がデータをこのディスクに書き込むようにします。Pod の起動時に、Pod が必要なデータをディスクに書き込むことを確認します。

ReadOnlyMany PersistentVolume を作成する

ReadOnlyMany PersistentVolume は、次のいずれかの方法で作成できます。

  • データを入力するソース PersistentVolume のボリューム スナップショット。
  • データを入力するソース PersistentVolume のボリューム クローン
  • すでにデータが入力されている既存の永続ディスク。

ボリューム スナップショット

  1. PersistentVolume のボリューム スナップショットを作成します

  2. 次の 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 でリクエストされた容量と同じにする必要があります。
  3. マニフェストをクラスタに適用します。

    kubectl apply -f snapshot-pvc.yaml
    

これにより、PVC_NAME という新しい PersistentVolumeClaim がクラスタに作成されます。GKE はこれを使用して、ソース永続ディスクのスナップショットのデータを含む新しい PersistentVolume を動的にプロビジョニングします。

ボリュームのクローン作成

ボリュームのクローン作成を使用する前に、この方法の制限事項を理解しておいてください。

  1. 次のマニフェストを 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 からリクエストされた容量と同じにする必要があります。
  2. マニフェストをクラスタに適用します。

    kubectl apply -f cloning-pvc.yaml
    

これにより、PVC_NAME という PersistentVolumeClaim が作成されます。GKE はこれを使用して、ソース PersistentVolume のデータを含む新しい PersistentVolume を ReadOnlyMany モードで作成します。

ボリュームのクローン作成の詳細については、永続ボリュームのクローンを作成するをご覧ください。

既存の永続ディスク

  1. 次のマニフェストを 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 に変更する必要があります。
  2. マニフェストをクラスタに適用します。

    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

次のステップ