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 del driver CSI EBS di GKE su AWS è associata a una versione di Kubernetes di GKE su AWS. In genere, la versione del driver è l'ultima disponibile al momento del rilascio della versione di GKE. Quando il cluster viene sottoposto ad upgrade, i driver vengono aggiornati automaticamente.
Come utilizzare l'oggetto StorageClass predefinito
La creazione di un oggetto PersistentVolumeClaim senza il campo spec.storageClassName impostato
esegue il provisioning di un
gp2 volume
utilizzando l'oggetto StorageClass del driver CSI EBS di GKE su AWS predefinito.
Il seguente file 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 altro oggetto StorageClass preinstallato
Il driver CSI EBS di GKE su AWS include anche l'oggetto StorageClass premium-rwo, che
esegue il provisioning di volumi
io1 con una velocità effettiva più elevata.
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 un oggetto StorageClass personalizzato
Puoi creare oggetti StorageClass aggiuntivi per i volumi EBS o utilizzare i driver Container Storage Interface (CSI).
Scegli se utilizzare un volume EBS o un driver CSI specifico.
Volume EBS
Puoi creare il tuo oggetto StorageClass personalizzato che specifica un tipo di volume EBS, un tipo di file system e altri parametri. Puoi trovare altri parametri di StorageClass nella pagina GitHub del driver CSI EBS di GKE su AWS .
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: WaitForFirstConsumerSostituisci
CLASS_NAMEcon il nome del nuovo oggetto StorageClass.Ad esempio, il seguente file YAML crea un nuovo oggetto StorageClass che esegue il provisioning di volumi EBS HDD ottimizzati per la velocità effettiva formattati con il 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: st1Driver CSI
Puoi specificare un driver CSI diverso nel campo
provisioner.Per creare un oggetto StorageClass con un altro driver CSI, puoi utilizzare il file YAML di esempio 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 esempiocsi.example.comCLASS_NAMEcon il nome dell'oggetto StorageClass, ad esempiomy-custom-class
Configura i sotto-campi in
parametersin base al driver CSI.Applica il file YAML al cluster.
kubectl apply -f my-custom-class.yaml
Come creare un oggetto PersistentVolumeClaim con un oggetto StorageClass personalizzato
Una volta creato un oggetto StorageClass personalizzato, puoi specificarlo in un PVC. L'esempio seguente crea un PVC denominato
my-pvcche fa riferimento all'oggetto StorageClassmy-custom-class.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi storageclassName: my-custom-class
Come impostare l'oggetto StorageClass predefinito
GKE su AWS utilizza un oggetto StorageClass predefinito denominato
standard-rwo che esegue il provisioning di
volumi EBS gp2. Puoi modificare l'oggetto predefinito con un altro oggetto StorageClass.
Per modificare l'oggetto StorageClass predefinito:
Aggiorna l'annotazione
is-default-classper l'oggetto StorageClassstandard-rwoconkubectl patch.kubectl patch storageclass standard-rwo -p \ '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'Crea un nuovo oggetto StorageClass con l'annotazione
storageclass.kubernetes.io/is-default-class: true.L'oggetto StorageClass di esempio seguente utilizza il driver
ebs.csi.aws.com. Per installare un altro driver di archiviazione, consulta Installazione di un driver CSI.Copia il seguente file 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_TYPESostituisci quanto segue:
EBS_VOLUME_TYPE: il tipo di volume EBS AWS creato dall'oggetto StorageClass.CLASS_NAMEcon il nome del nuovo oggetto StorageClass
Ad esempio, il seguente file YAML crea un nuovo oggetto StorageClass predefinito che esegue il provisioning di volumi EBS HDD ottimizzati per la velocità effettiva formattati con il 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: st1Applica 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.
Fare riferimento all'oggetto StorageClass in un oggetto StatefulSet
Per utilizzare il nuovo oggetto StorageClass, devi farvi riferimento in volumeClaimTemplates di un oggetto StatefulSet.
Quando fai riferimento a un oggetto StorageClass nella specifica volumeClaimTemplates di un oggetto StatefulSet, Kubernetes fornisce spazio di archiviazione stabile utilizzando i volumi permanenti (PV).
Kubernetes chiama il provisioner definito nell'oggetto StorageClass per creare un nuovo volume di archiviazione. Dopo il provisioning del volume, Kubernetes crea automaticamente un PV.
Il seguente oggetto StatefulSet fa riferimento all'oggetto StorageClass 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ù sui volumi permanenti in GKE.
Installa i driver di archiviazione nel cluster GKE su AWS.
Esegui il deployment del tuo primo carico di lavoro con la guida rapida.