Crea una classe di archiviazione - Amazon EKS

Contribuisci a migliorare questa pagina

Per contribuire a questa guida per l’utente, seleziona il link Edit this page on GitHub che si trova nel riquadro destro di ogni pagina.

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. Puoi inoltre la StorageClass per usare le 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.

    • Usa la policy IAM di esempio riportata di seguito per creare la policy. Inserisci l’ARN della nuova chiave KMS autogestita. Per ulteriori informazioni, consulta Creating roles and attaching policies (console) nella Guida per l’utente IAM AWS.

  3. Collegare la policy al ruolo del cluster EKS.

    • Usa la console AWS 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 del tuo account AWS, ad esempio 111122223333

  • <aws-region>: la regione AWS del tuo 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::<account-id>: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": "<account-id>", "kms:ViaService": "ec2.<aws-region>.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 sezione parameters della risorsa StorageClass è specifica per AWS. Utilizza la tabella seguente per esaminare le opzioni disponibili.

Parametri Valori Predefinito Descrizione

“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”

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

“allowAutoIOPSPerGBIncrease”

true, false

false

Se impostato su "true", il driver CSI aumenta gli IOPS per un volume quando iopsPerGB * <volume size> è troppo basso per rientrare nell’intervallo IOPS supportato da 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”

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

“throughput”

125

Velocità di trasmissione effettiva in 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.

“kmsKeyId”

L’ARN completo della chiave da usare per la crittografia del volume. Se non specificato, AWS userà 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.

“bytesPerInode”

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

“numberOfInodes”

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

“ext4BigAlloc”

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.

“ext4ClusterSize”

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, consulta AWS EBS CSI Driver su GitHub.

Considerazioni

Nota

È possibile implementare carichi di lavoro solo in base alle StorageClasses EKS Auto Mode sui nodi EKS Auto Mode. 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 di EKS Auto Mode.

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

  • Provisioning statico

    • Se vuoi usare volumi EBS creati esternamente con EKS Auto Mode, devi aggiungere manualmente un tag AWS 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 AWS associate. Dovrai aggiornare il ruolo del IAM cluster per i tag personalizzati. Per ulteriori informazioni, consulta Tag AWS personalizzati per risorse EKS Auto.

  • Metriche sulle prestazioni dettagliate di EBS

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

Installa il componente aggiuntivo CSI Snapshot Controller

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

AWS consiglia di configurare questo componente aggiuntivo per l’esecuzione nel pool di nodi system integrato.

Per ulteriori informazioni, consultare:

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

  1. Apri il cluster EKS nella console AWS

  2. Nella scheda Componenti aggiuntivi, 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 schema di configurazione dei componenti aggiuntivi

    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