GKE su AWS esegue automaticamente il deployment dell'interfaccia di archiviazione dei container (CSI) Amazon Elastic Block Store (EBS) e Amazon Elastic File Store (EFS).
Le versioni del driver CSI EBS e del driver CSI EFS sono associate a una versione di Kubernetes GKE su AWS. In genere, la versione del driver è l'ultima disponibile al momento del rilascio di una versione GKE. Quando viene eseguito l'upgrade del cluster, i driver si aggiornano automaticamente.
Utilizzare la classe StorageClass predefinita
La creazione di un oggetto PersistentVolumeClaim senza il campo spec.storageClassName
esegue il provisioning di un
volume SSD per uso generico (gp2)
utilizzando l'oggetto StorageClass GKE predefinito per il driver CSI EBS AWS.
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
Usa un oggetto StorageClass preinstallato diverso
Il driver CSI EBS di GKE su AWS include anche la classe di archiviazione premium-rwo
, che fornisce volumi SSD con IOPS pianificati (io1
) con una maggiore velocità in uscita.
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
Utilizzo di una classe StorageClass personalizzata
Se né lo StorageClass predefinito né premium-rwo
soddisfano le tue esigenze, puoi creare StorageClass aggiuntivi per i volumi EBS o utilizzare i driver CSI (Container Storage Interface).
Scegli se utilizzi un volume EBS o un altro driver CSI.
Volume EBS
Questa scheda descrive come 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 allowVolumeExpansion: true 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 allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: csi.storage.k8s.io/fsType: xfs type: st1
StorageClass EFS personalizzata
Questa scheda descrive come creare una classe di archiviazione personalizzata per il provisioning del driver CSI EFS. Consulta Utilizzare una risorsa EFS per un elenco dei prerequisiti per questa classe di archiviazione. La pagina del driver CSI EFS elenca parametri StorageClass aggiuntivi oltre a quelli nel seguente manifest.
Copia il seguente manifest YAML in un file denominato
my-custom-class.yaml
.kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: <var>EFS_STORAGE_CLASS_NAME</var> provisioner: efs.csi.aws.com mountOptions: - tls parameters: provisioningMode: efs-ap fileSystemId: EFS_ID directoryPerms: "700"
Sostituisci:
- EFS_STORAGE_CLASS_NAME con il nome del
StorageClass
. - EFS_ID con l'ID del file system EFS, ad esempio fs-12345678a.
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 allowVolumeExpansion: true 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 esempiomy-custom-class
Configura i campi secondari in
parameters
in base al tuo driver CSI.- EFS_STORAGE_CLASS_NAME con il nome del
Applica il file YAML al cluster.
kubectl apply -f my-custom-class.yaml
Crea un PersistentVolumeClaim con una classe StorageClass personalizzata
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 archiviazionemy-custom-class
.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi storageClassName: my-custom-class
Impostare la classe StorageClass 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:
Aggiorna l'annotazione
is-default-class
per la classe di archiviazionestandard-rwo
conkubectl patch
.kubectl patch storageclass standard-rwo -p \ '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
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 Installare driver CSI aggiuntivi.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 allowVolumeExpansion: true 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 SSD generali (gp3).
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 allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: type: gp3
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
Scopri di più su volumi permanenti e provisioning dinamico in GKE.
Installa driver CSI aggiuntivi su GKE su AWS.
Esegui il deployment del tuo primo carico di lavoro con la guida rapida.