Utilizzo di una classe StorageClass personalizzata con i carichi di lavoro

GKE su Azure esegue automaticamente il deployment di driver CSI per dischi Azure e driver CSI per file Azure.

Le versioni del driver CSI per dischi Azure e del driver CSI per file Azure sono associate a una versione di Kubernetes di GKE su Azure. In genere, la versione del driver è l'ultima disponibile al momento del rilascio di una versione di GKE. Quando il cluster viene sottoposto ad upgrade, i driver vengono aggiornati automaticamente.

Utilizzo di una classe StorageClass personalizzata

Puoi creare classi 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 classe 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 classe 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 classe StorageClass.

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

    Dopodiché, 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 classe StorageClass personalizzata.

    Dopo aver creato una classe StorageClass personalizzata, puoi specificarla in un oggetto PVC. L'esempio seguente crea un oggetto PVC denominato my-pvc che fa riferimento alla classe 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 classe StorageClass predefinita

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

Per modificare la classe StorageClass predefinita:

  1. Aggiorna l'annotazione is-default-class per la classe 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 classe StorageClass con l'annotazione storageclass.kubernetes.io/is-default-class: true.

    La seguente classe 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 classe StorageClass.
    • VOLUME_TYPE: il tipo di volume di dischi Azure creato dalla classe StorageClass.

    Ad esempio, il seguente YAML crea una nuova classe 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 classe StorageClass my-custom-default-class per le nuove richieste di archiviazione.

Fare riferimento alla classe StorageClass in un oggetto StatefulSet

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

Quando fai riferimento a una classe 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 classe 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 classe StorageClass my-custom-class e esegue il provisioning di un volume di 1 GiB:

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