Menggunakan persistent disk dengan banyak pembaca


Halaman ini menjelaskan cara menambahkan persistent disk ke cluster Anda menggunakan mode akses ReadOnlyMany. Mode ini memungkinkan beberapa Pod di node yang berbeda memasang disk untuk membaca.

Untuk informasi selengkapnya tentang mode ini, lihat mode akses volume persisten.

Persyaratan

Memformat dan mengisi persistent disk sumber

Untuk menggunakan persistent disk dalam mode hanya baca, Anda harus mengisi persistent disk sumber dengan data, lalu meng-clone volume tersebut atau menggunakan snapshot volume untuk memindahkan data ke PersistentVolume ReadOnlyMany baru.

  1. Buat PersistentVolume menggunakan persistent disk yang sudah ada atau menggunakan penyediaan dinamis.

  2. Format disk dan isi dengan data. Untuk memformat disk, referensikan disk tersebut sebagai PersistentVolume ReadWriteOnce di sebuah Pod. GKE akan otomatis memformat disk pokok, dan mengizinkan Pod menulis data ke disk tersebut. Saat Pod dimulai, pastikan Pod menulis data yang Anda inginkan ke disk.

Membuat PersistentVolume ReadOnlyMany

Anda dapat membuat PersistentVolume ReadOnlyMany menggunakan salah satu metode berikut:

  • Snapshot volume dari PersistentVolume sumber yang Anda isi dengan data.
  • Clone volume dari PersistentVolume sumber yang Anda isi dengan data.
  • Persistent disk yang sudah ada sebelumnya dan sudah diisi dengan data.

Snapshot volume

  1. Buat snapshot volume dari PersistentVolume sumber.

  2. Simpan manifes PersistentVolumeClaim berikut sebagai 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
    

    Ganti kode berikut:

    • PVC_NAMESPACE: namespace PersistentVolumeClaim yang baru.
    • PVC_NAME: nama PersistentVolumeClaim baru.
    • SNAPSHOT_NAME:nama objek VolumeSnapshot Anda.
    • STORAGE_SIZE: ukuran penyimpanan yang akan diminta. Ukuran ini harus sama dengan yang diminta di PersistentVolumeClaim sumber.
  3. Terapkan manifes ke cluster Anda:

    kubectl apply -f snapshot-pvc.yaml
    

Tindakan ini akan membuat PersistentVolumeClaim baru bernama PVC_NAME di cluster Anda, yang digunakan GKE untuk menyediakan PersistentVolume baru secara dinamis yang berisi data dari snapshot persistent disk sumber.

Cloning volume

Sebelum menggunakan cloning volume, pastikan Anda memahami keterbatasan pendekatan ini.

  1. Simpan manifes berikut sebagai 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
    

    Ganti kode berikut:

    • PVC_NAMESPACE: namespace PersistentVolumeClaim yang baru.
    • PVC_NAME: nama PersistentVolumeClaim baru.
    • SOURCE_PVC: nama PersistentVolumeClaim sumber yang diisi dengan data.
    • STORAGE_CLASS_NAME: kelas penyimpanan untuk PersistentVolumeClaim baru. Nilai ini harus sama dengan kelas penyimpanan PersistentVolumeClaim sumber.
    • STORAGE_SIZE: Ukuran penyimpanan untuk PersistentVolumeClaim baru. Ukuran ini harus sama dengan yang diminta oleh PersistentVolumeClaim sumber.
  2. Terapkan manifes ke cluster Anda:

    kubectl apply -f cloning-pvc.yaml
    

Tindakan ini menghasilkan PersistentVolumeClaim bernama PVC_NAME yang digunakan GKE untuk membuat PersistentVolume baru dalam mode ReadOnlyMany dengan data di PersistentVolume sumber.

Untuk informasi selengkapnya tentang Cloning Volume, lihat Membuat clone volume persisten.

Persistent disk yang sudah ada

  1. Simpan manifes berikut sebagai 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
    

    Ganti kode berikut:

    • PV_NAME: nama PersistentVolume baru Anda.
    • STORAGE_CLASS_NAME: nama StorageClass baru Anda.
    • DISK_SIZE: ukuran persistent disk yang sudah ada. Contoh, 500G.
    • PVC_NAMESPACE: namespace PersistentVolumeClaim yang baru.
    • PVC_NAME: nama PersistentVolumeClaim baru Anda.
    • DISK_ID: ID persistent disk yang sudah ada. Formatnya adalah projects/{project_id}/zones/{zone_name}/disks/{disk_name} untuk Persistent disk zona, atau projects/{project_id}/regions/{region_name}/disks/{disk_name} untuk Persistent disk regional.
    • FS_TYPE: jenis sistem file. Anda dapat membiarkan jenis sistem file ext4 sebagai default, atau menggunakan xfs. Jika cluster Anda menggunakan node pool Windows Server, Anda harus mengubahnya menjadi NTFS.
  2. Terapkan manifes ke cluster Anda:

    kubectl apply -f preexisting-disk-pv-pvc.yaml
    

Tindakan ini menghasilkan PersistentVolumeClaim bernama PVC_NAME dan PersistentVolume bernama PV_NAME dalam mode ReadOnlyMany.

Untuk informasi lebih mendetail tentang penggunaan persistent disk yang sudah ada, lihat persistent disk yang sudah ada.

Menggunakan PersistentVolumeClaim di Pod

Sekarang Anda dapat mereferensikan PersistentVolumeClaim baru dalam mode hanya baca di banyak Pod yang berada di banyak node secara bersamaan. Anda tidak dapat memasang persistent disk dalam mode ReadWriteOnly ke banyak node secara bersamaan. Untuk informasi selengkapnya, lihat Deployment vs. StatefulSet.

Dalam spesifikasi Pod, Anda harus menentukan readOnly: true di bagian volumeMounts dan bagian volumes, seperti pada contoh berikut:

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

Langkah berikutnya