Utilizzo dell’archiviazione di file system elastici con Amazon EFS - 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.

Utilizzo dell’archiviazione di file system elastici con Amazon EFS

Amazon Elastic File System (Amazon EFS) fornisce un'archiviazione di file serverless e completamente elastica in modo da poter condividere i dati dei file senza dover fornire o gestire la capacità e le prestazioni di archiviazione. Il driver Container Storage Interface (CSI) per Amazon EFS mette a disposizione un'interfaccia CSI che consente ai cluster Kubernetes in esecuzione su AWS di gestire il ciclo di vita dei file system Amazon EFS. Questo argomento illustra come implementare il driver CSI per Amazon EBS nel cluster Amazon EKS.

Considerazioni

  • Il driver CSI per Amazon EFS non è compatibile con le immagini di container basate su Windows.

  • Non è possibile utilizzare il provisioning dinamico dei volumi persistenti con nodi Fargate, ma è possibile utilizzare il provisioning statico.

  • Il provisioning dinamico richiede un driver versione 1.2 o successiva. È possibile eseguire il provisioning statico di volumi persistenti utilizzando la versione 1.1 del driver su qualsiasi versione del cluster Amazon EKS supportata (consultare la pagina Amazon EKS supported versions).

  • La versione 1.3.2 o successiva di questo driver supporta l’architettura Arm64, incluse le istanze basate su Graviton di Amazon EC2.

  • La versione 1.4.2 o successiva di questo driver supporta l’uso di FIPS per il montaggio di file system.

  • Osserva le quote delle risorse per Amazon EFS. Ad esempio, è possibile creare una quota di 1.000 punti di accesso per ogni file system Amazon EFS. Per ulteriori informazioni, consulta le Quote di risorse di Amazon EFS che non puoi modificare.

  • A partire dalla versione 2.0.0, questo driver è passato dall’utilizzo di stunnel a efs-proxy per le connessioni TLS. Quando viene utilizzato efs-proxy, aprirà un numero di thread pari a uno più il numero di core del nodo su cui è in esecuzione.

  • Il driver CSI per Amazon EFS non è compatibile con Amazon EKS Hybrid Nodes.

Prerequisiti

  • Il driver CSI per Amazon EFS richiede autorizzazioni di AWS Identity and Access Management (IAM).

  • La versione 2.12.3 o successiva oppure la versione 1.27.160 o successiva dell’interfaccia a riga di comando AWS (AWS CLI) installata e configurata sul dispositivo o AWS CloudShell. Per verificare la versione attuale, usa aws --version | cut -d / -f2 | cut -d ' ' -f1. I programmi di gestione dei pacchetti, come yum, apt-get o Homebrew per macOS, spesso sono aggiornati a versioni precedenti dell’AWS CLI. Per installare la versione più recente, consultare Installing e Quick configuration with aws configure della Guida per l’utente dell’Interfaccia della linea di comando AWS. La versione della AWS CLI installata in AWS CloudShell potrebbe anche essere precedente di diverse versioni rispetto alla più recente. Per aggiornarla, consultare la pagina Installing AWS CLI to your home directory della Guida per l’utente di AWS CloudShell.

  • Lo strumento a riga di comando kubectl è installato sul dispositivo o su AWS CloudShell. La versione può essere la stessa o immediatamente precedente o successiva alla versione Kubernetes del cluster. Ad esempio, se la versione del cluster è 1.29, puoi usare kubectl versione 1.28, 1.29 o 1.30. Per installare o aggiornare kubectl, consulta Impostazione di kubectl e eksctl:

Nota

Un pod in esecuzione su Fargate monta automaticamente un file system Amazon EFS senza bisogno della procedura di installazione manuale del driver.

Fase 1: Creazione di un ruolo IAM

Il driver CSI per Amazon EFS richiede le autorizzazioni IAM per interagire con il file system. Crea un ruolo IAM e collegavi la policy gestita da AWS richiesta. Per implementare questa procedura, è possibile utilizzare uno dei seguenti strumenti:

Nota

I passaggi specifici di questa procedura sono stati scritti per l'utilizzo del driver come componente aggiuntivo di Amazon EKS. Per informazioni dettagliate sulle installazioni autogestite, consultare la pagina Set up driver permission su GitHub.

eksctl

Se si utilizza Pod Identity

Eseguire i seguenti comandi per creare un ruolo IAM e un’associazione Pod Identity con eksctl. Sostituisci my-cluster con il nome del cluster. È anche possibile sostituire AmazonEKS_EFS_CSI_DriverRole con un nome diverso.

