Passer au contenu

Comment utiliser le stockage persistant dans Amazon EKS ?

Lecture de 9 minute(s)
0

Je souhaite utiliser le stockage persistant dans Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Pour utiliser le stockage permanent dans Amazon EKS, suivez les étapes correspondant à l'une des méthodes suivantes :

Remarque : Pour des raisons de sécurité et d'efficacité, il est recommandé d'installer le pilote CSI via un module complémentaire Amazon EKS. Il est également recommandé d'installer la version la plus récente des pilotes. Pour les étapes d'installation et la dernière version du pilote, consultez la page aws-ebs-csi-driver ou aws-efs-csi-driver sur le site Web de GitHub.

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Prérequis :

  • Configurez une version de kubectl qui correspond à votre version de Kubernetes. Pour plus d'informations sur les exigences en matière d’asymétrie de version, consultez la page kubectl sur le site Web de Kubernetes.

  • Installez ou mettez à jour eksctl. Pour obtenir des instructions, consultez la page Installation sur le site Web d'eksctl.

  • Configurez les autorisations Créer de Gestion des identités et des accès AWS (AWS IAM). Puis, associez la politique au rôle de pilote CSI ou au rôle de composant master Amazon EKS.

  • Créez votre cluster Amazon EKS, puis joignez-y vos composants master. Pour vérifier que vous avez associé vos composants master à votre cluster, exécutez la commande suivante :

    kubectl get nodes
  • Pour vérifier qu'un fournisseur IAM OpenID Connect (OIDC) existe pour votre cluster, exécutez la commande describe-cluster de l’AWS CLI suivante :

    aws eks describe-cluster
     --name your_cluster_name
     --query "cluster.identity.oidc.issuer"
     --output text

    Remarque : Remplacez your_cluster_name par le nom de votre cluster.

  • Pour vérifier que vous avez configuré votre fournisseur OIDC IAM, exécutez la commande list-open-id-connect-providers suivante :

    aws iam list-open-id-connect-providers | grep OIDC-ID

    Remarque : Remplacez OIDC-ID par l'ID de votre fournisseur OIDC. Si vous recevez un message d’erreur , créez un fournisseur OIDC IAM"No OpenIDConnect provider found in your account".

Pilote CSI Amazon EBS

Pour déployer le pilote Amazon EBS CSI, procédez comme suit :

  1. Créez un fichier de politique d’approbation IAM selon l’exemple suivant :

    cat <<EOF > trust-policy.json
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "arn:aws:iam::YOUR_AWS_ACCOUNT_ID:oidc-provider/oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID:aud": "sts.amazonaws.com",
              "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa"
            }
          }
        }
      ]
    }
    EOF

    Remarque : Remplacez YOUR_AWS_ACCOUNT_ID par l’ID de votre compte AWS, YOUR_AWS_REGION par votre région AWS et OIDC-ID par l’ID de votre fournisseur OIDC.

  2. Pour créer un rôle IAM nommé AmazonEKS_EBS_CSI_DriverRole, exécutez la commande create-role suivante :

    aws iam create-role
     --role-name AmazonEKS_EBS_CSI_DriverRole
     --assume-role-policy-document file://"trust-policy.json"
  3. Pour associer la politique IAM gérée par AWS du pilote CSI au rôle IAM, exécutez la commande attach-role-policy suivante :

    aws iam attach-role-policy
    --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy
    --role-name AmazonEKS_EBS_CSI_DriverRole
  4. Pour déployer le pilote CSI Amazon EBS, utilisez Kustomize, Helm ou un module complémentaire géré par Amazon EKS. Pour les instructions de déploiement, consultez la page Installation sur le site Web de GitHub.

  5. Testez votre pilote Amazon EBS CSI à l'aide d'un exemple d'application qui utilise le provisionnement dynamique pour les pods. Le pilote CSI Amazon EBS provisionne les volumes EBS à la demande.

Pilote CSI Amazon EFS

Créer un rôle IAM pour le pilote CSI

