Menggunakan Driver CSI persistent disk Compute Engine

Google Kubernetes Engine (GKE) menyediakan cara mudah bagi Anda untuk men-deploy dan mengelola Driver Antarmuka Penyimpanan Container (CSI) persistent disk Compute Engine secara otomatis di cluster. Driver CSI persistent disk Compute Engine selalu diaktifkan di cluster Autopilot dan tidak dapat dinonaktifkan atau diedit. Di cluster Standard, Anda harus mengaktifkan Driver CSI persistent disk Compute Engine.

Versi Driver CSI persistent disk Compute Engine terikat dengan nomor versi GKE. Versi Driver CSI persistent disk Compute Engine biasanya merupakan driver terbaru yang tersedia pada saat versi GKE dirilis. Driver akan otomatis diupdate saat cluster diupgrade ke patch GKE terbaru.

Manfaat

Menggunakan Driver CSI persistent disk Compute Engine memberikan manfaat berikut:

  • Hal ini memungkinkan deployment dan pengelolaan driver disk persisten secara otomatis tanpa harus menyiapkannya secara manual.
  • Anda dapat menggunakan kunci enkripsi yang dikelola pelanggan (CMEK). Kunci ini digunakan untuk mengenkripsi kunci enkripsi data yang mengenkripsi data Anda. Untuk mempelajari CMEK di GKE lebih lanjut, silakan melihat Menggunakan CMEK.
  • Anda dapat menggunakan snapshot volume dengan Driver CSI persistent disk Compute Engine. Snapshot volume memungkinkan Anda membuat salinan volume pada titik waktu tertentu. Anda dapat menggunakan salinan ini untuk mengembalikan volume ke status sebelumnya atau untuk menyediakan volume baru.
  • Anda dapat menggunakan cloning volume dengan Driver CSI persistent disk Compute Engine di cluster yang menjalankan GKE versi 1.22 dan yang lebih baru. Dengan cloning volume, Anda dapat membuat duplikat volume pada titik waktu tertentu, yang disediakan dengan semua data dari volume sumber.
  • Perbaikan bug dan update fitur diluncurkan secara terpisah dari rilis Kubernetes minor. Jadwal rilis ini biasanya menghasilkan frekuensi rilis yang lebih cepat.

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah gcloud components update. gcloud CLI versi sebelumnya mungkin tidak mendukung menjalankan perintah dalam dokumen ini.

Aktifkan Driver CSI persistent disk Compute Engine

Untuk mengaktifkan Driver CSI persistent disk Compute Engine di cluster Standard yang sudah ada, gunakan Google Cloud CLI atau konsol Google Cloud .

Untuk mengaktifkan driver di cluster yang sudah ada, selesaikan langkah-langkah berikut:

gcloud

gcloud container clusters update CLUSTER-NAME \
   --update-addons=GcePersistentDiskCsiDriver=ENABLED

Ganti CLUSTER-NAME dengan nama cluster yang sudah ada.

Konsol

  1. Buka halaman Google Kubernetes Engine di konsol Google Cloud .

    Buka Google Kubernetes Engine

  2. Di daftar cluster, klik nama cluster yang ingin diubah.

  3. Di bagian Fitur, di samping kolom Driver CSI persistent disk Compute Engine, klik Edit driver CSI Compute Engine.

  4. Centang kotak Aktifkan Driver CSI persistent disk Compute Engine.

  5. Klik Simpan Perubahan.

Setelah mengaktifkan Driver CSI persistent disk Compute Engine, Anda dapat menggunakan driver dalam volume Kubernetes dengan menggunakan nama penyedia dan driver: pd.csi.storage.gke.io.

Menonaktifkan Driver CSI persistent disk Compute Engine

Anda dapat menonaktifkan Driver CSI persistent disk Compute Engine untuk cluster Standard menggunakan Google Cloud CLI atau konsol. Google Cloud

Jika Anda menonaktifkan driver, semua Pod yang saat ini, yang menggunakan PersistentVolume yang dimiliki oleh driver, tidak akan dihentikan. Selain itu, setiap Pod baru yang mencoba menggunakan PersistentVolume tersebut juga tidak dapat dimulai.

Untuk menonaktifkan driver di cluster Standard yang sudah ada, selesaikan langkah-langkah berikut:

gcloud

gcloud container clusters update CLUSTER-NAME \
    --update-addons=GcePersistentDiskCsiDriver=DISABLED

Ganti CLUSTER-NAME dengan nama cluster yang sudah ada.