export cluster_name=my-cluster export role_name=AmazonEKS_EFS_CSI_DriverRole eksctl create podidentityassociation \ --service-account-name efs-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name $role_name \ --permission-policy-arns arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy

Se si utilizzano ruoli IAM per gli account di servizio

Eseguire i seguenti comandi per creare un ruolo IAM con eksctl. Sostituisci my-cluster con il nome del cluster. È anche possibile sostituire AmazonEKS_EFS_CSI_DriverRole con un nome diverso.

export cluster_name=my-cluster export role_name=AmazonEKS_EFS_CSI_DriverRole eksctl create iamserviceaccount \ --name efs-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name $role_name \ --role-only \ --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \ --approve TRUST_POLICY=$(aws iam get-role --output json --role-name $role_name --query 'Role.AssumeRolePolicyDocument' | \ sed -e 's/efs-csi-controller-sa/efs-csi-*/' -e 's/StringEquals/StringLike/') aws iam update-assume-role-policy --role-name $role_name --policy-document "$TRUST_POLICY"

Console di gestione AWS

Seguire questa procedura per creare un ruolo IAM con Console di gestione AWS.

  1. Aprire la console IAM all'indirizzo https://console.aws.amazon.com/iam/.

  2. Nel pannello di navigazione a sinistra, seleziona Ruoli.

  3. Nella pagina Ruoli, seleziona Crea ruolo.

  4. Nella pagina Seleziona un'entità attendibile, esegui le operazioni seguenti:

    1. Se si utilizza EKS Pod Identity:

      1. Nella sezione Tipo di entità attendibile, scegliere Servizio AWS.

      2. Nel menu a discesa Servizio o caso d’uso, scegliere EKS.

      3. Nella sezione Caso d’uso, scegliere EKS - Pod Identity.

      4. Scegli Next (Successivo).

    2. Se si utilizzano ruoli IAM per gli account di servizio:

      1. Nella sezione Tipo di identità attendibile, scegli Identità Web.

      2. Per Identity provider (Provider di identità), scegli URL del provider OpenID Connect per il cluster (come mostrato nella scheda Overview (Panoramica) in Amazon EKS).

      3. Per Pubblico, scegli sts.amazonaws.com.

      4. Scegli Next (Successivo).

  5. Nella pagina Add permissions (Aggiungi autorizzazioni), esegui le operazioni seguenti:

    1. Nella casella Filtra policy, inserisci AmazonEFSCSIDriverPolicy.

    2. Seleziona la casella di controllo a sinistra della AmazonEFSCSIDriverPolicy restituita dalla ricerca.

    3. Scegli Next (Successivo).

  6. Nella pagina Name, review, and create (Assegna un nome, rivedi e crea), esegui le operazioni seguenti:

    1. Per Role name (Nome ruolo), inserisci un nome univoco per il ruolo, ad esempio AmazonEKS_EFS_CSI_DriverRole.

    2. In Aggiungi tag (facoltativo), aggiungi metadati al ruolo collegando i tag come coppie chiave-valore. Per ulteriori informazioni sull'utilizzo di tag in IAM, consulta la sezione Applicazione di tag alle risorse IAM nella Guida per l'utente di IAM.

    3. Scegli Crea ruolo.

  7. Dopo aver creato il ruolo:

    1. Se si utilizza EKS Pod Identity:

      1. Aprire la Console Amazon EKS.

      2. Nel riquadro di navigazione a sinistra, selezionare Cluster, quindi selezionare il nome del cluster per cui configurare l’associazione EKS Pod Identity.

      3. Scegli la scheda Accesso.

      4. In Associazioni Pod Identity, scegliere Crea.

      5. Scegliere il menu a discesa Ruolo IAM e selezionare il ruolo appena creato.

      6. Scegliere il campo Namespace Kubernetes e inserire kube-system.

      7. Scegliere il campo Account del servizio Kubernetes e inserire efs-csi-controller-sa.

      8. Scegli Create (Crea).

      9. Per ulteriori informazioni sulla creazione di associazioni Pod Identity, consultare Crea un’associazione Pod Identity (AWS console).

    2. Se si utilizzano ruoli IAM per gli account di servizio:

      1. Scegliere il ruolo per aprirlo per la modifica.

      2. Scegli la scheda Relazioni di attendibilità e quindi Modifica policy di attendibilità.

      3. Trova la riga simile alla seguente:

        "oidc.eks.region-code.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com"

        Aggiungi la riga seguente sopra la riga precedente. Sostituire <region-code> con la Regione AWS in cui si trova il cluster. Sostituire <EXAMPLED539D4633E53DE1B71EXAMPLE> con l’ID del gestore OIDC del cluster.

        "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-*",
      4. Modifica l'operatore Condition da "StringEquals" a "StringLike".

      5. Scegli Aggiorna policy per concludere.