Procédez comme suit pour un cluster contenant des composants master :

  1. Pour utiliser AmazonEFSCSIDriverPolicy, consultez la section En cas d’utilisation de rôles IAM pour les comptes de service. Puis, passez à l'étape 7.
    Vous pouvez également exécuter la commande suivante pour télécharger le document de politique IAM depuis GitHub :

    curl -o iam-policy-example.json https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/docs/iam-policy-example.json
  2. Pour créer une politique IAM, exécutez la commande create-policy suivante :

    aws iam create-policy
        --policy-name AmazonEKS_EFS_CSI_Driver_Policy
        --policy-document file://iam-policy-example.json
  3. Pour déterminer l'ID du fournisseur OIDC de votre cluster, exécutez la commande describe-cluster suivante :

    aws eks describe-cluster
     --name your_cluster_name
     --query "cluster.identity.oidc.issuer"
     --output text

    Remarque : Remplacez your_cluster_name par le nom de votre cluster.

  4. Créez la politique d’approbation IAM suivante, puis accordez l’action AssumeRoleWithWebIdentity à votre compte de service Kubernetes :

    cat <<EOF > trust-policy.json{
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "arn:aws:iam::YOUR_AWS_ACCOUNT_ID:oidc-provider/oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa"
            }
          }
        }
      ]
    }
    EOF

    Remarque : Remplacez YOUR_AWS_ACCOUNT_ID par votre ID de compte, YOUR_AWS_REGION par votre région et OIDC-ID par l'ID du fournisseur OIDC de votre cluster.

  5. Pour créer un rôle IAM, exécutez la commande create-role suivante :

    aws iam create-role
      --role-name AmazonEKS_EFS_CSI_DriverRole
      --assume-role-policy-document file://"trust-policy.json"
  6. Pour associer votre nouvelle politique IAM au rôle, exécutez la commande attach-role-policy suivante :

    aws iam attach-role-policy
      --policy-arn arn:aws:iam::AWS_ACCOUNT_ID:policy/AmazonEKS_EFS_CSI_Driver_Policy
      --role-name AmazonEKS_EFS_CSI_DriverRole

    Remarque : Remplacez YOUR_AWS_ACCOUNT_ID par l’ID de votre compte AWS.

  7. Si vous utilisez un module complémentaire géré, passez à la section Déployer le pilote CSI Amazon EFS. Pour installer un pilote autogéré, suivez les étapes 7 à 10. Enregistrez le contenu suivant dans un fichier YAML nommé efs-service-account.yaml :

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      labels:
        app.kubernetes.io/name: aws-efs-csi-driver
      name: efs-csi-controller-sa
      namespace: kube-system
      annotations:
        eks.amazonaws.com/role-arn: arn:aws:iam::AWS_ACCOUNT_ID:role/AmazonEKS_EFS_CSI_DriverRole

    Remarque : Remplacez YOUR_AWS_ACCOUNT_ID par l’ID de votre compte AWS.

  8. Pour créer le compte de service Kubernetes sur votre cluster, exécutez la commande suivante :

    kubectl apply -f efs-service-account.yaml

    Remarque : Le compte de service Kubernetes efs-csi-controller-sa contient l'annotation du rôle IAM que vous avez créé.

  9. Pour télécharger le manifeste depuis le registre Amazon Elastic Container Registry (Amazon ECR) public, exécutez la commande suivante :

    kubectl kustomize "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-VERSION" > public-ecr-driver.yaml

    Remarque : Remplacez VERSION par le numéro de version de votre mise à jour. Il est recommandé d'utiliser la dernière version publiée. Pour obtenir une liste des branches actives, consultez la page Branches sur le site Web de GitHub. Vous pouvez utiliser Helm au lieu de Kustomize pour installer le pilote. Pour connaître les étapes à suivre, consultez la page Déployer le pilote sur le site Web de GitHub.

  10. Modifiez le fichier téléchargé pour supprimer les lignes suivantes :

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/name: aws-efs-csi-driver
  name: efs-csi-controller-sa
  namespace: kube-system

