Utilizzo di una classe StorageClass personalizzata con i workload

Per definire comportamenti di archiviazione specifici per i workload containerizzati su Google Kubernetes Engine (GKE) su Azure, crea e utilizza StorageClass personalizzate. Personalizzando le StorageClass, puoi ottimizzare le prestazioni e i costi di archiviazione per le tue applicazioni selezionando diversi tipi di dischi Azure, tipi di file system e altri parametri per i volumi permanenti. Questa funzionalità ti aiuta a eseguire servizi efficienti adattando l'archiviazione alle esigenze esatte del tuo workload.

GKE su Azure esegue automaticamente il deployment e gestisce il driver CSI per dischi Azure e il driver CSI per file Azure, che sono essenziali per la gestione del provisioning dell'archiviazione. Le versioni di questi driver sono collegate alla versione di Kubernetes di GKE su Azure e vengono aggiornate automaticamente con gli upgrade del cluster, garantendo una compatibilità perfetta per le StorageClass personalizzate.

Utilizzo di una classe StorageClass personalizzata

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

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

    Volume di dischi Azure

    Puoi creare la tua StorageClass personalizzata che specifica un tipo di volume di dischi Azure, un tipo di file system e altri parametri. Puoi trovare altri parametri di StorageClass nella pagina GitHub del driver CSI per dischi 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 YAML crea una nuova StorageClass che esegue il provisioning dei volumi in un account di archiviazione specifico e applica un tag di 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 il seguente YAML di esempio.

    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 della StorageClass (ad esempio, my-custom-class).
    • CSI_DRIVER_NAME: il nome del driver CSI (ad esempio, csi.example.com).

    Quindi, configura i sottocampi 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 oggetto PersistentVolumeClaim con una StorageClass personalizzata.

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

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

Impostazione della StorageClass predefinita

GKE su Azure utilizza una StorageClass predefinita denominata standard-rwo che esegue il provisioning di dischi SSD standard di Azure con LRS. Puoi modificare l'impostazione predefinita in un'altra StorageClass.

Per modificare la StorageClass predefinita:

  1. Aggiorna l'annotazione is-default-class per la StorageClass 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, consulta Installazione di un driver CSI.

    Copia il seguente 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 di dischi Azure creato dalla StorageClass.

    Ad esempio, il seguente YAML crea una nuova StorageClass predefinita che esegue il provisioning di dischi Azure SSD Premium volumi.

    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 la StorageClass my-custom-default-class per le nuove richieste di archiviazione.

Fare riferimento alla StorageClass in un oggetto StatefulSet

Per utilizzare la nuova StorageClass, puoi farvi riferimento in volumeClaimTemplates di un oggetto StatefulSet.

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

Il seguente oggetto StatefulSet fa riferimento alla my-custom-class StorageClass e esegue il provisioning di 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