CLI AWS

Eseguire i seguenti comandi per creare un ruolo IAM con AWS CLI.

Se si utilizza Pod Identity

  1. Creare il ruolo IAM che concede le operazioni AssumeRole e TagSession al servizio pods.eks.amazonaws.com.

    1. Copiare i seguenti contenuti in un file denominato aws-efs-csi-driver-trust-policy-pod-identity.json.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
    2. Crea il ruolo. Sostituisci my-cluster con il nome del cluster. È anche possibile sostituire AmazonEKS_EFS_CSI_DriverRole con un nome diverso.

      export cluster_name=my-cluster export role_name=AmazonEKS_EFS_CSI_DriverRole aws iam create-role \ --role-name $role_name \ --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy-pod-identity.json"
  2. Collega la policy gestita da AWS richiesta al ruolo utilizzando il comando seguente.

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \ --role-name $role_name
  3. Eseguire il seguente comando per creare l’associazione Pod Identity. Sostituire arn:aws:iam::<111122223333>:role/my-role con il ruolo creato nei passaggi precedenti.

    aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/my-role --namespace kube-system --service-account efs-csi-controller-sa
  4. Per ulteriori informazioni sulla creazione di associazioni Pod Identity, consultare Crea un’associazione Pod Identity (AWS console).

Se si utilizzano ruoli IAM per gli account di servizio

  1. Visualizzare l’URL del gestore OIDC del cluster. Sostituisci my-cluster con il nome del cluster. È anche possibile sostituire AmazonEKS_EFS_CSI_DriverRole con un nome diverso.

    export cluster_name=my-cluster export role_name=AmazonEKS_EFS_CSI_DriverRole aws eks describe-cluster --name $cluster_name --query "cluster.identity.oidc.issuer" --output text

    Di seguito viene riportato un output di esempio:

    https://oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>

    Se l'output dal comando è None, rivedi i Prerequisiti.

  2. Crea il ruolo IAM che concede l'autorizzazione per l'operazione AssumeRoleWithWebIdentity.

    1. Copia i contenuti seguenti in un file denominato aws-efs-csi-driver-trust-policy.json. Sostituisci <111122223333> con l'ID del tuo account. Sostituire <EXAMPLED539D4633E53DE1B71EXAMPLE> e <region-code> con i valori restituiti nella fase precedente.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<111122223333>:oidc-provider/oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringLike": { "oidc.eks.region-code.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-*", "oidc.eks.region-code.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com" } } } ] }
    2. Creare il ruolo.

      aws iam create-role \ --role-name $role_name \ --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy.json"
  3. Collega la policy gestita da AWS richiesta al ruolo utilizzando il comando seguente.

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \ --role-name $role_name

Fase 2: ottenere il driver CSI per Amazon EFS

Consigliamo di installare il driver Amazon EFS CSI attraverso il componente aggiuntivo di Amazon EKS. Per aggiungere un componente aggiuntivo di Amazon EKS al cluster, consulta Creare un componente aggiuntivo Amazon EKS. Per ulteriori informazioni sui componenti aggiuntivi, consulta Componenti aggiuntivi Amazon EKS. Se non è possibile utilizzare il componente aggiuntivo di Amazon EKS, si consiglia di segnalare il problema nel repository GitHub delle roadmap dei container.

Importante

Prima di aggiungere il driver Amazon EFS come componente aggiuntivo di Amazon EKS, verificare che nel cluster non sia installata una versione autogestita del driver. In tal caso, consultare la pagina Uninstalling the Amazon EFS CSI Driver su GitHub.

In alternativa, se si desidera un’installazione autogestita del driver CSI per Amazon EFS, consultare la pagina Installation su GitHub.

Fase 3: Creazione di un file system Amazon EFS

Per creare un file system Amazon EFS, consulta Creazione di un file system Amazon EFS per Amazon EKS su GitHub.

Fase 4: implementazione di un’applicazione di esempio

Puoi distribuire diverse app di esempio e modificarle in base alle tue esigenze. Per ulteriori informazioni, consulta Esempu su GitHub.