Remarque : Il n'est pas nécessaire d'inclure les lignes précédentes car vous avez déjà créé un compte de service à l'étape 7.

Déployer le pilote CSI Amazon EFS

Pour appliquer le manifeste, exécutez la commande suivante :

kubectl apply -f public-ecr-driver.yaml

Si votre cluster ne contient pas de nœuds et contient uniquement des pods AWS Fargate, exécutez la commande suivante pour déployer le pilote dans toutes les régions :

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/deploy/kubernetes/base/csidriver.yaml

Créer un système de fichiers EFS

Procédez comme suit :

  1. Pour obtenir l'ID du cloud privé virtuel (VPC) de votre cluster Amazon EKS, exécutez la commande describe-cluster suivante :
    aws eks describe-cluster
     --name your_cluster_name
     --query "cluster.resourcesVpcConfig.vpcId"
     --output text
    Remarque : Remplacez your_cluster_name par le nom de votre cluster.
  2. Pour obtenir la plage CIDR de votre cluster de VPC, exécutez la commande describe-vpcs suivante :
    aws ec2 describe-vpcs
     --vpc-ids YOUR_VPC_ID
     --query "Vpcs[].CidrBlock"
     --output text
    Remarque : Remplacez la valeur de YOUR_VPC_ID par l’ID de votre VPC.
  3. Pour créer un groupe de sécurité qui autorise le trafic entrant du système de fichiers réseau (NFS) vers vos points de montage Amazon EFS, exécutez la commande create-security-group suivante :
    aws ec2 create-security-group
     --description efs-test-sg
     --group-name efs-sg
     --vpc-id YOUR_VPC_ID
    Remarque : Remplacez YOUR_VPC_ID par l’ID de votre VPC. Dans la sortie, notez la valeur de GroupId.
  4. Pour autoriser les ressources de votre VPC à communiquer avec votre système de fichiers EFS, exécutez la commande authorize-security-group-ingress suivante pour ajouter une règle entrante NFS :
    aws ec2 authorize-security-group-ingress --group-id sg-abc --protocol tcp --port 2049 --cidr YOUR_VPC_CIDR
    Remarque : Remplacez YOUR_VPC_CIDR par le CIDR de votre VPC et sg-xxx par l'ID de votre groupe de sécurité.
  5. Pour créer un système de fichiers EFS pour votre cluster Amazon EKS, exécutez la commande create-file-system suivante :
    aws efs create-file-system --creation-token eks-efs
    Remarque : Notez le paramètre FileSystemId.
  6. Pour créer une cible de montage pour Amazon EFS, exécutez la commande create-mount-target suivante :
    aws efs create-mount-target --file-system-id FileSystemId --subnet-id SubnetID --security-group sg-abc
    Remarque : Remplacez FileSystemId par l'ID de votre système de fichiers EFS, sg-abc par l'ID de votre groupe de sécurité et SubnetID par l'ID du sous-réseau de votre composant master. Il est recommandé d'exécuter la commande précédente pour chaque zone de disponibilité dans laquelle s'exécutent vos composants master. Toutes les instances Amazon Elastic Compute Cloud (Amazon EC2) appartenant à ces zones de disponibilité peuvent utiliser le système de fichiers. Pour créer des cibles de montage dans plusieurs sous-réseaux, vous devez exécuter la commande pour chaque ID de sous-réseau.

Tester le pilote CSI Amazon EFS

Pour déployer deux pods qui écrivent dans le même fichier, consultez la page Multiple Pods Read Write Many sur le site Web de GitHub.

Informations connexes

Résolution des erreurs de fonctionnement des fichiers liées aux quotas

Pilote CSI Amazon EFS sur le site Web de GitHub

Comment résoudre les problèmes liés aux montages de mes volumes Amazon EFS dans Amazon EKS ?

Comment résoudre les problèmes liés aux montages de mes volumes Amazon EFS dans Amazon EKS ?