Menyediakan persistent disk regional dan volume Hyperdisk Balanced High Availability


Halaman ini menjelaskan cara mengaktifkan penyediaan dinamis volume Hyperdisk Balanced High Availability dan persistent disk regional serta cara menyediakannya secara manual di Google Kubernetes Engine (GKE). Untuk kompatibilitas jenis mesin, lihat Batasan untuk Disk Regional dan Dukungan seri mesin untuk Hyperdisk. Umumnya, Anda harus menggunakan volume Hyperdisk Balanced High Availability untuk seri mesin generasi ke-3 atau yang lebih baru dan persistent disk regional di seri mesin generasi ke-2 atau yang lebih lama. Untuk mengetahui informasi selengkapnya tentang generasi seri mesin, lihat Terminologi Compute Engine.

Untuk membuat solusi menyeluruh bagi aplikasi dengan ketersediaan tinggi menggunakan persistent disk regional, lihat Meningkatkan ketersediaan aplikasi stateful dengan Operator HA Stateful. Fitur ini tidak mendukung volume Hyperdisk Balanced High Availability.

Hyperdisk Balanced High Availability

Contoh ini menunjukkan cara volume Hyperdisk Balanced High Availability dapat disediakan secara dinamis sesuai kebutuhan atau disediakan secara manual terlebih dahulu oleh administrator cluster.

Penyediaan dinamis

  1. Simpan manifes berikut dalam file bernama balanced-ha-storage.yaml.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: balanced-ha-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-balanced-high-availability
      provisioned-throughput-on-create: "250Mi"
      provisioned-iops-on-create: "7000"
    allowedTopologies:
    - matchLabelExpressions:
      - key: topology.gke.io/zone
        values:
        - ZONE1
        - ZONE2
    

    Ganti kode berikut:

    • ZONE1, ZONE2: zona dalam region tempat volume yang disediakan secara dinamis akan direplikasi.
  2. Buat StorageClass:

    kubectl create -f hdb-ha-example-class.yaml
    
  3. Simpan manifes PersistentVolumeClaim berikut dalam file bernama pvc-example.yaml:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ACCESS_MODE
      storageClassName: balanced-ha-storage
      resources:
        requests:
          storage: 20Gi
    

    Ganti kode berikut:

    • ACCESS_MODE: Hyperdisk Balanced High Availability mendukung ReadWriteOnce, ReadWriteMany, dan ReadWriteOncePod. Untuk mengetahui perbedaan dan kasus penggunaan setiap mode akses, lihat Mode Akses Volume Persisten.
  4. Terapkan PersistentVolumeClaim yang mereferensikan StorageClass yang Anda buat sebelumnya:

    kubectl apply -f pvc-example.yaml
    

Penyediaan Manual

  1. Ikuti dokumentasi Compute Engine untuk membuat volume Hyperdisk Balanced High Availability secara manual.

  2. Simpan manifes PersistentVolume berikut dalam file bernama pv-example.yaml. Manifes mereferensikan volume Hyperdisk Balanced High Availability yang baru saja Anda buat:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-demo
    spec:
      capacity:
        storage: 500Gi
      accessModes:
        - ACCESS_MODE
      claimRef:
        namespace: default
        name: podpvc
      csi:
        driver: pd.csi.storage.gke.io
        volumeHandle: projects/PROJECT_ID/regions/REGION/disks/gce-disk-1
      nodeAffinity:
        required:
          nodeSelectorTerms:
            - matchExpressions:
              - key: topology.gke.io/zone
                operator: In
                values:
                - ZONE1
                - ZONE2
    

    Ganti kode berikut:

    • PROJECT_ID: project ID volume yang Anda buat.
    • REGION: region disk yang Anda buat. Lihat dokumentasi Compute Engine untuk mengetahui ketersediaan regional terbaru.
    • ZONE1, ZONE2: zona dalam region tempat volume yang Anda buat direplikasi.
    • ACCESS_MODE: Hyperdisk Balanced High Availability mendukung ReadWriteOnce, ReadWriteMany, dan ReadWriteOncePod. Untuk mengetahui perbedaan dan kasus penggunaan setiap mode akses, lihat Mode Akses Volume Persisten.
  3. Buat Persistent Volume yang mereferensikan volume Hyperdisk Balanced High Availability yang Anda buat sebelumnya:

    kubectl apply -f pv-example.yaml
    
  4. Simpan manifes PersistentVolumeClaim berikut dalam file bernama pvc-example.yaml:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ACCESS_MODE
      storageClassName: balanced-ha-storage
      resources:
        requests:
          storage: 20Gi
    

    Ganti kode berikut:

    • ACCESS_MODE: Hyperdisk Balanced High Availability mendukung ReadWriteOnce, ReadWriteMany, dan ReadWriteOncePod. Harus memiliki mode akses yang sama dengan yang ditentukan di PersistentVolume dari langkah sebelumnya. Untuk mengetahui perbedaan dan kasus penggunaan setiap mode akses, lihat Mode Akses Volume Persisten.
  5. Terapkan PersistentVolumeClaim yang mereferensikan PersistentVolume yang Anda buat sebelumnya:

    kubectl apply -f pvc-example.yaml
    

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