Utilizza StorageClasses con i tuoi carichi di lavoro

Cluster Anthos su AWS (GKE su AWS) esegue automaticamente il deployment del Driver Container Storage Interface (CSI) per Amazon Elastic Block Store (EBS) per il provisioning e la gestione dei volumi Amazon EBS nei cluster.

La versione di Cluster Anthos on AWS EBS CSI Driver è collegata a una versione di Cluster Anthos on AWS Kubernetes. In genere, la versione del driver è l'ultima disponibile quando viene rilasciata la versione di GKE. Quando viene eseguito l'upgrade del cluster, i driver si aggiornano automaticamente.

Come utilizzare l'oggetto StorageClass predefinito

La creazione di un PersistentVolumeClaim senza il campo spec.storageClassName imposta il provisioning di un volume gp2 utilizzando i cluster Anthos predefiniti su AWS EBS CSI Driver StorageClass.

Il seguente YAML crea un oggetto PersistentVolumeClaim (PVC) denominato mypvc con una dimensione di 30 gibibyte.

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

Come utilizzare un oggetto StorageClass preinstallato

I cluster Anthos su driver AWS CSI EBS E includono anche premium-rwo StorageClass, che esegue il provisioning di volumi io1 di velocità effettiva più elevati.

Puoi utilizzarla specificandola nella spec.storageclassName della PVC.

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

Come utilizzare un oggetto StorageClass personalizzato

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

  1. Scegli se stai usando un volume EBS o un driver CSI specifico.

    Volume EBS

    Puoi creare un oggetto StorageClass personalizzato che specifichi un tipo di volume EBS, un tipo di file system e altri parametri. Puoi trovare parametri StorageClass aggiuntivi nei cluster Anthos sulla pagina GitHub di AWS EBS CSI.

    Per configurare un oggetto 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 del tuo nuovo oggetto StorageClass.

    Ad esempio, il seguente YAML crea un nuovo oggetto StorageClass che esegue il provisioning di volumi EBD di velocità effettiva ottimizzata in formato EBS formattato 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 oggetto 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 di archiviazione, ad esempio my-custom-class

    Configura i campi secondari in parameters secondo il driver CSI.

  2. Applica il codice YAML al tuo cluster.

    kubectl apply -f my-custom-class.yaml
    

Come creare un oggetto PersistentVolumeClaim con un oggetto StorageClass personalizzato

  1. Una volta creata una classe StorageClass personalizzata, puoi specificarla in una PVC. L'esempio riportato di seguito crea una PVC denominata 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 lo spazio di archiviazione predefinito

Cluster Anthos on AWS utilizza un oggetto StorageClass predefinito chiamato standard-rwo che esegue il provisioning di volumi EBS gp2. Puoi passare a un'altra classe di archiviazione predefinita.

Per modificare la classe di archiviazione predefinita:

  1. Aggiorna l'annotazione is-default-class per standard-rwo StorageClass con kubectl patch.

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

    Nel seguente esempio, StorageClass utilizza il driver ebs.csi.aws.com. Per installare un altro driver di archiviazione, vedi Installare 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 di AWS creato dalla classe StorageClass.
    • CLASS_NAME il nome del tuo nuovo oggetto StorageClass

    Ad esempio, il seguente YAML crea un nuovo valore StorageClass predefinito che esegue il provisioning di volumi HDD Throughput Optimized HDD con formato del 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, Cluster Anthos on AWS utilizza il valore my-custom-default-class StorageClass per le nuove richieste di archiviazione.

Fare riferimento a StorageClass in uno StatefulSet

Per utilizzare il tuo nuovo oggetto StorageClass, devi fare riferimento a questo elemento in volumeClaimTemplates di uno StatefulSet.

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

Il seguente oggetto StatefulSet fa riferimento a StorageClass di my-custom-class ed esegue il provisioning di un volume da 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