View a markdown version of this page

Crea una classe di archiviazione - Amazon EKS

Contribuisci a migliorare questa pagina

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Per contribuire a questa guida per l'utente, scegli il GitHub link Modifica questa pagina su che si trova nel riquadro destro di ogni pagina.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Crea una classe di archiviazione

Una StorageClass in Amazon EKS Auto Mode definisce come i volumi Amazon EBS vengono forniti automaticamente quando le applicazioni richiedono uno storage persistente. In questa pagina viene spiegato come creare e configurare una StorageClass che funzioni con Amazon EKS Auto Mode per il provisioning dei volumi EBS.

Configurando una StorageClass, è possibile specificare le impostazioni predefinite per i volumi EBS, inclusi il tipo di volume, la crittografia, gli IOPS e altri parametri di storage. È inoltre possibile configurare l'StorageClassuso delle chiavi AWS KMS per la gestione della crittografia.

EKS Auto Mode non crea una StorageClass per te. Devi creare una StorageClass che faccia riferimento a ebs.csi.eks.amazonaws.com per usare la funzionalità di storage di EKS Auto Mode.

Per prima cosa, crea un file denominato storage-class.yaml:

apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: auto-ebs-sc annotations: storageclass.kubernetes.io/is-default-class: "true" allowedTopologies: - matchLabelExpressions: - key: eks.amazonaws.com/compute-type values: - auto provisioner: ebs.csi.eks.amazonaws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp3 encrypted: "true"

Poi applica la classe di archiviazione al cluster.

kubectl apply -f storage-class.yaml

Componenti chiave:

  • provisioner: ebs.csi.eks.amazonaws.com: usa EKS Auto Mode

  • allowedTopologies: specificando matchLabelExpressions in modo che corrisponda con eks.amazonaws.com/compute-type:auto, se i pod richiedono un volume su cui effettuare il provisioning automatico usando Auto Mode, i pod non verranno pianificati su nodi non automatici.

  • volumeBindingMode: WaitForFirstConsumer: ritarda la creazione del volume fino a quando un pod non ne ha bisogno

  • type: gp3: specifica il tipo di volume EBS

  • encrypted: "true": EBS crittograferà tutti i volumi creati usando la StorageClass. EBS userà l’alias chiave predefinito aws/ebs. Per ulteriori informazioni, consulta How Amazon EBS encryption works nella Guida per l’utente di Amazon EBS. Questo valore è opzionale ma consigliato.

  • storageclass.kubernetes.io/is-default-class: "true": Kubernetes userà questa classe di archiviazione per impostazione predefinita, a meno che non venga specificata una classe di volume diversa su una dichiarazione di volume persistente. Questo valore è facoltativo. Presta attenzione quando imposti questo valore se stai effettuando la migrazione da un controller di storage diverso.

Usa la chiave KMS autogestita per crittografare i volumi EBS

Per usare una chiave KMS autogestita per crittografare i volumi EBS automatizzati da EKS Auto Mode, bisogna:

  1. Creare una chiave KMS gestita dal cliente.

  2. Creare una nuova policy che consenta l’accesso alla chiave KMS.

  3. Collegare la policy al ruolo del cluster EKS.

    • Usa la AWS console per trovare l'ARN del ruolo del cluster EKS. Le informazioni relative al ruolo sono visibili nella sezione Panoramica. Per ulteriori informazioni, consulta Ruolo IAM del cluster Amazon EKS.

  4. Aggiornare la StorageClass per fare riferimento all’ID della chiave KMS nel campo parameters.kmsKeyId.

Esempio di policy IAM KMS autogestita

Aggiorna i valori seguenti nella policy riportata di seguito:

  • <account-id>— L'ID AWS del tuo account, ad esempio 111122223333

  • <aws-region>— La AWS regione del cluster, ad esempio us-west-2

{ "Version":"2012-10-17", "Id": "key-auto-policy-3", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access through EBS for all principals in the account that are authorized to use EBS", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:CallerAccount": "123456789012", "kms:ViaService": "ec2.us-east-1.amazonaws.com" } } } ] }

Esempio di StorageClass KMS gestita dal cliente

parameters: type: gp3 encrypted: "true" kmsKeyId: <custom-key-arn>

Guida di riferimento per i parametri StorageClass

Per informazioni generali sulle risorse StorageClass di Kubernetes, consulta Storage Classes nella documentazione di Kubernetes.

La parameters sezione della StorageClass risorsa è specifica per AWS. Utilizza la tabella seguente per esaminare le opzioni disponibili.

Parameters Valori Predefinita Description

«csi.storage.k8s. io/fstype»

xfs, ext2, ext3, ext4

ext4

Tipo di file system che verrà formattato al momento della creazione del volume. Questo parametro prevede la distinzione tra maiuscole e minuscole.

“type”

io1, io2, gp2, gp3, sc1, st1, standard, sbp1, sbg1

gp3

Tipo di volume EBS.

“iopsPerGB”

I/O operazioni al secondo per GiB. Possono essere specificate per i volumi IO1, IO2 e GP3.