Konsol

  1. Buka halaman Google Kubernetes Engine di konsol Google Cloud .

    Buka Google Kubernetes Engine

  2. Di daftar cluster, klik nama cluster yang ingin diubah.

  3. Di bagian Fitur, di samping kolom Driver CSI persistent disk Compute Engine, klik Edit driver CSI Compute Engine.

  4. Hapus centang Aktifkan Driver CSI Persistent Disk Compute Engine.

  5. Klik Simpan Perubahan.

Menggunakan Driver CSI persistent disk Compute Engine untuk cluster Linux

Bagian berikut menjelaskan proses umum untuk menggunakan volume Kubernetes yang didukung oleh driver CSI di GKE. Bagian ini khusus untuk cluster yang menggunakan Linux.

Membuat StorageClass

Setelah Anda mengaktifkan Driver CSI persistent disk Compute Engine, GKE akan otomatis menginstal StorageClasses berikut:

  • standard-rwo, menggunakan persistent disk seimbang
  • premium-rwo, menggunakan persistent disk SSD

Untuk cluster Autopilot, StorageClass default adalah standard-rwo, yang menggunakan Driver CSI persistent disk Compute Engine. Untuk cluster Standard, StorageClass default menggunakan plugin volume gcePersistentDisk dalam hierarki Kubernetes.

Anda dapat menemukan nama StorageClass yang diinstal dengan menjalankan perintah berikut:

kubectl get sc

Anda juga dapat menginstal StorageClass lain yang menggunakan Driver CSI persistent disk Compute Engine dengan menambahkan pd.csi.storage.gke.io di kolom penyedia.

Misalnya, Anda dapat membuat StorageClass menggunakan file berikut, yang diberi nama pd-example-class.yaml.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: pd-example
provisioner: pd.csi.storage.gke.io
# Recommended setting. Delays the binding and provisioning of a PersistentVolume until a Pod that uses the
# PersistentVolumeClaim is created and scheduled on a node.
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  type: pd-balanced

Anda dapat menentukan jenis Disk Persisten berikut dalam parameter type:

  • pd-balanced
  • pd-ssd
  • pd-standard
  • pd-extreme (didukung di GKE versi 1.26 dan yang lebih baru)

Jika menggunakan pd-standard atau pd-extreme, silakan melihat Jenis mesin yang tidak didukung untuk batasan penggunaan tambahan.

Saat menggunakan opsi pd-extreme, Anda juga harus menambahkan kolom provisioned-iops-on-create ke manifes. Kolom ini harus ditetapkan ke nilai yang sama dengan nilai IOPS yang disediakan yang Anda tentukan saat membuat persistent disk.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: pd-extreme-example
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  type: pd-extreme
  provisioned-iops-on-create:'10000'

Setelah membuat file pd-example-class.yaml, jalankan perintah berikut:

kubectl create -f pd-example-class.yaml

Membuat PersistentVolumeClaim

Anda dapat membuat PersistentVolumeClaim yang mereferensikan StorageClass Driver CSI persistent disk Compute Engine.

File berikut, yang bernama pvc-example.yaml, menggunakan kelas penyimpanan bawaan standard-rwo:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: podpvc
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: standard-rwo
  resources:
    requests:
      storage: 6Gi

Setelah membuat manifes PersistentVolumeClaim, jalankan perintah berikut:

kubectl create -f pvc-example.yaml

Di StorageClass (standard-rwo) bawaan, volumeBindingMode disetel ke WaitForFirstConsumer. Jika volumeBindingMode disetel ke WaitForFirstConsumer, PersistentVolume tidak akan disediakan hingga Pod yang mereferensikan PersistentVolumeClaim dijadwalkan. Jika volumeBindingMode di StorageClass ditetapkan ke Immediate (atau dihilangkan), PersistentVolume yang didukung persistent disk akan disediakan setelah PersistentVolumeClaim dibuat.

Membuat Pod yang memakai volume

Saat menggunakan Pod dengan PersistentVolume, sebaiknya gunakan pengontrol workload (seperti Deployment atau StatefulSet). Meskipun biasanya Anda tidak akan menggunakan Pod mandiri, contoh berikut menggunakannya untuk memudahkan.

Contoh berikut menggunakan volume yang Anda buat di bagian sebelumnya:

apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  containers:
   - name: web-server
     image: nginx
     volumeMounts:
       # The path in the container where the volume will be mounted.
       - mountPath: /var/lib/www/html
         # The name of the volume that is being defined in the "volumes" section.
         name: mypvc
  volumes:
   - name: mypvc
     persistentVolumeClaim:
       # References the PersistentVolumeClaim created earlier.
       claimName: podpvc
       readOnly: false

