Utilisation du stockage en système de fichiers Elastic avec Amazon EFS - Amazon EKS

Aidez à améliorer cette page

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

Utilisation du stockage en système de fichiers Elastic avec Amazon EFS

Amazon Elastic File System (Amazon EFS) fournit un stockage de fichiers entièrement élastique sans serveur pour vous permettre de partager des données de fichiers sans provisionner ni gérer la capacité et les performances de stockage. Le pilote Amazon EFS Container Storage Interface (CSI) fournit une interface CSI qui permet aux clusters Kubernetes fonctionnant sur AWS de gérer le cycle de vie des systèmes de fichiers Amazon EFS. Cette rubrique vous montre comment déployer le pilote Amazon EFS CSI dans votre cluster Amazon EKS.

Considérations

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

  • Vous ne pouvez pas utiliser l’approvisionnement dynamique pour les volumes persistants avec les nœuds Fargate, mais vous pouvez utiliser l’approvisionnement statique.

  • L’approvisionnement dynamique nécessite la version 1.2 ou ultérieure du pilote. Vous pouvez utiliser l’approvisionnement statique pour les volumes persistants à l’aide de la version 1.1 du pilote sur n’importe quelle version de cluster Amazon EKS prise en charge (voir Versions Amazon EKS prises en charge).

  • La version 1.3.2 ou ultérieure de ce pilote prend en charge l’architecture Arm64, y compris les instances basées sur Amazon EC2 Graviton.

  • Les versions 1.4.2 et ultérieures de ce pilote prennent en charge l’utilisation de FIPS pour le montage de systèmes de fichiers.

  • Prenez note des quotas de ressources pour Amazon EFS. Par exemple, un quota de 1 000 points d’accès peut être créé pour chaque système de fichiers Amazon EFS. Pour plus d'informations, consultez les quotas de ressources Amazon EFS que vous ne pouvez pas modifier.

  • À partir de la version 2.0.0, ce pilote est passé de l’utilisation de stunnel à celle de efs-proxy pour les connexions TLS. Lorsque efs-proxy est utilisé, il ouvre un nombre de threads égal à un plus le nombre de cœurs pour le nœud sur lequel il s’exécute.

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

Prérequis

  • Le pilote CSI Amazon EFS nécessite des autorisations de gestion des identités et des accès (IAM) AWS.

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

  • L’outil de ligne de commande kubectl est installé sur votre appareil ou dans 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.

Note

Un Pod fonctionnant sur Fargate monte automatiquement un système de fichiers Amazon EFS, sans nécessiter d’étapes manuelles d’installation de pilotes.

Étape 1 : Créer un rôle IAM

Le pilote CSI Amazon EFS nécessite des autorisations IAM pour interagir avec votre système de fichiers. Créez un rôle IAM et attachez-y la politique gérée AWS requise. 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 d’informations sur les installations autogérées, consultez la section Configurer les autorisations du pilote sur GitHub.

eksctl

Si vous utilisez les identités du pod

Exécutez les commandes suivantes pour créer un rôle IAM et une association d’identité de pod avec eksctl. Remplacez my-cluster par le nom de votre cluster. Vous pouvez aussi remplacer AmazonEKS_EFS_CSI_DriverRole par un nom différent.

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

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

Exécutez les commandes suivantes pour créer un rôle IAM avec eksctl. Remplacez my-cluster par le nom de votre cluster. Vous pouvez aussi remplacer AmazonEKS_EFS_CSI_DriverRole par un nom différent.

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"

AWS Management Console

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

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

  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. Sous la section Type d’entité de confiance, sélectionnez Service AWS.

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

    2. Cochez la case à gauche du AmazonEFSCSIDriverPolicy renvoyé dans 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_DriverRole.

    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. Sélectionnez 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éer une association d’identité du pod (console AWS).

    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 région AWS 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-*",
      4. Modifiez l'opérateur Condition de "StringEquals" en "StringLike".

      5. Sélectionnez Update Trust Policy (Mettre à jour la politique d'approbation) pour terminer.

AWS CLI

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

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. Vous pouvez aussi remplacer AmazonEKS_EFS_CSI_DriverRole par un nom différent.

      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. Exécutez la commande suivante pour attacher la politique gérée AWS à votre rôle.

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \ --role-name $role_name
  3. Exécutez la commande suivante pour créer l’association d’identité de pod. Remplacer arn:aws:iam::<111122223333>:role/my-role par le rôle créé lors des étapes précédentes.

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

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. Vous pouvez aussi remplacer AmazonEKS_EFS_CSI_DriverRole par un nom différent.

    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

    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 qui accorde l'action AssumeRoleWithWebIdentity.

    1. Copiez le contenu suivant dans un fichier nommé aws-efs-csi-driver-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": { "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. Créez le rôle.

      aws iam create-role \ --role-name $role_name \ --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy.json"
  3. Exécutez la commande suivante pour attacher la politique gérée AWS à votre rôle.

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

É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 pouvez pas utiliser le module complémentaire Amazon EKS, nous vous encourageons à signaler un problème expliquant pourquoi vous ne pouvez pas le faire dans le référentiel GitHub de la feuille de route des 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. Si tel est le cas, consultez la section Désinstallation du pilote CSI Amazon EFS sur GitHub.

Sinon, si vous souhaitez installer vous-même le pilote CSI Amazon EFS, consultez la section Installation sur GitHub.

Étape 3 : Créer un système de fichiers Amazon EFS

Pour créer un système de fichiers Amazon EFS, consultez la section Créer un système de fichiers Amazon EFS 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.