«consentireAutoIOPSPerGBIncrease»

true, false

false

Quando"true", il driver CSI aumenta gli IOPS per un volume troppo basso per rientrare nell'intervallo IOPS supportato da. iopsPerGB * <volume size> AWS Ciò consente al provisioning dinamico di avere sempre esito positivo, anche quando l’utente specifica una capacità PVC o un valore iopsPerGB troppo bassi. D’altra parte, ciò potrebbe comportare costi aggiuntivi, poiché tali volumi hanno un IOPS superiore a quello richiesto in iopsPerGB.

“iops”

I/O operazioni al secondo. Possono essere specificate per i volumi IO1, IO2 e GP3.

“throughput”

125

Throughput in ingresso. MiB/s Efficace solo quando è specificato il tipo di volume gp3.

“encrypted”

true, false

false

Se il volume deve essere crittografato o no. I valori validi sono “true” o “false”.

“blockExpress”

true, false

false

Permette la creazione di Volumi io2 Block Express.

«kmKeyId»

L’ARN completo della chiave da usare per la crittografia del volume. Se non specificato, AWS utilizzerà la chiave KMS predefinita per la regione in cui si trova il volume. Si tratta di una chiave generata automaticamente chiamata /aws/ebs se non viene modificata.

“blockSize”

La dimensione del blocco da utilizzare per la formattazione del filesystem sottostante. Supportata solo sui nodi linux e con fstype ext2, ext3, ext4 o xfs.

“inodeSize”

La dimensione dell’inode da utilizzare per la formattazione del filesystem sottostante. Supportata solo sui nodi linux e con fstype ext2, ext3, ext4 o xfs.

«bytePerInode»

bytes-per-inode da utilizzare per la formattazione del filesystem sottostante. Supportata solo sui nodi linux e con fstype ext2, ext3, ext4.

«numeroOfInodes»

number-of-inodes da utilizzare per la formattazione del filesystem sottostante. Supportata solo sui nodi linux e con fstype ext2, ext3, ext4.

«BigAllocext4"

true, false

false

Modifica il filesystem ext4 per usare l’allocazione di blocchi in cluster abilitando l’opzione di formattazione bigalloc. Attenzione: bigalloc potrebbe non essere completamente supportato dal kernel Linux del nodo.

«ClusterSizeext4"

La dimensione del cluster da usare per formattare un filesystem ext4 quando la funzionalità bigalloc è abilitata. Nota: il parametro ext4BigAlloc deve essere impostato su true

Per ulteriori informazioni, consultate il driver AWS EBS CSI su. GitHub

Considerazioni

Nota

È possibile distribuire carichi di lavoro solo in base alla modalità EKS Auto sui nodi EKS Auto Mode StorageClasses . Se hai un cluster con tipi misti di nodi, devi configurare i carichi di lavoro in modo che vengano eseguiti solo sui nodi EKS Auto Mode. Per ulteriori informazioni, consulta Controllare se un carico di lavoro viene implementato sui nodi della modalità automatica di EKS.

La funzionalità di storage a blocchi di EKS Auto Mode è diversa da quella del driver CSI EBS.

  • Provisioning statico

    • Se desideri utilizzare volumi EBS creati esternamente con EKS Auto Mode, devi aggiungere manualmente un AWS tag con la chiave eks:eks-cluster-name e il valore del nome del cluster.

  • Taint startup del nodo

    • Non è possibile usare la funzionalità taint startup del nodo per impedire la pianificazione dei pod prima che la capacità di storage sia pronta

  • Tag personalizzati su volumi con provisioning dinamico

    • Non è possibile usare il flag CLI extra-tag per configurare tag personalizzati su volumi EBS con provisioning dinamico

    • Puoi usare l’assegnazione di tag StorageClass per aggiungere tag personalizzati. EKS Auto Mode aggiungerà tag alle risorse associate. AWS Dovrai aggiornare il ruolo del IAM cluster per i tag personalizzati. Per ulteriori informazioni, consulta Personalizzato AWS tag per le risorse EKS Auto.

  • Metriche sulle prestazioni dettagliate di EBS

    • Non puoi accedere alle metriche di Prometheus per le prestazioni dettagliate di EBS

Annotation-based La modifica del volume EBS è obsoleta

Il volume-modifier-for-k8s progetto è stato dichiarato obsoleto a favore dell'API nativa di Kubernetes. VolumeAttributesClass Questo progetto è stato utilizzato per impostare annotazioni su un volume EBS per modificare un PersistentVolumeClaim volume EBS. Dopo il 31 ottobre 2026, Amazon EKS Auto Mode non supporta più queste annotazioni. Per modificare i volumi EBS (ad esempio,type, othroughput) dopo tale dataiops, utilizza invece l'API VolumeAttributesClass Kubernetes. Per ulteriori informazioni, consulta Volume Attributes Classes nella documentazione di Kubernetes.

Esegui la migrazione da volume-modifier-for-k8s a VolumeAttributesClass