Menggunakan Driver CSI persistent disk Compute Engine untuk cluster Windows

Bagian berikut menjelaskan proses umum untuk menggunakan volume Kubernetes yang didukung oleh driver CSI di GKE. Bagian ini khusus untuk cluster yang menggunakan Windows.

Pastikan bahwa:

  • Versi cluster adalah 1.19.7-gke.2000, 1.20.2-gke.2000, atau yang lebih baru.
  • Versi node adalah 1.18.12-gke.1203, 1.19.6-gke.800, atau yang lebih baru.

Membuat StorageClass

Proses pembuatan StorageClass untuk Windows sangat mirip dengan Linux. Perlu diketahui bahwa StorageClass yang diinstal secara default tidak akan berfungsi untuk Windows karena jenis sistem filenya berbeda. Driver CSI persistent disk Compute Engine untuk Windows mewajibkan NTFS sebagai jenis sistem file.

Misalnya, Anda dapat membuat StorageClass menggunakan file berikut bernama pd- windows-class.yaml. Pastikan untuk menambahkan csi.storage.k8s.io/fstype: NTFS ke daftar parameter:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: pd-sc-windows
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  type: pd-balanced
  csi.storage.k8s.io/fstype: NTFS

Membuat PersistentVolumeClaim

Setelah membuat StorageClass untuk Windows, sekarang Anda dapat membuat PersistentVolumeClaim yang merujuk StorageClass tersebut:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: podpvc-windows
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: pd-sc-windows
  resources:
    requests:
      storage: 6Gi

Membuat Pod yang memakai volume

Contoh berikut memakai volume yang Anda buat di tugas sebelumnya:

apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  # Node selector to ensure the Pod runs on a Windows node.
  nodeSelector:
    kubernetes.io/os: windows
  containers:
    - name: iis-server
      # The container image to use.
      image: mcr.microsoft.com/windows/servercore/iis
      ports:
      - containerPort: 80
      volumeMounts:
      # The path in the container where the volume will be mounted.
      - mountPath: /var/lib/www/html
        name: mypvc
  volumes:
    - name: mypvc
      persistentVolumeClaim:
        # References the PersistentVolumeClaim created earlier.
        claimName: podpvc-windows
        readOnly: false

Mengubah IOPS dan throughput Hyperdisk secara dinamis menggunakan VolumeAttributeClass

Anda dapat menggunakan VolumeAttributesClass dengan Driver CSI persistent disk Compute Engine untuk mengubah atribut persistent disk secara dinamis, termasuk IOPS dan throughput. Pastikan versi cluster GKE Anda adalah 1.34 atau yang lebih baru.

Bagian ini menunjukkan cara menggunakan VolumeAttributesClass untuk mengubah performa volume secara dinamis. Anda membuat dua resource VolumeAttributesClass, silver dan gold, untuk menentukan tingkat IOPS dan throughput yang berbeda. Kemudian, Anda membuat StorageClass, PersistentVolumeClaim yang mereferensikan tingkat silver, dan Pod untuk menggunakan volume. Terakhir, Anda memperbarui PersistentVolumeClaim untuk mereferensikan tingkat gold, yang membuat update dinamis pada setelan performa volume.

Buat VolumeAttributesClass untuk menentukan tingkat performa

Bagian ini menentukan resource VolumeAttributesClass dengan tingkat contoh bernama silver dan gold.

  1. Simpan manifes berikut sebagai vac-classes.yaml:

    apiVersion: storage.k8s.io/v1
    kind: VolumeAttributesClass
    metadata:
      name: silver
    driverName: pd.csi.storage.gke.io
    parameters:
      iops: "3000"
      throughput: "188Mi"
    ---
    apiVersion: storage.k8s.io/v1
    kind: VolumeAttributesClass
    metadata:
      name: gold
    driverName: pd.csi.storage.gke.io
    parameters:
      iops: "6000"
      throughput: "345Mi"
    
  2. Terapkan manifes:

    kubectl apply -f vac-classes.yaml
    

Membuat StorageClass untuk Hyperdisk

Bagian ini menentukan resource StorageClass untuk menyediakan volume Hyperdisk.

  1. Simpan manifes berikut sebagai hyperdisk-sc.yaml:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: hyperdisk-example
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-balanced
    
  2. Terapkan manifes:

    kubectl apply -f hyperdisk-sc.yaml
    

