複数のリーダーを持つ永続ディスクの使用

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

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

永続ディスクのフォーマット

永続ディスクを読み取り専用モードで使用する前に、フォーマットする必要があります。

永続ディスクをフォーマットするには:

  1. 永続ディスクを手動で作成するか、または動的プロビジョニングを使用して作成します。
  2. ディスクをフォーマットして、データを追加します。ディスクをフォーマットするには、次のようにします。
    • ディスクを Pod 内の ReadWriteOnce ボリュームとして参照します。こうすることで GKE が自動的にディスクをフォーマットし、Pod はディスクにデータを事前追加できるようになります。
    • ディスクを VM に手動でマウントして、フォーマットします。詳細については、永続ディスクのフォーマットをご覧ください。
  3. ディスクをマウント解除して接続解除します。

    • Pod 内のディスクを参照した場合は、Pod を削除してこの Pod が終了してから、ディスクが自動的にノードから切断されるまで待ってください。
    • ディスクを VM にマウントした場合は、gcloud compute instances detach-disk を使用してディスクを接続解除します。
  4. ボリュームに ReadOnlyMany としてアクセスする Pod を、以下のように作成します。

PersistentVolume と PersistentVolumeClaim の作成

データが追加されたディスクを ReadOnlyMany としてマウントするには、ディスクの PersistentVolume と PersistentVolumeClaim を、accessModes フィールドを ReadOnlyMany に設定し、gcePersistentDisk readOnly フィールドを true に設定して作成します。

以下は、名前付き read-only-pd.yaml の例です。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-readonly-pv
spec:
  storageClassName: ""
  capacity:
    storage: 10Gi
  accessModes:
    - ReadOnlyMany
  claimRef:
    namespace: default
    name: my-readonly-pvc
  gcePersistentDisk:
    pdName: my-test-disk
    fsType: ext4
    readOnly: true
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-readonly-pvc
spec:
  # Specify "" as the storageClassName so it matches the PersistentVolume's StorageClass.
  # A nil storageClassName value uses the default StorageClass. For details, see
  # https://kubernetes.io/docs/concepts/storage/persistent-volumes/#class-1
  storageClassName: ""
  accessModes:
    - ReadOnlyMany
  resources:
    requests:
      storage: 10Gi

PersistentVolume と PersistentVolumeClaim を作成するには、kubectl apply -f read-only-pd.yaml を使用します。

PersistentVolumeClaim を Pod で使用する

この PersistentVolumeClaim をワークロードで使用するときは、次の例に示すように、readOnly: true を Pod 仕様の volumeMounts セクションと volumes セクションで指定する必要があります。

apiVersion: v1
kind: Pod
metadata:
  name: pod-pvc
spec:
  containers:
  - image: k8s.gcr.io/busybox
    name: busybox
    command:
      - "sleep"
      - "3600"
    volumeMounts:
    - mountPath: /test-mnt
      name: my-volume
      readOnly: true
  volumes:
  - name: my-volume
    persistentVolumeClaim:
      claimName: my-readonly-pvc
      readOnly: true

これで、異なるノード上の複数の Pod のすべてがこの PersistentVolumeClaim を読み取り専用モードでマウントできるようになります。ただし、複数のノードで書き込みモードの永続ディスクを同時に接続することはできません。詳細については、Deployment と StatefulSet の比較をご覧ください。