Menyediakan persistent disk regional


Halaman ini menjelaskan cara mengaktifkan penyediaan dinamis persistent disk regional dan cara menyediakannya secara manual di Google Kubernetes Engine (GKE).

Untuk membuat solusi menyeluruh bagi aplikasi dengan ketersediaan tinggi menggunakan persistent disk regional, lihat Meningkatkan ketersediaan aplikasi stateful dengan Operator HA Stateful.

Persistent disk menurut region

Sama seperti persistent disk zona, persistent disk regional dapat disediakan secara dinamis sesuai kebutuhan atau disediakan secara manual terlebih dahulu oleh administrator cluster, meskipun penyediaan dinamis direkomendasikan. Untuk menggunakan persistent disk regional jenis pd-standard, tetapkan atribut spec.resources.requests.storage PersistentVolumeClaim ke minimum 200 GiB. Jika kasus penggunaan Anda memerlukan volume yang lebih kecil, sebaiknya gunakan pd-balanced atau pd-ssd.

Penyediaan dinamis

Untuk mengaktifkan penyediaan dinamis persistent disk regional, buat StorageClass dengan parameter replication-type, dan tentukan batasan zona di allowedTopologies.

Misalnya, manifes berikut menjelaskan StorageClass bernama regionalpd-storageclass yang menggunakan persistent disk standar dan mereplikasi data ke zona europe-west1-b dan europe-west1-c:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: regionalpd-storageclass
provisioner: pd.csi.storage.gke.io
parameters:
  type: pd-balanced
  replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
  - key: topology.gke.io/zone
    values:
    - europe-west1-b
    - europe-west1-c

Jika menggunakan cluster regional, Anda dapat membiarkan allowedTopologies tidak ditentukan. Jika Anda melakukannya, saat membuat Pod yang menggunakan PersistentVolumeClaim dengan StorageClass, persistent disk regional akan disediakan dengan dua zona. Satu zona sama dengan zona tempat Pod dijadwalkan. Zona lainnya diambil secara acak dari zona yang tersedia untuk cluster.

Saat menggunakan cluster zona, allowedTopologies harus ditetapkan.

Setelah StorageClass dibuat, selanjutnya buat objek PersistentVolumeClaim menggunakan kolom storageClassName untuk merujuk ke StorageClass. Misalnya, manifes berikut membuat PersistentVolumeClaim bernama regional-pvc dan mereferensikan regionalpd-storageclass:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: regional-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Gi
  storageClassName: regionalpd-storageclass

Karena StorageClass dikonfigurasi dengan volumeBindingMode: WaitForFirstConsumer, PersistentVolume tidak akan disediakan hingga Pod yang menggunakan PersistentVolumeClaim telah dibuat.

Manifes berikut adalah contoh Pod menggunakan PersistentVolumeClaim yang dibuat sebelumnya:

kind: Pod
apiVersion: v1
metadata:
  name: task-pv-pod
spec:
  volumes:
    - name: task-pv-storage
      persistentVolumeClaim:
        claimName: regional-pvc
  containers:
    - name: task-pv-container
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: task-pv-storage

Penyediaan manual

Pertama, buat persistent disk regional menggunakan perintah gcloud compute disks create. Contoh berikut membuat disk bernama gce-disk-1 yang direplikasi ke zona europe-west1-b dan europe-west1-c:

gcloud compute disks create gce-disk-1 \
   --size 500Gi \
   --region europe-west1 \
   --replica-zones europe-west1-b,europe-west1-c

Anda kemudian dapat membuat PersistentVolume yang mereferensikan persistent disk regional yang baru saja dibuat. Selain objek di Menggunakan Persistent Disk yang sudah ada sebagai PersistentVolume, PersistentVolume untuk persistent disk regional juga harus menentukan node-affinity. Jika Anda menggunakan StorageClass, driver CSI persistent disk harus ditentukan.

Berikut ini contoh manifes StorageClass yang menggunakan persistent disk standar dan mereplikasi data ke zona europe-west1-b dan europe-west1-c:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: regionalpd-storageclass
provisioner: pd.csi.storage.gke.io
parameters:
  type: pd-balanced
  replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
  - key: topology.gke.io/zone
    values:
    - europe-west1-b
    - europe-west1-c

Berikut ini contoh manifes yang membuat PersistentVolume bernama pv-demo dan mereferensikan regionalpd-storageclass:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-demo
spec:
  storageClassName: "regionalpd-storageclass"
  capacity:
     storage: 500Gi
  accessModes:
     - ReadWriteOnce
  claimRef:
    namespace: default
    name: pv-claim-demo
  csi:
    driver: pd.csi.storage.gke.io
    volumeHandle: projects/PROJECT_ID/regions/europe-west1/disks/gce-disk-1
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
          - key: topology.gke.io/zone
            operator: In
            values:
               - europe-west1-b
               - europe-west1-c

Perhatikan hal berikut untuk contoh PersistentVolume:

  • Kolom volumeHandle berisi detail dari panggilan gcloud compute disks create, termasuk PROJECT_ID Anda.
  • Kolom claimRef.namespace harus ditentukan bahkan jika ditetapkan ke default.

Penamaan persistent disk

Kubernetes tidak dapat membedakan persistent disk zona dan regional dengan nama yang sama. Sebagai solusinya, pastikan persistent disk memiliki nama yang unik. Masalah ini tidak terjadi saat menggunakan persistent disk yang disediakan secara dinamis.

Langkah berikutnya