Menggunakan StorageClass kustom dengan workload Anda

Untuk menentukan perilaku penyimpanan tertentu untuk workload dalam container Anda di Google Kubernetes Engine (GKE) di Azure, buat dan gunakan StorageClass kustom. Dengan menyesuaikan StorageClass, Anda dapat mengoptimalkan performa dan biaya penyimpanan untuk aplikasi Anda dengan memilih jenis disk Azure, jenis sistem file, dan parameter lainnya untuk PersistentVolume Anda. Kemampuan ini membantu Anda menjalankan layanan yang efisien dengan menyesuaikan penyimpanan dengan kebutuhan persis workload Anda.

GKE di Azure otomatis men-deploy dan mengelola Driver CSI Disk Azure dan Driver CSI File Azure, yang penting untuk menangani penyediaan penyimpanan. Versi driver ini terikat dengan versi Kubernetes GKE di Azure Anda dan otomatis diupdate dengan upgrade cluster, sehingga memastikan kompatibilitas yang lancar untuk StorageClass kustom Anda.

Menggunakan StorageClass kustom

Anda dapat membuat StorageClass tambahan untuk volume atau menggunakan Driver Container Storage Interface (CSI).

  1. Pilih apakah Anda menggunakan volume disk Azure atau driver CSI lainnya.

    Volume Disk Azure

    Anda dapat membuat StorageClass kustom Anda sendiri yang menentukan jenis volume Disk Azure, jenis sistem file, dan parameter lainnya. Anda dapat menemukan parameter StorageClass tambahan di halaman GitHub Driver CSI Disk Azure GKE di Azure .

    Untuk mengonfigurasi StorageClass kustom, salin manifes YAML berikut ke dalam file bernama my-custom-class.yaml.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
     name: CLASS_NAME
    provisioner: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    

    Ganti CLASS_NAME dengan nama StorageClass baru Anda.

    Misalnya, YAML berikut membuat StorageClass baru yang menyediakan volume di akun penyimpanan tertentu dan menerapkan tag dari group=dev ke setiap volume baru.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
     name: my-custom-class
    provisioner: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
     storageAccount: my-storage-account
     tags: group=dev
    

    Driver CSI

    Anda dapat menentukan driver CSI yang berbeda di kolom provisioner.

    Untuk membuat StorageClass dengan driver CSI lain, Anda dapat menggunakan contoh YAML berikut.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
     name: CLASS_NAME
    provisioner: CSI_DRIVER_NAME
    volumeBindingMode: WaitForFirstConsumer
    parameters:
     ...
    

    Ganti nilai berikut:

    • CLASS_NAME: nama StorageClass (misalnya, my-custom-class).
    • CSI_DRIVER_NAME: nama driver CSI (misalnya, csi.example.com).

    Selanjutnya, konfigurasi subkolom di bagian parameters sesuai dengan dokumentasi driver CSI Anda.

  2. Terapkan YAML ke cluster Anda.

    kubectl apply -f my-custom-class.yaml
    
  3. Buat PersistentVolumeClaim dengan StorageClass kustom.

    Setelah membuat StorageClass kustom, Anda dapat menentukannya di PVC. Contoh berikut membuat PVC bernama my-pvc yang mereferensikan StorageClass my-custom-class.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
     name: my-pvc
    spec:
     accessModes:
      - ReadWriteOnce
     resources:
      requests:
       storage: 30Gi
     storageclassName: my-custom-class
    

Menetapkan StorageClass default

GKE di Azure menggunakan StorageClass default bernama standard-rwo yang menyediakan disk Azure SSD standar dengan LRS. Anda dapat mengubah default ke StorageClass lain.

Untuk mengubah StorageClass default:

  1. Perbarui anotasi is-default-class untuk StorageClass standard-rwo dengan kubectl patch.

    kubectl patch storageclass standard-rwo -p \
     '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
    
  2. Buat StorageClass baru yang memiliki anotasi storageclass.kubernetes.io/is-default-class: true.

    Contoh StorageClass berikut menggunakan driver disk.csi.azure.com. Untuk menginstal driver penyimpanan lain, lihat Menginstal driver CSI.

    Salin YAML berikut ke dalam file bernama my-custom-class.yaml.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
     name: CLASS_NAME
     annotations:
      storageclass.kubernetes.io/is-default-class: true
    provisioner: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
     skuName: VOLUME_TYPE
    

    Ganti kode berikut:

    • CLASS_NAME: nama StorageClass baru Anda.
    • VOLUME_TYPE: jenis volume Disk Azure yang dibuat StorageClass.

    Misalnya, YAML berikut membuat StorageClass default baru yang menyediakan SSD Premium volume Disk Azure.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
     name: my-custom-default-class
     annotations:
      storageclass.kubernetes.io/is-default-class: "true"
    provisioner: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
     skuName: Premium_LRS
    
  3. Terapkan class kustom baru ke cluster Anda.

    kubectl apply -f my-custom-class.yaml
    

Setelah menerapkan manifes ini, GKE di Azure akan menggunakan StorageClass my-custom-default-class untuk permintaan penyimpanan baru.

Mereferensikan StorageClass dalam StatefulSet

Untuk menggunakan StorageClass baru, Anda dapat mereferensikannya di volumeClaimTemplates StatefulSet.

Saat Anda mereferensikan StorageClass dalam spesifikasi volumeClaimTemplates StatefulSet, Kubernetes akan menyediakan penyimpanan yang stabil menggunakan PersistentVolume (PV). Kubernetes memanggil penyedia yang ditentukan dalam StorageClass untuk membuat volume penyimpanan baru. Setelah volume disediakan, Kubernetes akan otomatis membuat PV.

StatefulSet berikut mereferensikan StorageClass my-custom-class dan menyediakan volume 1 gibibyte:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: registry.k8s.io/nginx-slim:0.8
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates: # This is the specification in which you reference the StorageClass
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi
      storageClassName: my-custom-class # This field references the existing StorageClass

Langkah berikutnya