Utilizzare una StorageClass personalizzata con i tuoi carichi di lavoro

GKE su Azure esegue automaticamente il deployment di Azure Disk CSI Driver e Azure File CSI Driver.

Le versioni di Azure Disk CSI Driver e Azure File CSI Driver sono associate a una versione di GKE su Azure Kubernetes. La versione del driver è in genere l'ultima disponibile al momento del rilascio di una versione di GKE. Quando viene eseguito l'upgrade del cluster, i driver vengono aggiornati automaticamente.

Utilizzo di una classe StorageClass personalizzata

Puoi creare StorageClass aggiuntive per i volumi o utilizzare i driver Container Storage Interface (CSI).

  1. Scegli se utilizzi un volume disco Azure o un altro driver CSI.

    Volume disco Azure

    Puoi creare una StorageClass personalizzata che specifica un tipo di volume Azure Disk, un tipo di file system e altri parametri. Puoi trovare parametri StorageClass aggiuntivi nella pagina GitHub del driver CSI del disco Azure di GKE su Azure.

    Per configurare una StorageClass personalizzata, copia il seguente manifest YAML in un file denominato my-custom-class.yaml.

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

    Sostituisci CLASS_NAME con il nome della nuova StorageClass.

    Ad esempio, il seguente file YAML crea una nuova StorageClass che esegue il provisioning dei volumi in un account di archiviazione specifico e applica un tag group=dev a ogni nuovo volume.

    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

    Puoi specificare un driver CSI diverso nel campo provisioner.

    Per creare una StorageClass con un altro driver CSI, puoi utilizzare l'esempio YAML riportato di seguito.

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

    Sostituisci i seguenti valori:

    • CLASS_NAME: il nome di StorageClass (ad esempio, my-custom-class).
    • CSI_DRIVER_NAME: il nome del driver CSI (ad esempio, csi.example.com).

    A questo punto, configura i campi secondari in parameters in base alla documentazione del driver CSI.

  2. Applica il file YAML al cluster.

    kubectl apply -f my-custom-class.yaml
    
  3. Crea un PersistentVolumeClaim con una classe StorageClass personalizzata.

    Dopo aver creato una StorageClass personalizzata, puoi specificarla in un PVC. L'esempio seguente crea un PVC denominato my-pvc che fa riferimento a StorageClass my-custom-class.

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

Impostare la risorsa StorageClass predefinita

GKE su Azure utilizza un oggetto StorageClass predefinito denominato standard-rwo che esegue il provisioning di dischi SSD standard di Azure con LRS. Puoi modificare il valore predefinito con un'altra risorsa StorageClass.

Per modificare la risorsa StorageClass predefinita:

  1. Aggiorna l'annotazione is-default-class per la classe di archiviazione standard-rwo con kubectl patch.

    kubectl patch storageclass standard-rwo -p \
      '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
    
  2. Crea una nuova StorageClass con l'annotazione storageclass.kubernetes.io/is-default-class: true.

    La seguente StorageClass di esempio utilizza il driver disk.csi.azure.com. Per installare un altro driver di archiviazione, vedi Installazione di un driver CSI.

    Copia il seguente codice YAML in un file denominato 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
    

    Sostituisci quanto segue:

    • CLASS_NAME: il nome della nuova StorageClass.
    • VOLUME_TYPE: il tipo di volume del disco Azure che StorageClass crea.

    Ad esempio, il seguente YAML crea un nuovo oggetto StorageClass predefinito che esegue il provisioning di volumi di dischi Azure SSD Premium.

    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. Applica la nuova classe personalizzata al cluster.

    kubectl apply -f my-custom-class.yaml
    

Dopo aver applicato questo manifest, GKE su Azure utilizza my-custom-default-class StorageClass per le nuove richieste di archiviazione.

Fai riferimento a StorageClass in un oggetto StatefulSet

Per utilizzare il nuovo StorageClass, puoi farvi riferimento in volumeClaimTemplates di uno StatefulSet.

Quando fai riferimento a una StorageClass nella specifica volumeClaimTemplates di uno StatefulSet, Kubernetes fornisce spazio di archiviazione stabile utilizzando PersistentVolume (PV). Kubernetes chiama il provisioner definito in StorageClass per creare un nuovo volume di archiviazione. Dopo il provisioning del volume, Kubernetes crea automaticamente un PV.

Il seguente StatefulSet fa riferimento alla classe di archiviazione my-custom-class e provisiona un volume di 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

Passaggi successivi