GKE su 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 di GKE su AWS. La versione del driver è in genere l'ultima disponibile al momento del rilascio della versione di GKE. Quando viene eseguito l'upgrade del cluster, i driver vengono aggiornati automaticamente.
Come utilizzare la risorsa StorageClass predefinita
La creazione di un PersistentVolumeClaim senza il campo spec.storageClassName impostato
esegue il provisioning di un
volume gp2
utilizzando l'oggetto StorageClass predefinito del driver CSI EBS di GKE su AWS.
Il seguente YAML crea una PersistentVolumeClaim (PVC) denominata mypvc con una dimensione
di 30 gibibyte.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi
Come utilizzare una classe StorageClass preinstallata diversa
Il driver CSI GKE su AWS EBS include anche StorageClass premium-rwo, che esegue il provisioning di 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 aggiuntive per i volumi EBS o utilizzare i driver Container Storage Interface (CSI).
- Scegli se utilizzi un volume EBS o un driver CSI specifico. - Volume EBS- Puoi creare una StorageClass personalizzata che specifichi 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 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: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer- Sostituisci - CLASS_NAMEcon il nome della nuova StorageClass.- Ad esempio, il seguente YAML crea una nuova StorageClass che esegue il provisioning di 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 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 quanto segue: - CSI_DRIVER_NAMEcon il nome del driver CSI,ad esempio- csi.example.com
- CLASS_NAMEcon il nome di StorageClass, ad esempio- my-custom-class
 - Configura i campi secondari in - parametersin base al driver CSI.
- Applica il file YAML al cluster. - kubectl apply -f my-custom-class.yaml
Come creare un PersistentVolumeClaim con una classe StorageClass personalizzata
- Una volta creata una StorageClass personalizzata, puoi specificarla in un PVC. L'esempio di seguito crea un PVC denominato - my-pvcche 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 risorsa StorageClass predefinita
GKE su AWS utilizza un oggetto StorageClass predefinito denominato
standard-rwo che esegue il provisioning di
volumi EBS gp2. Puoi modificare il valore predefinito con un'altra risorsa StorageClass.
Per modificare la risorsa StorageClass predefinita:
- Aggiorna l'annotazione - is-default-classper la classe di archiviazione- standard-rwocon- kubectl patch.- kubectl patch storageclass standard-rwo -p \ '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
- Crea una nuova StorageClass con l'annotazione - storageclass.kubernetes.io/is-default-class: true.- La seguente StorageClass di esempio utilizza il driver - ebs.csi.aws.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: 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 da StorageClass.
- CLASS_NAMEcon il nome della nuova StorageClass
 - Ad esempio, il seguente YAML crea una nuova StorageClass predefinita che esegue il provisioning di volumi EBS 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
- Applica la nuova classe personalizzata al cluster. - kubectl apply -f my-custom-class.yaml
Dopo aver applicato questo manifest, GKE su AWS utilizza l'oggetto
StorageClass my-custom-default-class per le nuove richieste di archiviazione.
Fai riferimento a StorageClass in un oggetto StatefulSet
Per utilizzare il nuovo StorageClass, devi farvi riferimento nel campo volumeClaimTemplates di un 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
- Scopri di più sui volumi permanenti in GKE. 
- Installa i driver di archiviazione sul tuo cluster GKE su AWS. 
- Esegui il deployment del tuo primo workload con la guida rapida.