Utilizza StorageClasses con i tuoi carichi di lavoro

GKE on AWS esegue automaticamente il deployment del driver Container Storage Interface (CSI) per Amazon Elastic Block Store (EBS) per eseguire il provisioning e gestire i volumi Amazon EBS nei cluster.

La versione del driver CSI EBS di GKE su AWS è associata a una versione di Kubernetes GKE su AWS. In genere, la versione del driver è l'ultima disponibile al momento del rilascio della versione GKE. Quando viene eseguito l'upgrade del cluster, i driver si aggiornano automaticamente.

Come utilizzare la classe di archiviazione predefinita

La creazione di un oggetto PersistentVolumeClaim senza l'impostazione del campo spec.storageClassName consente di eseguire il provisioning di un volume gp2 utilizzando l'oggetto StorageClass del driver CSI EBS GKE predefinito.

Il seguente codice YAML crea una richiesta di volume permanente (PVC) denominata mypvc con una dimensione di 30 gigabyte.

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

Come utilizzare una classe StorageClass preinstallata diversa

Il driver CSI EBS di GKE su AWS include anche la classe di archiviazione premium-rwo, che fornisce volumi io1 con un throughput più elevato.

Puoi utilizzarlo specificandolo in spec.storageclassName del PVC.

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

Come utilizzare una classe StorageClass personalizzata

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

  1. Scegli se utilizzi un volume EBS o un driver CSI specifico.

    Volume EBS

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

    Per configurare un StorageClass personalizzato, 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: ebs.csi.aws.com
    volumeBindingMode: WaitForFirstConsumer
    

    Sostituisci CLASS_NAME con il nome della nuova StorageClass.

    Ad esempio, il seguente file YAML crea un nuovo StorageClass che provisiona volumi EBS HDD ottimizzati per il throughput formattati con il file system XFS.

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

    Driver CSI

    Puoi specificare un altro driver CSI nel campo provisioner.

    Per creare un 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 quanto segue:

    • CSI_DRIVER_NAME con il nome del driver CSI,ad esempiocsi.example.com
    • CLASS_NAME con il nome della classe StorageClass, ad esempio my-custom-class

    Configura i campi secondari in parameters in base al tuo driver CSI.

  2. Applica il file YAML al cluster.

    kubectl apply -f my-custom-class.yaml
    

Come creare un PersistentVolumeClaim con una classe StorageClass personalizzata

  1. Una volta creata una classe di archiviazione personalizzata, puoi specificarla in un PVC. L'esempio riportato di seguito crea un PVC denominato my-pvc che fa riferimento alla classe di archiviazione my-custom-class.

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

Come impostare la classe di archiviazione predefinita

GKE su AWS utilizza un oggetto StorageClass predefinito chiamato standard-rwo che esegue il provisioning di volumi EBS gp2. Puoi impostare un'altra classe StorageClass predefinita.

Per modificare la classe di archiviazione 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 un nuovo StorageClass con l'annotazione storageclass.kubernetes.io/is-default-class: true.

    L'esempio seguente StorageClass utilizza il driver ebs.csi.aws.com. Per installare un altro driver di archiviazione, consulta 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: ebs.csi.aws.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      type: EBS_VOLUME_TYPE
    

    Sostituisci quanto segue:

    • EBS_VOLUME_TYPE: il tipo di volume EBS AWS creato dalla classe di archiviazione.
    • CLASS_NAME con il nome del nuovo oggetto StorageClass

    Ad esempio, il seguente file YAML crea un nuovo StorageClass predefinito che provisiona volumi EBS con HDD ottimizzati per il throughput formattati con il file system XFS.

    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
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      csi.storage.k8s.io/fsType: xfs
      type: st1
    
  3. Applica la nuova classe personalizzata al cluster.

    kubectl apply -f my-custom-class.yaml
    

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

Fare riferimento a StorageClass in un StatefulSet

Per utilizzare il nuovo StorageClass, devi farvi riferimento nel volumeClaimTemplates di un StatefulSet.

Quando fai riferimento a un StorageClass nella volumeClaimTemplates specifica di un StatefulSet, Kubernetes fornisce uno spazio di archiviazione stabile utilizzando gli oggetti 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 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