Comment puis-je utiliser le stockage persistant dans Amazon EKS ?

Lecture de 8 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 : il est recommandé d'installer la version la plus récente des pilotes. Pour savoir comment installer les derniers pilotes, consultez les pages aws-ebs-csi-driver et 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 page Résoudre les erreurs liées à AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Prérequis :

  • Installez l’AWS CLI.
  • Utilisez kubectl version 1.14 ou ultérieure pour les commandes. Pour en savoir plus, consultez la page Installation ou mise à jour de kubectl.
  • Définissez les autorisations Gestion des identités et des accès AWS (AWS IAM) sur Créer. Ensuite, attachez une politique au rôle de composant master Amazon EKS CSI Driver Role.
  • Créez votre cluster Amazon EKS et joignez-y vos composants master.
    Remarque : exécutez la commande kubectl pour obtenir les nœuds, afin de vérifier que vos composants master sont bien attachés à votre cluster.
  • Pour vérifier l’existence du fournisseur AWS IAM OpenID Connect (OIDC) pour votre cluster, exécutez la commande 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 la configuration de votre fournisseur IAM OIDC, exécutez la commande suivante :
    aws iam list-open-id-connect-providers | grep <ID of the oidc provider>
    Remarque : remplacez ID of the oidc provider par l’ID de votre OIDC. Si le message d’erreur « No OpenIDConnect provider found in your account » s’affiche, vous devez créer un fournisseur IAM OIDC.
  • Installez ou mettez à jour eksctl. Pour obtenir des instructions, consultez la section Installation sur le site Web d'eksctl.
  • Exécutez la commande suivante pour créer un fournisseur IAM OIDC :
    eksctl utils associate-iam-oidc-provider --cluster my-cluster --approve
    Remarque : remplacez my-cluster par le nom de votre cluster.

Pilote CSI Amazon EBS

Déploiement du pilote CSI Amazon EBS

Procédez comme suit :

  1. Créez un fichier de politique de confiance 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/<your OIDC ID>"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>:aud": "sts.amazonaws.com",
              "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>: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 your OIDC ID par l’ID de votre OIDC.

  2. Créez un rôle IAM nommé AmazonEKS_EBS_CSI_DriverRole :

    aws iam create-role
     --role-name AmazonEKS_EBS_CSI_DriverRole
     --assume-role-policy-document file://"trust-policy.json"
  3. Attachez la politique IAM gérée par AWS du pilote au rôle IAM :

    aws iam attach-role-policy
    --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy
    --role-name AmazonEKS_EBS_CSI_DriverRole
  4. Déployez le pilote CSI Amazon EBS.
    Remarque : pour déployer le pilote CSI EBS, vous pouvez utiliser Kustomize, Helm ou un module complémentaire géré par Amazon EKS. Pour obtenir des instructions sur le déploiement du pilote CSI EBS, consultez la page Installation du site Web de GitHub.

Test du pilote CSI Amazon EBS

Testez votre pilote Amazon EBS CSI à l'aide d'un exemple d'application qui utilise le provisionnement dynamique pour les pods. Le volume Amazon EBS est alors provisionné à la demande.

Pilote CSI Amazon EFS

Création d'un rôle IAM pour le pilote CSI

