View a markdown version of this page

Utiliser le stockage du système de fichiers Amazon S3 avec le pilote Amazon EFS CSI - Amazon EKS

Aidez à améliorer cette page

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Pour contribuer à ce guide de l'utilisateur, cliquez sur le GitHub lien Modifier cette page sur qui se trouve dans le volet droit de chaque page.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utiliser le stockage du système de fichiers Amazon S3 avec le pilote Amazon EFS CSI

S3 Files est un système de fichiers partagé qui connecte n'importe AWS quel ordinateur directement à vos données dans Amazon S3. Il fournit un accès rapide et direct à toutes vos données S3 sous forme de fichiers avec une sémantique complète du système de fichiers et des performances à faible latence, sans que vos données ne quittent S3. Cela signifie que les applications basées sur des fichiers, les agents et les équipes peuvent accéder aux données S3 et les utiliser en tant que système de fichiers à l'aide des outils dont ils dépendent déjà. Le pilote Amazon EFS Container Storage Interface (CSI) permet aux clusters Kubernetes exécutés dessus de monter des systèmes de fichiers AWS Amazon S3 en tant que volumes persistants à partir de la version 3.0.0. Cette rubrique explique comment utiliser le pilote Amazon EFS CSI pour gérer le système de fichiers Amazon S3 sur votre cluster Amazon EKS.

Considérations

  • Le pilote Amazon EFS CSI n’est pas compatible avec les images de conteneurs basées sur Windows.

  • EKS Fargate ne prend pas en charge les fichiers S3.

  • Le pilote CSI Amazon EFS n’est pas compatible avec les nœuds Amazon EKS.

  • La prise en charge des fichiers Amazon S3 dans le pilote Amazon EFS CSI commence à partir de la version 3.0.0.

Conditions préalables

  • Le pilote Amazon EFS CSI nécessite des autorisations AWS Identity and Access Management (IAM).

  • Version 2.12.3 ou version ultérieure 1.27.160 ou version ultérieure de l'interface de ligne de AWS commande (AWS CLI) installée et configurée sur votre appareil ou AWS CloudShell. Pour vérifier votre version actuelle, utilisez aws --version | cut -d / -f2 | cut -d ' ' -f1. Les gestionnaires de packages tels que yumapt-get, ou Homebrew pour macOS ont souvent plusieurs versions de retard sur la dernière version de la AWS CLI. Pour installer la dernière version, consultez la section Installation et configuration rapide avec aws configure dans le Guide de l'utilisateur de l'interface de ligne de AWS commande. La version de la AWS CLI installée AWS CloudShell peut également avoir plusieurs versions de retard par rapport à la dernière version. Pour le mettre à jour, consultez la section Installation de la AWS CLI dans votre répertoire de base dans le guide de AWS CloudShell l'utilisateur.

  • L'outil de ligne de commande kubectl est installé sur votre appareil ou AWS CloudShell. La version peut correspondre à celle utilisée par votre cluster Kubernetes, ou différer d’au plus une version mineure, qu’elle soit antérieure ou plus récente. Par exemple, si la version de votre cluster est 1.29, vous pouvez utiliser la version kubectl 1.28, 1.29 ou 1.30. Pour installer ou mettre à niveau kubectl, veuillez consulter Configuration de kubectl et eksctl.

Étape 1 : créer des rôles IAM

Le pilote CSI Amazon EFS nécessite des autorisations IAM pour interagir avec votre système de fichiers. Le pilote EFS CSI utilise deux comptes de service dotés de rôles IAM distincts :

  • efs-csi-controller-sa— utilisé par le contrôleur, nécessiteAmazonS3FilesCSIDriverPolicy.

  • efs-csi-node-sa— utilisé par le nœud daemonset, nécessite :

    • AmazonS3ReadOnlyAccess— permet de diffuser des lectures directement depuis votre compartiment S3 pour un débit plus élevé.

    • AmazonElasticFileSystemsUtils— permet de publier les journaux efs-utils sur Amazon CloudWatch pour avoir une visibilité sur les opérations de montage et faciliter le dépannage.

Note

Si vous souhaitez utiliser à la fois le système de fichiers Amazon S3 et le AmazonS3FilesCSIDriverPolicy stockage Amazon EFS, vous devez associer les politiques AmazonEFSCSIDriverPolicy gérées au rôle de contrôleur. Pour plus d'informations sur le stockage Amazon EFS, consultezUtilisation du stockage en système de fichiers Elastic avec Amazon EFS.

Pour mettre en œuvre cette procédure, vous pouvez utiliser l’un des outils suivants :

Note