Per i cluster EKS Auto Mode che eseguono Kubernetes 1.34 o versioni successive, utilizza un (VAC) per modificare il tipo, gli IOPS o il throughput di un VolumeAttributesClass volume EBS.

I PVC esistenti possono essere migrati sul posto creando un VAC e impostandolo sul PVC esistente. spec.volumeAttributesClassName Il PVC e il fotovoltaico non vengono ricreati e non ci sono interruzioni dei carichi di lavoro durante questo processo.

  1. Definisci le impostazioni del volume in un VAC

    Le annotazioni VMK vengono mappate ai parametri VAC come segue:

    Annotazione VMK esistente Parametro VAC

    ebs.csi.eks.amazonaws.com/volumeType

    tipo

    ebs.csi.eks.amazonaws.com/iops

    iops

    ebs.csi.eks.amazonaws.com/throughput

    velocità di trasmissione effettiva

    Usaretype, nonvolumeType, nel VAC. I valori devono essere stringhe e un VAC richiede solo i parametri relativi alla configurazione EBS desiderata. Esempio:

    apiVersion: storage.k8s.io/v1 kind: VolumeAttributesClass metadata: name: ebs-auto-gp3-6000-250 driverName: ebs.csi.eks.amazonaws.com parameters: type: gp3 iops: "6000" throughput: "250"

    I VAC sono classificati in cluster, quindi il manifest non ha namespace. Applicalo normalmente:

    kubectl apply -f vac.yaml
  2. Assegna il VAC al PVC

    VAC_NAME=ebs-auto-gp3-6000-250 kubectl patch pvc <pvc-name> -n <namespace> --type=merge \ -p "{\"spec\":{\"volumeAttributesClassName\":\"${VAC_NAME}\"}}"
  3. Conferma che la modifica è stata completata

    kubectl get pvc <pvc-name> -n <namespace> \ -o custom-columns='NAME:.metadata.name,REQUESTED:.spec.volumeAttributesClassName,CURRENT:.status.currentVolumeAttributesClassName,STATUS:.status.modifyVolumeStatus.status'

    La migrazione è completa quando REQUESTED CURRENT contiene lo stesso nome VAC ed STATUS è vuota.

    Se non viene completata, ispeziona gli eventi relativi al PVC:

    kubectl describe pvc <pvc-name> -n <namespace>

    Pendingdi solito significa che il VAC di riferimento non è disponibile. Infeasiblesignifica che il driver ha rifiutato i parametri EBS richiesti; crea un VAC valido e assegnalo invece.

Facoltativo: rimuovere le annotazioni VMK

La rimozione delle vecchie annotazioni non è necessaria per il funzionamento di VAC. Una volta che un PVC o PV fa riferimento a un VAC, VMK rifiuta le modifiche basate sulle annotazioni e VAC è il percorso autorevole.

Le annotazioni possono essere rimosse in un secondo momento durante la pulizia della configurazione. Se vengono rimosse, aggiorna anche qualsiasi Helm o altra automazione che le aggiungerebbe nuovamente. GitOps Le annotazioni di stato VMK lasciate sul PV sono innocue e non devono essere rimosse.

Modifica o ripristino delle impostazioni

I parametri VAC sono immutabili. Per modificare la configurazione EBS, create un altro VAC e assegnatene il nome al PVC.

Per annullare una modifica non completata, ripristina il VAC assegnato in precedenza. Se il PVC non ne ha usato uno in precedenza, cancella il campo:

kubectl patch pvc <pvc-name> -n <namespace> --type=merge \ -p '{"spec":{"volumeAttributesClassName":null}}'

La cancellazione del campo non annulla una modifica EBS già completata. Per ripristinare le impostazioni di volume precedenti, create un VAC contenente tali impostazioni e assegnatelo al PVC. Si applicano i normali vincoli dei parametri EBS e i tempi di recupero delle modifiche.

Installa il componente aggiuntivo CSI Snapshot Controller

EKS Auto Mode è compatibile con il componente aggiuntivo CSI Snapshot Controller di Amazon EKS.

AWS suggerisce di configurare questo componente aggiuntivo per l'esecuzione sul pool di nodi integrato. system

Per ulteriori informazioni, consulta:

Per installare il controller di snapshot nel pool di nodi di sistema

  1. Apri il tuo cluster EKS nella console AWS

  2. Dalla Add-ons scheda, seleziona Ottieni altri componenti aggiuntivi

  3. Seleziona il controller CSI Snapshot e poi Avanti

  4. Nella pagina Configura le impostazioni dei componenti aggiuntivi selezionati, seleziona Impostazioni di configurazione opzionali per visualizzare lo Add-on schema di configurazione

    1. Inserisci il seguente yaml per associare il controller di snapshot al pool di nodi system. Il controller di snapshot include una tolleranza per il taint CriticalAddonsOnly.

      { "nodeSelector": { "karpenter.sh/nodepool": "system" } }
    2. Seleziona Avanti

  5. Esamina la configurazione del componente aggiuntivo, poi seleziona Crea