Menyediakan volume Hyperdisk Balanced High Availability dan persistent disk regional

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
    # Allow volume expansion.
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-balanced-high-availability
      # Provisioned throughput in MiB/s.
      provisioned-throughput-on-create: "250Mi"
      # Provisioned IOPS (input/output operations per second).
      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.
    • Jika memilih untuk menggunakan ReadWriteMany, Anda juga perlu menambahkan volumeMode: Block ke PersistentVolumeClaim. Setelan ini mencegah kerusakan data yang dapat terjadi akibat beberapa Pod yang menulis ke penyimpanan secara bersamaan. Setelan volumeMode: Block mengekspos disk sebagai perangkat blok mentah yang melewati pengelolaan sistem file oleh Kubernetes. Berikut adalah contohnya:
      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: podpvc
      spec:
        accessModes:
        - ReadWriteMany
        volumeMode: Block
        storageClassName: balanced-ha-storage
        resources:
          requests:
            storage: 20Gi
      ```
    
  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. Manifest 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 links this PersistentVolume to a PersistentVolumeClaim.
      claimRef:
        namespace: default
        name: podpvc
      csi:
        driver: pd.csi.storage.gke.io
        # The unique identifier of the Compute Engine disk resource that backs this volume.
        volumeHandle: projects/PROJECT_ID/regions/REGION/disks/gce-disk-1
      # Node affinity to ensure the Pod is scheduled in a zone where the volume is replicated.
      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
    

Menggunakan volume multi-penulis dalam mode blok

Untuk menggunakan volume dalam mode blok, Anda harus menentukan volumeBlock, bukan volumeMounts, di Pod yang menggunakan. Contoh Pod yang menggunakan PersistenVolumeClaim yang diperkenalkan sebelumnya akan terlihat seperti berikut:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-server-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        # Use volumeDevices instead of volumeMounts to consume the volume as a raw block device.
        volumeDevices:
        # The "mountPath" field specifies the path where the block device is accessible in the container.
        - mountPath: /dev/my-device
          name: mypvc
      volumes:
      - name: mypvc
        persistentVolumeClaim:
          claimName: podpvc
          readOnly: false

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
  # Specifies that the disk should be a regional persistent disk.
  replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
# Constrains which zones the regional persistent disk can be provisioned in.
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
      # This Pod uses the PVC that's associated with the
      # "regionalpd-storageclass" StorageClass.
      persistentVolumeClaim:
        claimName: regional-pvc
  containers:
    - name: task-pv-container
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      # The volume is mounted into the container at the "/usr/share/nginx/html" path.
      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
  # Specifies that the disk should be a regional persistent disk.
  replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
# Constrains which zones the regional persistent disk can be provisioned in.
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:
  # The StorageClass that specifies regional replication.
  storageClassName: "regionalpd-storageclass"
  capacity:
     storage: 500Gi
  accessModes:
     - ReadWriteOnce
  claimRef:
    namespace: default
    name: pv-claim-demo
  csi:
    driver: pd.csi.storage.gke.io
    # The unique identifier for the pre-existing regional disk.
    volumeHandle: projects/PROJECT_ID/regions/europe-west1/disks/gce-disk-1
  # Ensures that Pods are scheduled in zones where the disk is replicated.
  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