Membuat PVC dengan tingkat performa awal

Bagian ini membuat PVC dan menggunakan tingkat awal bernama silver.

  1. Simpan manifes berikut sebagai vac-silver-pvc.yaml:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: test-pv-claim
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: hyperdisk-example
      volumeAttributesClassName: silver
      resources:
        requests:
          storage: 200Gi
    
  2. Terapkan manifes:

    kubectl apply -f vac-silver-pvc.yaml
    
  3. Untuk menyediakan volume persisten, buat Pod yang menggunakan PVC. StorageClass yang dibuat di bagian sebelumnya menetapkan volumeBindingMode: WaitForFirstConsumer, yang menunda penyediaan volume hingga Pod menggunakan PVC. Simpan manifes berikut sebagai test-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-pvc-pod
    spec:
      containers:
        - name: nginx-container
          image: nginx:latest
          ports:
            - containerPort: 80
          volumeMounts:
            - name: pvc-storage
              mountPath: /usr/share/nginx/html
      volumes:
        - name: pvc-storage
          persistentVolumeClaim:
            claimName: test-pv-claim
    
  4. Terapkan manifes:

    kubectl apply -f test-pod.yaml
    
  5. Untuk memverifikasi setelan performa disk, lihat Memverifikasi setelan performa disk di konsol. Google Cloud IOPS yang disediakan harus 3000 dan Throughput yang disediakan harus 188.

Memperbarui PVC untuk menggunakan tingkat performa yang berbeda

Bagian ini memperbarui PVC untuk menggunakan tingkat gold, bukan tingkat silver.

  1. Simpan manifes berikut sebagai vac-gold-pvc.yaml:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: test-pv-claim
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: hyperdisk-example
      volumeAttributesClassName: gold
      resources:
        requests:
          storage: 200Gi
    
  2. Terapkan manifes:

    kubectl apply -f vac-gold-pvc.yaml
    
  3. Untuk memverifikasi bahwa setelan performa disk telah diperbarui, lihat Memverifikasi setelan performa disk di konsol Google Cloud . IOPS yang disediakan harus 6000 dan Throughput yang disediakan harus 345.

Memverifikasi setelan performa disk di konsol Google Cloud

Anda dapat memverifikasi bahwa setelan IOPS dan throughput diterapkan ke persistent disk dengan memeriksa detail disk di konsol Google Cloud .

  1. Dapatkan nama disk:

    PV_NAME=$(kubectl get pvc test-pv-claim -o=jsonpath='{.spec.volumeName}')
    DISK_NAME=$(kubectl get pv $PV_NAME -o=jsonpath='{.spec.csi.volumeHandle}' | sed 's|.*/||')
    echo "Persistent disk name: $DISK_NAME"
    
  2. Di konsol Google Cloud , buka halaman Disks.

    Buka Disk

  3. Klik nama persistent disk yang cocok dengan nama disk dari output langkah sebelumnya.

  4. Di halaman Disk details, di bagian Performance, lihat Provisioned IOPS dan Provisioned throughput.

Untuk mengetahui informasi selengkapnya, lihat Melihat setelan performa yang disediakan untuk Hyperdisk.

Pertimbangan untuk modifikasi dinamis

  • Menerapkan kembali konfigurasi sebelumnya: jika PVC tidak dapat terikat dengan class atribut volume karena error, seperti resource yang tidak tersedia, Anda dapat menerapkan kembali PVC sebelumnya dengan aman.
  • Dukungan Kuota: Bidang kontrol Kubernetes dapat menerapkan kuota pada PVC yang mereferensikan VolumeAttributesClass tertentu dengan menggunakan scopeSelector di ResourceQuota.

Menggunakan Driver CSI persistent disk Compute Engine dengan jenis sistem file non-default

Jenis sistem file default untuk persistent disk Compute Engine di GKE adalah ext4. Anda juga dapat menggunakan jenis penyimpanan xfs selama image node Anda mendukungnya. Lihat Dukungan driver penyimpanan untuk mengetahui daftar driver yang didukung oleh image node.

Contoh berikut menunjukkan cara menggunakan xfs sebagai jenis sistem file default, bukan ext4 dengan Driver CSI persistent disk Compute Engine.

Membuat StorageClass

  1. Simpan manifes berikut sebagai file YAML bernama pd-xfs-class.yaml:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: xfs-class
    provisioner: pd.csi.storage.gke.io
    parameters:
      # The type of Compute Engine persistent disk to provision.
      type: pd-balanced
      # Specify "xfs" as the filesystem type.
      csi.storage.k8s.io/fstype: xfs
    volumeBindingMode: WaitForFirstConsumer
    
  2. Terapkan manifes:

    kubectl apply -f pd-xfs-class.yaml
    