Procédez comme suit :

  1. Téléchargez le document de politique IAM à partir de GitHub :

    curl -o iam-policy-example.json https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/docs/iam-policy-example.json
  2. Créez une politique IAM :

    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 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 de confiance 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/<XXXXXXXXXX45D83924220DC4815XXXXX>"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa"
            }
          }
        }
      ]
    }
    EOF

    Remarque : remplacez YOUR_AWS_ACCOUNT_ID par l’ID de votre compte, YOUR_AWS_REGION par votre région AWS et XXXXXXXXXX45D83924220DC4815XXXXX par l'ID du fournisseur OIDC de votre cluster.

  5. Créez un rôle IAM :

    aws iam create-role
      --role-name AmazonEKS_EFS_CSI_DriverRole
      --assume-role-policy-document file://"trust-policy.json"
  6. Attachez votre nouvelle politique IAM au rôle :

    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
  7. Enregistrez le contenu suivant dans un fichier 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
  8. Créez le compte de service Kubernetes sur votre cluster :

    kubectl apply -f efs-service-account.yaml

    Remarque : le compte de service Kubernetes nommé efs-csi-controller-sa est annoté avec le rôle IAM que vous avez créé.

  9. Téléchargez le manifeste depuis le registre public Amazon ECR et utilisez les images pour installer le pilote :

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

    Remarque : pour installer le pilote CSI EFS, vous pouvez utiliser Helm et Kustomize avec un registre privé ou public AWS. Pour obtenir des instructions sur l'installation du pilote CSI EFS, consultez la page AWS EFS CSI driver sur le site Web de GitHub.

  10. Modifiez le fichier public-ecr-driver.yaml et annotez la section du compte de service Kubernetes efs-csi-controller-sa avec l'ARN du rôle IAM :

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/name: aws-efs-csi-driver
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::<accountid>:role/AmazonEKS\_EFS\_CSI\_DriverRole
  name: efs-csi-controller-sa
  namespace: kube-system

Déploiement du pilote CSI Amazon EFS

Procédez comme suit :

  1. Appliquez le manifeste :

    $ kubectl apply -f public-ecr-driver.yaml
  2. Si votre cluster ne contient que des pods AWS Fargate (sans nœuds), déployez le pilote à l’aide de la commande suivante (pour toutes les régions) :

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

Création d’un système de fichiers Amazon EFS

Procédez comme suit :

  1. Pour obtenir l'ID du cloud privé virtuel (VPC) de votre cluster Amazon EKS, exécutez la commande 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 suivante :
    aws ec2 describe-vpcs --vpc-ids YOUR_VPC_ID --query "Vpcs[].CidrBlock" --output text
    Remarque : remplacez la valeur YOUR_VPC_ID par votre ID de VPC.
  3. Créez un groupe de sécurité qui autorise le trafic entrant du système de fichiers réseau (NFS) de vos points de montage Amazon EFS :
    aws ec2 create-security-group --description efs-test-sg --group-name efs-sg --vpc-id YOUR_VPC_ID
    Remarque : remplacez YOUR_VPC_ID par votre ID de VPC. Notez le GroupId pour pouvoir l’utiliser ultérieurement.
  4. Pour autoriser les ressources de votre VPC à communiquer avec votre système de fichiers Amazon EFS, ajoutez une règle entrante NFS :
    aws ec2 authorize-security-group-ingress --group-id sg-xxx --protocol tcp --port 2049 --cidr YOUR_VPC_CIDR
    Remarque : remplacez YOUR_VPC_CIDR par votre CIDR de VPC et sg-xxx par l'ID de votre groupe de sécurité.
  5. Créez un système de fichiers Amazon EFS pour votre cluster Amazon EKS :
    aws efs create-file-system --creation-token eks-efs
    Remarque : notez le FileSystemId pour pouvoir l’utiliser ultérieurement.
  6. Pour créer une cible de montage pour Amazon EFS, exécutez la commande suivante :
    aws efs create-mount-target --file-system-id FileSystemId --subnet-id SubnetID --security-group sg-xxx
    Important : vous devez exécuter la commande précédente pour toutes les zones de disponibilité avec l’identifiant SubnetID dans la zone de disponibilité où se trouvent vos composants master. Remplacez FileSystemId par l'ID de votre système de fichiers EFS, sg-xxx par l'ID de votre groupe de sécurité et SubnetID par l'ID du sous-réseau de votre composant master. 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. Il est recommandé de créer une cible de montage dans chaque zone de disponibilité où s’exécutent vos composants master. Vous pouvez créer des cibles de montage pour toutes les zones de disponibilité où les composants master sont lancés. Toutes les instances Amazon Elastic Compute Cloud (Amazon EC2) appartenant à ces zones de disponibilité pourront alors utiliser le système de fichiers.

Test du 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 problèmes liés à Amazon EFS