Menggunakan StorageClass dengan workload Anda

GKE di AWS otomatis men-deploy Container Storage Interface (CSI) Amazon Elastic Block Store (EBS) dan Amazon Elastic File Store (EFS).

Versi Driver EBS CSI dan EFS CSI Driver terikat dengan GKE pada versi AWS Kubernetes. Versi driver biasanya adalah versi terbaru yang tersedia saat versi GKE dirilis. Saat cluster diupgrade, driver akan otomatis diupdate.

Menggunakan StorageClass default

Membuat PersistentVolumeClaim tanpa kolom spec.storageClassName akan menyediakan volume volume SSD Tujuan Umum (gp2) menggunakan GKE default di AWS EBS CSI Driver StorageClass.

YAML berikut membuat PersistentVolumeClaim (PVC) bernama mypvc dengan ukuran 30 gibibyte.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi

Menggunakan StorageClass lain yang telah diinstal sebelumnya

GKE pada Driver AWS EBS CSI juga mencakup premium-rwo StorageClass, yang menyediakan volume SSD IOPS yang disediakan (io1) dengan throughput yang lebih tinggi.

Anda dapat menggunakannya dengan menentukannya dalam spec.storageClassName PVC.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi
  storageClassName: premium-rwo

Menggunakan StorageClass kustom

Jika StorageClass default atau premium-rwo tidak memenuhi kebutuhan Anda, Anda dapat membuat StorageClass tambahan untuk volume EBS atau menggunakan Driver Container Storage Interface (CSI).

  1. Pilih apakah Anda menggunakan volume EBS atau driver CSI lainnya.

    Volume EBS

    Tab ini menjelaskan cara membuat StorageClass kustom Anda sendiri yang menentukan jenis volume EBS, jenis sistem file, dan parameter lainnya. Anda dapat menemukan parameter StorageClass tambahan di halaman GitHub Driver GKE pada AWS EBS CSI.

    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: ebs.csi.aws.com
    allowVolumeExpansion: true
    volumeBindingMode: WaitForFirstConsumer
    

    Ganti CLASS_NAME dengan nama StorageClass baru Anda.

    Misalnya, YAML berikut membuat StorageClass baru yang menyediakan volume EBS throughput Optimized HDD yang diformat dengan sistem file XFS.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: my-custom-class
    provisioner: ebs.csi.aws.com
    allowVolumeExpansion: true
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      csi.storage.k8s.io/fsType: xfs
      type: st1
    

    EFS StorageClass Kustom

    Tab ini menjelaskan cara membuat StorageClass kustom untuk penyedia EFS CSI Driver. Lihat Menggunakan resource EFS untuk mengetahui daftar prasyarat untuk StorageClass ini. Halaman Driver EFS CSI mencantumkan parameter StorageClass tambahan selain parameter yang ada dalam manifes berikut.

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

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: <var>EFS_STORAGE_CLASS_NAME</var>
    provisioner: efs.csi.aws.com
    mountOptions:
      - tls
    parameters:
      provisioningMode: efs-ap
      fileSystemId: EFS_ID
      directoryPerms: "700"
    

    Ganti:

    • EFS_STORAGE_CLASS_NAME dengan nama StorageClass.
    • EFS_ID dengan ID sistem file EFS Anda - misalnya, fs-12345678a.

    Driver CSI

    Anda dapat menentukan driver CSI lain di kolom provisioner.

    Untuk membuat StorageClass dengan driver CSI lain, Anda dapat menggunakan contoh YAML di bawah ini.

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

    Ganti kode berikut:

    • CSI_DRIVER_NAME dengan nama driver CSI—misalnya,csi.example.com
    • CLASS_NAME dengan nama StorageClass—misalnya, my-custom-class

    Konfigurasikan sub-kolom di bagian parameters sesuai dengan driver CSI Anda.

  2. Terapkan YAML ke cluster Anda.

    kubectl apply -f my-custom-class.yaml
    

Membuat PersistentVolumeClaim dengan StorageClass kustom

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

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

Menetapkan StorageClass default

GKE di AWS menggunakan StorageClass default yang disebut standard-rwo yang menyediakan volume EBS gp2. Anda dapat mengubah default ke StorageClass lain.

Untuk mengubah StorageClass default:

  1. Update 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 berikut StorageClass menggunakan driver ebs.csi.aws.com. Untuk menginstal driver penyimpanan lain, lihat Menginstal driver CSI tambahan.

    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: ebs.csi.aws.com
    allowVolumeExpansion: true
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      type: EBS_VOLUME_TYPE
    

    Ganti kode berikut:

    • EBS_VOLUME_TYPE: jenis volume EBS AWS yang dibuat StorageClass.
    • CLASS_NAME dengan nama StorageClass baru Anda

    Misalnya, YAML berikut membuat StorageClass default baru yang menyediakan volume SSD Tujuan Umum (gp3).

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

    kubectl apply -f my-custom-class.yaml
    

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

Mereferensikan StorageClass dalam StatefulSet

Untuk menggunakan StorageClass baru, Anda harus mereferensikannya dalam volumeClaimTemplates StatefulSet.

Saat Anda mereferensikan StorageClass dalam spesifikasi volumeClaimTemplates StatefulSet, Kubernetes akan menyediakan penyimpanan stabil menggunakan PersistentVolumes (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 selanjutnya