View a markdown version of this page

Usa lo storage del file system Amazon S3 con il driver CSI Amazon EFS - 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 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à.

Usa lo storage del file system Amazon S3 con il driver CSI Amazon EFS

S3 Files è un file system condiviso che collega qualsiasi AWS elaborazione direttamente ai tuoi dati in Amazon S3. Fornisce un accesso rapido e diretto a tutti i dati S3 sotto forma di file con semantica completa del file system e prestazioni a bassa latenza, senza che i dati escano mai da S3. Ciò significa che le applicazioni, gli agenti e i team basati su file possono accedere e lavorare con i dati S3 come file system utilizzando gli strumenti da cui già dipendono. Il driver Amazon EFS Container Storage Interface (CSI) consente ai cluster Kubernetes in esecuzione di montare i file system AWS Amazon S3 come volumi persistenti a partire dalla versione 3.0.0. Questo argomento mostra come utilizzare il driver CSI di Amazon EFS per gestire il file system Amazon S3 sul cluster Amazon EKS.

Considerazioni

Prerequisiti

  • Il driver CSI Amazon EFS necessita delle autorizzazioni AWS Identity and Access Management (IAM).

  • Versione 2.12.3 o successiva o versione 1.27.160 o successiva dell'interfaccia a riga di AWS comando (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 gestori di pacchetti come yumapt-get, o Homebrew per macOS sono spesso diverse versioni dell'ultima versione della CLI AWS . Per installare la versione più recente, consulta Installazione e configurazione rapida con aws configure nella Guida per l'utente dell'interfaccia a riga di AWS comando. La versione AWS CLI installata in AWS CloudShell potrebbe anche contenere diverse versioni precedenti alla versione più recente. Per aggiornarlo, consulta Installazione della AWS CLI nella tua home directory nella Guida per l' AWS CloudShell utente.

  • Lo strumento a riga di comando kubectl è installato sul dispositivo o AWS CloudShell. La versione può essere uguale oppure immediatamente precedente o successiva alla versione di 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:

Fase 1: Creare ruoli IAM

Il driver CSI per Amazon EFS richiede le autorizzazioni IAM per interagire con il file system. Il driver EFS CSI utilizza due account di servizio con ruoli IAM separati:

  • efs-csi-controller-sa— utilizzato dal controller, richiedeAmazonS3FilesCSIDriverPolicy.

  • efs-csi-node-sa— usato dal nodo daemonset, richiede:

    • AmazonS3ReadOnlyAccess— consente lo streaming di letture direttamente dal bucket S3 per un throughput più elevato.

    • AmazonElasticFileSystemsUtils— consente la pubblicazione dei log di efs-utils su CloudWatch Amazon per la visibilità delle operazioni di montaggio e una risoluzione più semplice dei problemi.

Nota

Se desideri utilizzare sia il file system Amazon S3 che lo storage Amazon EFS, devi collegare sia le policy gestite che le policy AmazonEFSCSIDriverPolicy gestite al ruolo di controller. AmazonS3FilesCSIDriverPolicy Per ulteriori informazioni sullo storage Amazon EFS, consultaUtilizzo dell’archiviazione di file system elastici con Amazon EFS.

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, consulta Set up driver permission su GitHub.

eksctl

Se si utilizza Pod Identity

Esegui i seguenti comandi per creare ruoli IAM e associazioni di identità Pod coneksctl. Sostituisci my-cluster con il tuo valore.

export cluster_name=my-cluster # Create the controller role eksctl create podidentityassociation \ --service-account-name efs-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name AmazonEKS_EFS_CSI_ControllerRole \ --permission-policy-arns arn:aws: iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy # Create the node role eksctl create podidentityassociation \ --service-account-name efs-csi-node-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name AmazonEKS_EFS_CSI_NodeRole \ --permission-policy-arns arn:aws: iam::aws:policy/AmazonS3ReadOnlyAccess,arn:aws: iam::aws:policy/AmazonElasticFileSystemsUtils

Se si utilizzano ruoli IAM per gli account di servizio

Esegui i seguenti comandi per creare ruoli IAM coneksctl. Sostituiscilo my-cluster con il nome del cluster e region-code con il codice AWS regionale.

export cluster_name=my-cluster export region_code=region-code # Create the controller role export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole eksctl create iamserviceaccount \ --name efs-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name $controller_role_name \ --attach-policy-arn arn:aws: iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \ --approve \ --region $region_code # Create the node role export node_role_name=AmazonEKS_EFS_CSI_NodeRole eksctl create iamserviceaccount \ --name efs-csi-node-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name $node_role_name \ --attach-policy-arn arn:aws: iam::aws:policy/AmazonS3ReadOnlyAccess \ --attach-policy-arn arn:aws: iam::aws:policy/AmazonElasticFileSystemsUtils \ --approve \ --region $region_code

Console di gestione AWS