Membuat PersistentVolumeClaim

  1. Simpan manifes berikut sebagai pd-xfs-pvc.yaml:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: xfs-pvc
    spec:
      # References the StorageClass created earlier.
      storageClassName: xfs-class
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          # The amount of storage requested.
          storage: 10Gi
    
  2. Terapkan manifes:

    kubectl apply -f pd-xfs-pvc.yaml
    

Membuat Pod yang memakai volume

  1. Simpan manifes berikut sebagai pd-xfs-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: pd-xfs-pod
    spec:
      containers:
      - name: cloud-sdk
        image: google/cloud-sdk:slim
        # Keep the container running for 1 hour.
        args: ["sleep","3600"]
        volumeMounts:
        # The path in the container where the volume will be mounted.
        - mountPath: /xfs
          name: xfs-volume
      # Define the volumes available to the containers in the Pod.
      volumes:
      - name: xfs-volume
        persistentVolumeClaim:
          # References the PersistentVolumeClaim created earlier.
          claimName: xfs-pvc
    
  2. Terapkan manifes:

    kubectl apply -f pd-xfs-pod.yaml
    

Memastikan bahwa volume telah terpasang dengan benar

  1. Buka sesi shell di Pod:

    kubectl exec -it pd-xfs-pod -- /bin/bash
    
  2. Cari partisi xfs:

    df -aTh --type=xfs
    

    Output-nya akan mirip dengan berikut ini:

    Filesystem     Type  Size  Used Avail Use% Mounted on
    /dev/sdb       xfs    30G   63M   30G   1% /xfs
    

Melihat log untuk Driver CSI persistent disk Compute Engine

Anda dapat menggunakan Cloud Logging untuk melihat peristiwa yang terkait dengan Driver CSI persistent disk Compute Engine. Log dapat membantu Anda memecahkan masalah.

Untuk mengetahui informasi selengkapnya tentang Cloud Logging, silakan membaca Melihat log GKE Anda.

Untuk melihat log Driver CSI persistent disk Compute Engine, selesaikan langkah-langkah berikut:

  1. Buka halaman Cloud Logging di konsol Google Cloud .

    Buka Cloud Logging

  2. Untuk memfilter entri log agar hanya menampilkan entri yang terkait dengan Driver CSI yang berjalan di namespace Anda, jalankan kueri Cloud Logging berikut:

     resource.type="k8s_container"
     resource.labels.project_id="PROJECT_ID"
     resource.labels.location="LOCATION"
     resource.labels.cluster_name="CLUSTER_NAME"
     resource.labels.namespace_name="kube-system"
     resource.labels.container_name="gce-pd-driver"
    

    Ganti kode berikut:

    • PROJECT_ID: nama project Anda.
    • LOCATION: region atau zona Compute Engine cluster.
    • CLUSTER_NAME: nama cluster Anda.

Masalah umum

Jenis mesin yang tidak didukung

Jika Anda menggunakan kelompok mesin seri C3, jenis persistent disk pd-standard tidak didukung.

Jika Anda mencoba menjalankan Pod di mesin, dan Pod menggunakan jenis persistent disk yang tidak didukung, Anda akan melihat pesan peringatan seperti berikut yang dikeluarkan di Pod:

AttachVolume.Attach failed for volume "pvc-d7397693-5097-4a70-9df0-b10204611053" : rpc error: code = Internal desc = unknown Attach error: failed when waiting for zonal op: operation operation-1681408439910-5f93b68c8803d-6606e4ed-b96be2e7 failed (UNSUPPORTED_OPERATION): [pd-standard] features are not compatible for creating instance.

Jika cluster Anda memiliki beberapa node pool dengan kelompok mesin yang berbeda, Anda dapat menggunakan taint node dan afinitas node untuk membatasi tempat workload dapat dijadwalkan. Misalnya, Anda dapat menggunakan pendekatan ini untuk membatasi workload yang menggunakan pd-standard agar tidak berjalan pada kelompok mesin yang tidak didukung.

Jika menggunakan jenis persistent disk pd-extreme, Anda harus memastikan bahwa disk terpasang ke instance VM dengan bentuk mesin yang sesuai. Untuk mempelajari lebih lanjut, silakan melihat Dukungan bentuk mesin.

Langkah berikutnya