GKE su AWS esegue automaticamente il deployment del Driver Container Storage Interface (CSI) per Amazon Elastic Block Store (EBS) per eseguire il provisioning e la gestione dei volumi Amazon EBS nei tuoi cluster.
La versione del driver CSI GKE su AWS EBS è legata a una versione GKE su AWS Kubernetes. 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 si aggiornano automaticamente.
Utilizzare il valore predefinito di StorageClass
La creazione di un PersistentVolumeClaim senza il campo spec.storageClassName
imposta
il provisioning di un
volume gp2
utilizzando il valore predefinito di GKE su AWS EBS CSI StorageClass.
Il seguente YAML crea un 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 diverso
Il driver CSI GKE su AWS EBS include anche premium-rwo
StorageClass, che esegue il provisioning di volumi io1
con velocità effettiva superiore.
Puoi utilizzarlo specificandolo nel campo spec.storageclassName
della PVC.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
storageclassName: premium-rwo
Utilizzare un oggetto StorageClass personalizzato
Puoi creare classi di archiviazione aggiuntive per volumi EBS o utilizzare driver Container Storage Interface (CSI).
Scegli se stai utilizzando 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 parametri aggiuntivi di StorageClass nella pagina GitHub del driver GKE on 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 StorageClass.Ad esempio, il codice YAML seguente crea un nuovo oggetto StorageClass che esegue il provisioning di volumi EBS throughput Optimized HDD 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 un oggetto StorageClass con un altro driver CSI, puoi utilizzare l'esempio YAML 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 dell'oggetto StorageClass, ad esempiomy-custom-class
Configura i sottocampi in
parameters
in base al tuo driver CSI.Applica il codice YAML al tuo cluster.
kubectl apply -f my-custom-class.yaml
Creare un oggetto PersistentVolumeClaim con un oggetto StorageClass personalizzato
Una volta creato un oggetto StorageClass personalizzato, puoi specificarlo in un PVC. L'esempio riportato di seguito crea una PVC denominata
my-pvc
che fa riferimento a StorageClassmy-custom-class
.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi storageclassName: my-custom-class
Impostare il valore predefinito di StorageClass
GKE su AWS utilizza un oggetto StorageClass predefinito denominato
standard-rwo
che esegue il provisioning dei
volumi EBS gp2. Puoi modificare il valore predefinito in un altro oggetto StorageClass.
Per modificare il valore predefinito di StorageClass:
Aggiorna l'annotazione
is-default-class
per StorageClassstandard-rwo
conkubectl 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
.Nell'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 da StorageClass.CLASS_NAME
con il nome del nuovo oggetto StorageClass
Ad esempio, il codice YAML seguente crea un nuovo oggetto StorageClass predefinito che esegue il provisioning di volumi EBS throughput Optimized HDD 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 StorageClass my-custom-default-class
per le nuove richieste di archiviazione.
Riferimento a StorageClass in un StatefulSet
Per utilizzare il nuovo oggetto StorageClass, devi farvi riferimento in uno StatefulSet
volumeClaimTemplates
.
Quando fai riferimento a un oggetto StorageClass nella specifica volumeClaimTemplates
di uno StatefulSet, Kubernetes fornisce uno spazio di archiviazione stabile tramite oggetti PersistentVolume (PV).
Kubernetes chiama il provisioner definito in StorageClass per creare un nuovo volume di archiviazione. Kubernetes crea automaticamente
un volume permanente dopo il provisioning del volume.
Il seguente StatefulSet fa riferimento a my-custom-class
StorageClass e
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
Scopri di più sui volumi permanenti in GKE.
Installa i Driver di archiviazione su GKE su cluster AWS.
Esegui il deployment del tuo primo carico di lavoro con la Guida rapida.