Esegui quanto segue per creare un ruolo IAM con Console di gestione AWS.

  1. Apri 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à affidabile, scegli AWS servizio.

      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 AmazonS3FilesCSIDriverPolicy.

    2. Seleziona la casella di controllo a sinistra della politica restituita nella ricerca.

    3. Scegli Next (Successivo).

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

    1. Per Nome ruolo, inserisci un nome univoco per il ruolo, ad esempio AmazonEKS_EFS_CSI_ControllerRole.

    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 Tagging IAM resources 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. Scegliere 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).

      10. Ripeti i passaggi precedenti per creare un secondo ruolo per l'account del servizio del nodo. Nella pagina Aggiungi autorizzazioni, allega AmazonS3ReadOnlyAccess e AmazonElasticFileSystemsUtils invece. Quindi crea un'associazione Pod Identity con efs-csi-node-sa per il campo dell'account del servizio Kubernetes.

    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. <region-code>Sostituiscilo con la AWS regione 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-controller-sa",
      4. Scegli Aggiorna policy per concludere.

      5. Ripeti i passaggi precedenti per creare un secondo ruolo per l'account del servizio del nodo. Nella pagina Aggiungi autorizzazioni, allega AmazonS3ReadOnlyAccess e AmazonElasticFileSystemsUtils invece. Nella politica di attendibilità, utilizza efs-csi-node-sa il valore della :sub condizione.

AWS CLI

Esegui i seguenti comandi per creare ruoli 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.

      export cluster_name=my-cluster export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole aws iam create-role \ --role-name $controller_role_name \ --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy-pod-identity.json"
  2. Allega la policy AWS gestita richiesta al ruolo del controller.

    aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \ --role-name $controller_role_name
  3. Crea il ruolo IAM del nodo utilizzando la stessa policy di fiducia.

    export node_role_name=AmazonEKS_EFS_CSI_NodeRole aws iam create-role \ --role-name $node_role_name \ --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy-pod-identity.json"
  4. Allega le politiche AWS gestite richieste al ruolo del nodo.

    aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/AmazonS3ReadOnlyAccess \ --role-name $node_role_name aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/AmazonElasticFileSystemsUtils \ --role-name $node_role_name
  5. Esegui i seguenti comandi per creare le associazioni Pod Identity. Sostituisci <111122223333> con l'ID del tuo account.

    aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/$controller_role_name --namespace kube-system --service-account efs-csi-controller-sa
    aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/$node_role_name --namespace kube-system --service-account efs-csi-node-sa
  6. 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.

    export cluster_name=my-cluster 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 per l'account del servizio controller.

    1. Copia i seguenti contenuti in un file denominato controller-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": { "StringEquals": { "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com", "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa" } } } ] }
    2. Creare il ruolo.

      export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole aws iam create-role \ --role-name $controller_role_name \ --assume-role-policy-document file://"controller-trust-policy.json"
  3. Allega la policy AWS gestita richiesta al ruolo del controller.

    aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \ --role-name $controller_role_name
  4. Crea il ruolo IAM per l'account del servizio del nodo.

    1. Copia i seguenti contenuti in un file denominato node-trust-policy.json. Sostituisci <111122223333> con l'ID del tuo account. Sostituisci <EXAMPLED539D4633E53DE1B71EXAMPLE> e <region-code> con i valori restituiti nel passaggio 1.

      { "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": { "StringEquals": { "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-node-sa", "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com" } } } ] }
    2. Crea il ruolo.

      export node_role_name=AmazonEKS_EFS_CSI_NodeRole aws iam create-role \ --role-name $node_role_name \ --assume-role-policy-document file://"node-trust-policy.json"
  5. Allega le politiche AWS gestite richieste al ruolo del nodo.

    aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/AmazonS3ReadOnlyAccess \ --role-name $node_role_name aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/AmazonElasticFileSystemsUtils \ --role-name $node_role_name
Nota

La AmazonS3ReadOnlyAccess policy garantisce l'accesso in lettura a tutti i bucket S3. Per limitare l'accesso a bucket specifici, puoi scollegarlo e sostituirlo con una policy in linea basata su tag. Per ulteriori dettagli, consulta la documentazione della policy IAM del driver CSI GitHub di Amazon EFS.

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 riesci a utilizzare il componente aggiuntivo Amazon EKS, ti consigliamo di segnalare un problema sul motivo per cui non puoi farlo all'archivio della roadmap GitHub di Containers.

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, consulta Disinstallazione del driver Amazon EFS CSI su. GitHub

In alternativa, se desideri un'installazione autogestita del driver Amazon EFS CSI, consulta Installazionesu GitHub.

Fase 3: creare un file system Amazon S3

Per creare un file system Amazon S3, consulta Creare un file system Amazon S3 per Amazon EKS su. GitHub

Fase 4: implementazione di un’applicazione di esempio

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