Les étapes spécifiques de cette procédure sont destinées à l'utilisation du pilote en tant que module complémentaire d'Amazon EKS. Pour plus de détails sur les installations autogérées, voir Configurer l'autorisation du pilote sur GitHub.

eksctl

Si vous utilisez les identités du pod

Exécutez les commandes suivantes pour créer des rôles IAM et des associations Pod Identity aveceksctl. Remplacez my-cluster par votre valeur.

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

Si vous utilisez des rôles IAM pour des comptes de service

Exécutez les commandes suivantes pour créer des rôles IAM aveceksctl. my-clusterRemplacez-le par le nom de votre cluster et region-code par votre code de AWS région.

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

AWS Management Console

Exécutez la commande suivante pour créer un rôle IAM avec AWS Management Console.

  1. Ouvrez la console IAM à https://console.aws.amazon.com/iam/ l'adresse.

  2. Dans le volet de navigation de gauche, choisissez Rôles.

  3. Sur la page Rôles, choisissez Créer un rôle.

  4. Sur la page Select trusted entity (Sélectionner une entité de confiance), procédez comme suit :

    1. Si vous utilisez les identités de pod EKS :

      1. Dans la section Type d'entité fiable, sélectionnez AWS service.

      2. Dans le menu déroulant Service ou cas d’utilisation, sélectionnez EKS.

      3. Dans la section Cas d’utilisation, sélectionnez EKS – Identité du pod.

      4. Choisissez Suivant.

    2. Si vous utilisez des rôles IAM pour des comptes de service :

      1. Dans la section Trusted entity type (Type d'entité de confiance), sélectionnez Web identity (Identité web).

      2. Pour Fournisseur d'identité, choisissez l'URL du fournisseur OpenID Connect pour votre cluster (comme indiqué sous Présentation dans Amazon EKS).

      3. Pour Audience, choisissez sts.amazonaws.com.

      4. Choisissez Suivant.

  5. Sur la page Add permissions (Ajouter des autorisations), procédez comme suit :

    1. Dans la zone Filter policies (Politiques de filtre), saisissez AmazonS3FilesCSIDriverPolicy.

    2. Cochez la case située à gauche de la politique renvoyée lors de la recherche.

    3. Choisissez Suivant.

  6. Sur la page Name, review, and create (Nommer, vérifier et créer), procédez comme suit :

    1. Pour Role name (Nom de rôle), saisissez un nom unique pour votre rôle, par exemple, AmazonEKS_EFS_CSI_ControllerRole.

    2. Sous Ajouter des balises (Facultatif), ajoutez des métadonnées au rôle en attachant les identifications sous forme de paires clé-valeur. Pour plus d'informations sur l'utilisation des balises dans IAM, consultez la rubrique Balisage des ressources IAM dans le Guide de l'utilisateur IAM.

    3. Choisissez Créer un rôle.

  7. Une fois le rôle créé :

    1. Si vous utilisez les identités de pod EKS :

      1. Ouvrez la console Amazon EKS.

      2. Dans le volet de navigation gauche, sélectionnez Clusters, puis sélectionnez le nom du cluster pour lequel vous souhaitez configurer l’association d’identité de pod EKS.

      3. Choisissez l’onglet Access.

      4. Dans Associations d’identité du pod, sélectionnez Créer.

      5. Choisissez la liste déroulante du rôle IAM et sélectionnez le rôle que vous venez de créer.

      6. Sélectionnez le champ Espace de noms Kubernetes et saisissez kube-system.

      7. Sélectionnez le champ Compte de service Kubernetes et saisissez efs-csi-controller-sa.

      8. Choisissez Créer.

      9. Pour plus d’informations sur la création d’associations d’identités de pod, consultez Création d'une association Pod Identity (AWS console).

      10. Répétez les étapes ci-dessus pour créer un deuxième rôle pour le compte de service du nœud. Sur la page Ajouter des autorisations, joignez AmazonS3ReadOnlyAccess et à la AmazonElasticFileSystemsUtils place. Créez ensuite une association Pod Identity avec efs-csi-node-sa pour le champ du compte de service Kubernetes.

    2. Si vous utilisez des rôles IAM pour des comptes de service :

      1. Choisissez le rôle pour l’ouvrir en vue de le modifier.

      2. Sélectionnez l'onglet Trust relationships (Relations d'approbation), puis Edit trust policy (Modifier la politique d'approbation).

      3. Trouvez la ligne qui ressemble à la ligne suivante :

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

        Ajoutez la ligne suivante au-dessus de la ligne précédente. Remplacez <region-code> par la AWS région dans laquelle se trouve votre cluster. Remplacez <EXAMPLED539D4633E53DE1B71EXAMPLE> par l’ID du fournisseur OIDC de votre cluster.

        "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa",
      4. Sélectionnez Update Trust Policy (Mettre à jour la politique d'approbation) pour terminer.

      5. Répétez les étapes ci-dessus pour créer un deuxième rôle pour le compte de service du nœud. Sur la page Ajouter des autorisations, joignez AmazonS3ReadOnlyAccess et à la AmazonElasticFileSystemsUtils place. Dans la politique de confiance, utilisez efs-csi-node-sa pour la valeur de la :sub condition.

AWS CLI

Exécutez les commandes suivantes pour créer des rôles IAM avec la AWS CLI.

Si vous utilisez les identités du pod

  1. Créez le rôle IAM qui accorde les actions AssumeRole et TagSession au service pods.eks.amazonaws.com.

    1. Copiez le contenu suivant dans un fichier nommé 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. Créez le rôle. Remplacez my-cluster par le nom de votre 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. Associez la politique AWS gérée requise au rôle de contrôleur.

    aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \ --role-name $controller_role_name
  3. Créez le rôle IAM du nœud en utilisant la même politique de confiance.

    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. Associez les politiques AWS gérées requises au rôle de nœud.

    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. Exécutez les commandes suivantes pour créer les associations Pod Identity. Remplacez <111122223333> par votre ID de compte.

    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. Pour plus d’informations sur la création d’associations d’identités de pod, consultez Création d'une association Pod Identity (AWS console).

Si vous utilisez des rôles IAM pour des comptes de service

  1. Affichez l’URL du fournisseur OIDC de votre cluster. Remplacez my-cluster par le nom de votre cluster.

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

    L'exemple qui suit illustre un résultat.

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

    Si la sortie de la commande est None, consultez Prérequis.

  2. Créez le rôle IAM pour le compte de service du contrôleur.

    1. Copiez le contenu suivant dans un fichier nommé controller-trust-policy.json. Remplacez <111122223333> par votre ID de compte. Remplacez <EXAMPLED539D4633E53DE1B71EXAMPLE> et <region-code> par les valeurs renvoyées par l'étape précédente.

      { "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. Créez le rôle.

      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. Associez la politique AWS gérée requise au rôle de contrôleur.

    aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \ --role-name $controller_role_name
  4. Créez le rôle IAM pour le compte de service du nœud.

    1. Copiez le contenu suivant dans un fichier nommé node-trust-policy.json. Remplacez <111122223333> par votre ID de compte. Remplacez <EXAMPLED539D4633E53DE1B71EXAMPLE> et <region-code> par les valeurs renvoyées à l'étape 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. Créez le rôle.

      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. Associez les politiques AWS gérées requises au rôle de nœud.

    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
Note

La AmazonS3ReadOnlyAccess politique accorde un accès en lecture à tous les compartiments S3. Pour restreindre l'accès à des compartiments spécifiques, vous pouvez les détacher et les remplacer par une politique intégrée basée sur des balises. Consultez la documentation relative à la politique IAM du pilote Amazon EFS CSI GitHub pour plus de détails.

Étape 2 : obtenir le pilote CSI Amazon EFS

Nous vous recommandons d'installer le pilote CSI Amazon EFS en utilisant le module complémentaire Amazon EKS. Pour ajouter un module complémentaire Amazon EKS à votre cluster, voir Créer un module complémentaire Amazon EKS. Pour plus d'informations sur les modules complémentaires, voir Modules complémentaires Amazon EKS. Si vous ne parvenez pas à utiliser le module complémentaire Amazon EKS, nous vous encourageons à signaler les raisons pour lesquelles vous ne pouvez pas utiliser le module complémentaire Amazon EKS dans le GitHub référentiel de feuilles de route pour les conteneurs.

Important

Avant d’ajouter le pilote Amazon EFS en tant que module complémentaire Amazon EKS, vérifiez qu’aucune version autogérée du pilote n’est déjà installée sur votre cluster. Dans ce cas, consultez la section Désinstallation du pilote Amazon EFS CSI sur. GitHub

Sinon, si vous souhaitez une installation autogérée du pilote CSI Amazon EFS, voir Installation sur GitHub.

Étape 3 : Création d'un système de fichiers Amazon S3

Pour créer un système de fichiers Amazon S3, consultez Créer un système de fichiers Amazon S3 pour Amazon EKS sur GitHub.

Étape 4 : déployer un exemple d’application

Vous pouvez déployer une variété d'applications types et les modifier selon vos besoins. Pour plus d'informations, consultez la section Exemples sur GitHub.