Exécutez des charges de travail dynamiques avec un stockage de données persistant en utilisant Amazon sur EFS Amazon EKS avec Fargate AWS - Recommandations AWS

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.

Exécutez des charges de travail dynamiques avec un stockage de données persistant en utilisant Amazon sur EFS Amazon EKS avec Fargate AWS

Créé par Ricardo Morais (AWS), Rodrigo Bersa (AWS) et Lucio Pereira () AWS

Référentiel de code : Amazon EKS avec Fargate et Amazon EFS

Environnement : PoC ou pilote

Technologies : Conteneurs et microservices ; stockage et sauvegarde

Charge de travail : Open source

AWSservices : Amazon EFS ; Amazon EKS ; AWS Fargate

Récapitulatif

Ce modèle fournit des conseils pour activer Amazon Elastic File System (AmazonEFS) en tant que périphérique de stockage pour les conteneurs qui s'exécutent sur Amazon Elastic Kubernetes Service (EKSAmazon) en AWS utilisant Fargate pour provisionner vos ressources de calcul.

La configuration décrite dans ce modèle suit les meilleures pratiques en matière de sécurité et assure la sécurité au repos et la sécurité en transit par défaut. Pour chiffrer votre système de EFS fichiers Amazon, celui-ci utilise une AWS clé Key Management Service (AWSKMS), mais vous pouvez également spécifier un alias de clé qui gère le processus de création d'une KMS clé.

Vous pouvez suivre les étapes de ce modèle pour créer un espace de noms et un profil Fargate pour proof-of-concept une application (PoC), installer le pilote EFS Amazon Container Storage Interface CSI () utilisé pour intégrer le cluster Kubernetes à EFS Amazon, configurer la classe de stockage et déployer l'application PoC. Ces étapes aboutissent à un système de EFS fichiers Amazon partagé entre plusieurs charges de travail Kubernetes, exécuté sur Fargate. Le modèle est accompagné de scripts qui automatisent ces étapes.

Vous pouvez utiliser ce modèle si vous souhaitez conserver les données dans vos applications conteneurisées et éviter toute perte de données lors des opérations de dimensionnement. Par exemple :

  • DevOps outils — Un scénario courant consiste à développer une stratégie d'intégration et de livraison continues (CI/CD). Dans ce cas, vous pouvez utiliser Amazon EFS comme système de fichiers partagé pour stocker les configurations entre différentes instances de l'outil CI/CD ou pour stocker un cache (par exemple, un référentiel Apache Maven) pour les étapes de pipeline entre les différentes instances de l'outil CI/CD.

  • Serveurs Web — Un scénario courant consiste à utiliser Apache comme serveur HTTP Web. Vous pouvez utiliser Amazon EFS comme système de fichiers partagé pour stocker des fichiers statiques partagés entre différentes instances du serveur Web. Dans cet exemple de scénario, les modifications sont appliquées directement au système de fichiers au lieu d'intégrer des fichiers statiques dans une image Docker.

Conditions préalables et limitations

Prérequis

  • Un AWS compte actif

  • Un EKS cluster Amazon existant avec Kubernetes version 1.17 ou ultérieure (testé jusqu'à la version 1.27)

  • Un système de EFS fichiers Amazon existant pour lier un Kubernetes StorageClass et approvisionner des systèmes de fichiers de manière dynamique

  • Autorisations d'administration du cluster

  • Contexte configuré pour pointer vers le EKS cluster Amazon souhaité

Limites

  • Certaines limites doivent être prises en compte lorsque vous utilisez Amazon EKS avec Fargate. Par exemple, l'utilisation de certaines constructions Kubernetes, telles que les conteneurs privilégiés, n'est DaemonSets pas prise en charge. Pour plus d'informations sur les limites de Fargate, consultez les considérations relatives à AWSFargate dans la documentation Amazon. EKS

  • Le code fourni avec ce modèle prend en charge les postes de travail qui exécutent Linux ou macOS.

Versions du produit

  • AWSInterface de ligne de commande (AWSCLI) version 2 ou ultérieure

  • Amazon EFS CSI Driver version 1.0 ou ultérieure (testé jusqu'à la version 2.4.8)

  • eksctl version 0.24.0 ou ultérieure (testé jusqu'à la version 0.158.0)

  • jq version 1.6 ou ultérieure

  • kubectl version 1.17 ou ultérieure (testé jusqu'à la version 1.27)

  • Kubernetes version 1.17 ou ultérieure (testé jusqu'à la version 1.27)

Architecture

Schéma d'architecture de l'exécution de charges de travail dynamiques avec stockage de données persistant à l'aide d'Amazon EFS

L'architecture cible comprend l'infrastructure suivante :

  • Un cloud privé virtuel (VPC)

  • Deux zones de disponibilité

  • Un sous-réseau public avec une NAT passerelle qui fournit un accès à Internet

  • Un sous-réseau privé avec un EKS cluster Amazon et des cibles de EFS montage Amazon (également appelées points de montage)

  • Amazon EFS au VPC niveau mondial

L'infrastructure environnementale du EKS cluster Amazon est la suivante :

  • AWSProfils Fargate adaptés aux constructions Kubernetes au niveau de l'espace de noms

  • Un espace de noms Kubernetes avec :

    • Deux modules d'applications répartis dans les zones de disponibilité

    • Une réclamation de volume persistant (PVC) liée à un volume persistant (PV) au niveau du cluster

  • Un PV à l'échelle du cluster qui est lié PVC à l'espace de noms et qui pointe vers les cibles de EFS montage Amazon dans le sous-réseau privé, en dehors du cluster

Outils

AWSservices

Autres outils

  • Docker est un ensemble de produits de plateforme en tant que service (PaaS) qui utilisent la virtualisation au niveau du système d'exploitation pour fournir des logiciels dans des conteneurs.

  • eksctl est un utilitaire de ligne de commande permettant de créer et de gérer des clusters Kubernetes sur Amazon. EKS

  • kubectl est une interface de ligne de commande qui vous permet d'exécuter des commandes sur des clusters Kubernetes.

  • jq est un outil en ligne de commande pour l'analyse syntaxique. JSON

Code

Le code de ce modèle est fourni dans la configuration de GitHub persistance avec Amazon EFS sur Amazon à EKS l'aide du référentiel AWS Fargate. Les scripts sont organisés par épopée, dans les dossiers epic01 suivantsepic06, conformément à l'ordre indiqué dans la section Epics de ce modèle.

Bonnes pratiques

L'architecture cible inclut les services et composants suivants, et elle suit les meilleures pratiques du AWSWell-Architected Framework :

  • AmazonEFS, qui fournit un système de NFS fichiers élastique simple, évolutif et entièrement géré. Il est utilisé comme système de fichiers partagé entre toutes les réplications de l'application PoC exécutées dans des pods, qui sont distribués dans les sous-réseaux privés du cluster Amazon choisi. EKS

  • Une cible de EFS montage Amazon pour chaque sous-réseau privé. Cela fournit une redondance par zone de disponibilité au sein du cloud privé virtuel (VPC) du cluster.

  • AmazonEKS, qui gère les charges de travail Kubernetes. Vous devez provisionner un EKS cluster Amazon avant d'utiliser ce modèle, comme décrit dans la section Conditions préalables.

  • AWSKMS, qui fournit un chiffrement au repos pour le contenu stocké dans le système de EFS fichiers Amazon.

  • Fargate, qui gère les ressources de calcul des conteneurs afin que vous puissiez vous concentrer sur les exigences de l'entreprise plutôt que sur la charge de l'infrastructure. Le profil Fargate est créé pour tous les sous-réseaux privés. Il fournit une redondance par zone de disponibilité au sein du cloud privé virtuel (VPC) du cluster.

  • Kubernetes Pods, pour valider que le contenu peut être partagé, consommé et écrit par différentes instances d'une application.

Épopées

TâcheDescriptionCompétences requises

Créez un EKS cluster Amazon.

Si vous avez déjà déployé un cluster, passez à l'épopée suivante. Créez un EKS cluster Amazon dans votre AWS compte existant. Dans le répertoire GitHub Repo, utilisez l'un des modèles pour déployer un EKS cluster Amazon à l'aide de Terraform ou eksctl. Pour plus d'informations, consultez la section Création d'un EKS cluster Amazon dans la EKS documentation Amazon. Remarque : dans le modèle Terraform, il existe également des exemples montrant comment : lier les profils Fargate à votre EKS cluster Amazon, créer un système de fichiers Amazon et déployer le EFS CSI pilote EFS Amazon dans votre cluster Amazon. EKS

AWSadministrateur, administrateur Terraform ou eksctl, administrateur Kubernetes

Exportez les variables d'environnement.

Exécutez le script env.sh. Cela fournit les informations requises lors des prochaines étapes.

source ./scripts/env.sh Inform the AWS Account ID: <13-digit-account-id> Inform your AWS Region: <aws-Region-code> Inform your Amazon EKS Cluster Name: <amazon-eks-cluster-name> Inform the Amazon EFS Creation Token: <self-genereated-uuid>

Si ce n'est pas encore le cas, vous pouvez obtenir toutes les informations demandées ci-dessus à l'aide des CLI commandes suivantes.

# ACCOUNT ID aws sts get-caller-identity --query "Account" --output text
# REGION CODE aws configure get region
# CLUSTER EKS NAME aws eks list-clusters --query "clusters" --output text
# GENERATE EFS TOKEN uuidgen
AWSadministrateur système
TâcheDescriptionCompétences requises

Créez un espace de noms Kubernetes et un profil Fargate pour les charges de travail des applications.

Créez un espace de noms pour recevoir les charges de travail des applications qui interagissent avec Amazon. EFS Exécutez le script create-k8s-ns-and-linked-fargate-profile.sh. Vous pouvez choisir d'utiliser un nom d'espace de noms personnalisé ou l'espace de noms poc-efs-eks-fargate fourni par défaut.

Avec un nom d'espace de noms d'application personnalisé :

export $APP_NAMESPACE=<CUSTOM_NAME> ./scripts/epic01/create-k8s-ns-and-linked-fargate-profile.sh \ -c "$CLUSTER_NAME" -n "$APP_NAMESPACE"

Sans nom d'espace de noms d'application personnalisé :

./scripts/epic01/create-k8s-ns-and-linked-fargate-profile.sh \ -c "$CLUSTER_NAME"

$CLUSTER_NAME est le nom de votre EKS cluster Amazon. Le -n <NAMESPACE> paramètre est facultatif ; si vous n'en êtes pas informé, un nom d'espace de noms généré par défaut sera fourni.

Utilisateur Kubernetes disposant des autorisations accordées
TâcheDescriptionCompétences requises

Générez un jeton unique.

Amazon a EFS besoin d'un jeton de création pour garantir un fonctionnement idempotent (appeler l'opération avec le même jeton de création n'a aucun effet). Pour répondre à cette exigence, vous devez générer un jeton unique à l'aide d'une technique disponible. Par exemple, vous pouvez générer un identifiant unique universel (UUID) à utiliser comme jeton de création.

AWSadministrateur système

Créez un système de EFS fichiers Amazon.

Créez le système de fichiers pour recevoir les fichiers de données lus et écrits par les charges de travail de l'application. Vous pouvez créer un système de fichiers chiffré ou non chiffré. (Il est recommandé que le code de ce modèle crée un système crypté pour activer le chiffrement au repos par défaut.) Vous pouvez utiliser une AWS KMS clé symétrique unique pour chiffrer votre système de fichiers. Si aucune clé personnalisée n'est spécifiée, une clé AWS gérée est utilisée.

Utilisez le script create-efs.sh pour créer un système de EFS fichiers Amazon chiffré ou non chiffré, après avoir généré un jeton unique pour AmazonEFS.

Avec le chiffrement au repos, sans KMS clé :

./scripts/epic02/create-efs.sh \ -c "$CLUSTER_NAME" \ -t "$EFS_CREATION_TOKEN"

$CLUSTER_NAME est le nom de votre EKS cluster Amazon et $EFS_CREATION_TOKEN est un jeton de création unique pour le système de fichiers.

Avec le chiffrement au repos, avec une KMS clé :

./scripts/epic02/create-efs.sh \ -c "$CLUSTER_NAME" \ -t "$EFS_CREATION_TOKEN" \ -k "$KMS_KEY_ALIAS"

$CLUSTER_NAME est le nom de votre EKS cluster Amazon, $EFS_CREATION_TOKEN est un jeton de création unique pour le système de fichiers et $KMS_KEY_ALIAS est l'alias de la KMS clé.

Sans cryptage :

./scripts/epic02/create-efs.sh -d \ -c "$CLUSTER_NAME" \ -t "$EFS_CREATION_TOKEN"

$CLUSTER_NAME est le nom de votre EKS cluster Amazon, $EFS_CREATION_TOKEN est un jeton de création unique pour le système de fichiers et –d désactive le chiffrement au repos.

AWSadministrateur système

Créez un groupe de sécurité.

Créez un groupe de sécurité pour autoriser le EKS cluster Amazon à accéder au système de EFS fichiers Amazon.

AWSadministrateur système

Mettez à jour la règle de trafic entrant pour le groupe de sécurité.

Mettez à jour les règles entrantes du groupe de sécurité pour autoriser le trafic entrant pour les paramètres suivants :

  • TCPprotocole — port 2049

  • Source : plages de CIDR blocs pour les sous-réseaux privés du cluster VPC Kubernetes

AWSadministrateur système

Ajoutez une cible de montage pour chaque sous-réseau privé.

Pour chaque sous-réseau privé du cluster Kubernetes, créez une cible de montage pour le système de fichiers et le groupe de sécurité.

AWSadministrateur système
TâcheDescriptionCompétences requises

Déployez le EFS CSI pilote Amazon.

Déployez le EFS CSI pilote Amazon dans le cluster. Le pilote provisionne le stockage en fonction des demandes de volume persistantes créées par les applications. Exécutez le create-k8s-efs-csi-sc.sh script pour déployer le EFS CSI pilote Amazon et la classe de stockage dans le cluster.

./scripts/epic03/create-k8s-efs-csi-sc.sh

Ce script utilise l'kubectlutilitaire. Assurez-vous donc que le contexte a été configuré et qu'il pointe vers le EKS cluster Amazon souhaité.

Utilisateur Kubernetes disposant des autorisations accordées

Déployez la classe de stockage.

Déployez la classe de stockage dans le cluster pour le fournisseur Amazon (EFSefs.csi.aws.com).

Utilisateur Kubernetes disposant des autorisations accordées
TâcheDescriptionCompétences requises

Déployez le volume persistant.

Déployez le volume persistant et liez-le à la classe de stockage créée et à l'ID du système de EFS fichiers Amazon. L'application utilise le volume persistant pour lire et écrire du contenu. Vous pouvez spécifier n'importe quelle taille pour le volume persistant dans le champ de stockage. Kubernetes requiert ce champ, mais Amazon EFS étant un système de fichiers élastique, il n'impose aucune capacité du système de fichiers. Vous pouvez déployer le volume persistant avec ou sans chiffrement. (Le EFS CSI pilote Amazon active le chiffrement par défaut, conformément à la meilleure pratique.) Exécutez le deploy-poc-app.sh script pour déployer le volume persistant, la demande de volume persistant et les deux charges de travail.

Avec le chiffrement en transit :

./scripts/epic04/deploy-poc-app.sh \ -t "$EFS_CREATION_TOKEN"

$EFS_CREATION_TOKEN est le jeton de création unique pour le système de fichiers.

Sans chiffrement pendant le transport :

./scripts/epic04/deploy-poc-app.sh -d \ -t "$EFS_CREATION_TOKEN"

où se $EFS_CREATION_TOKEN trouve le jeton de création unique pour le système de fichiers, et où –d désactive le chiffrement en transit.

Utilisateur Kubernetes disposant des autorisations accordées

Déployez la réclamation de volume persistante demandée par l'application.

Déployez la demande de volume persistant demandée par l'application et liez-la à la classe de stockage. Utilisez le même mode d'accès que le volume persistant que vous avez créé précédemment. Vous pouvez spécifier n'importe quelle taille pour la réclamation de volume persistant dans le champ de stockage. Kubernetes requiert ce champ, mais Amazon EFS étant un système de fichiers élastique, il n'impose aucune capacité du système de fichiers.

Utilisateur Kubernetes disposant des autorisations accordées

Déployer la charge de travail 1.

Déployez le pod qui représente la charge de travail 1 de l'application. Cette charge de travail écrit du contenu dans le fichier/data/out1.txt.

Utilisateur Kubernetes disposant des autorisations accordées

Déployer la charge de travail 2.

Déployez le pod qui représente la charge de travail 2 de l'application. Cette charge de travail écrit du contenu dans le fichier/data/out2.txt.

Utilisateur Kubernetes disposant des autorisations accordées
TâcheDescriptionCompétences requises

Vérifiez l'état duPersistentVolume.

Entrez la commande suivante pour vérifier l'état duPersistentVolume.

kubectl get pv

Pour un exemple de sortie, consultez la section Informations supplémentaires.

Utilisateur Kubernetes disposant des autorisations accordées

Vérifiez l'état duPersistentVolumeClaim.

Entrez la commande suivante pour vérifier l'état duPersistentVolumeClaim.

kubectl -n poc-efs-eks-fargate get pvc

Pour un exemple de sortie, consultez la section Informations supplémentaires.

Utilisateur Kubernetes disposant des autorisations accordées

Vérifiez que la charge de travail 1 peut écrire dans le système de fichiers.

Entrez la commande suivante pour vérifier que le workload 1 écrit sur/data/out1.txt.

kubectl exec -ti poc-app1 -n poc-efs-eks-fargate -- tail -f /data/out1.txt

Les résultats sont similaires aux suivants :

... Thu Sep 3 15:25:07 UTC 2023 - PoC APP 1 Thu Sep 3 15:25:12 UTC 2023 - PoC APP 1 Thu Sep 3 15:25:17 UTC 2023 - PoC APP 1 ...
Utilisateur Kubernetes disposant des autorisations accordées

Vérifiez que la charge de travail 2 peut écrire dans le système de fichiers.

Entrez la commande suivante pour vérifier que la charge de travail 2 est en train d'écrire/data/out2.txt.

kubectl -n $APP_NAMESPACE exec -ti poc-app2 -- tail -f /data/out2.txt

Les résultats sont similaires aux suivants :

... Thu Sep 3 15:26:48 UTC 2023 - PoC APP 2 Thu Sep 3 15:26:53 UTC 2023 - PoC APP 2 Thu Sep 3 15:26:58 UTC 2023 - PoC APP 2 ...
Utilisateur Kubernetes disposant des autorisations accordées

Vérifiez que la charge de travail 1 peut lire le fichier écrit par la charge de travail 2.

Entrez la commande suivante pour vérifier que la charge de travail 1 peut lire le /data/out2.txt fichier écrit par la charge de travail 2.

kubectl exec -ti poc-app1 -n poc-efs-eks-fargate -- tail -n 3 /data/out2.txt

Les résultats sont similaires aux suivants :

... Thu Sep 3 15:26:48 UTC 2023 - PoC APP 2 Thu Sep 3 15:26:53 UTC 2023 - PoC APP 2 Thu Sep 3 15:26:58 UTC 2023 - PoC APP 2 ...
Utilisateur Kubernetes disposant des autorisations accordées

Vérifiez que la charge de travail 2 peut lire le fichier écrit par la charge de travail 1.

Entrez la commande suivante pour vérifier que la charge de travail 2 peut lire le /data/out1.txt fichier écrit par la charge de travail 1.

kubectl -n $APP_NAMESPACE exec -ti poc-app2 -- tail -n 3 /data/out1.txt

Les résultats sont similaires aux suivants :

... Thu Sep 3 15:29:22 UTC 2023 - PoC APP 1 Thu Sep 3 15:29:27 UTC 2023 - PoC APP 1 Thu Sep 3 15:29:32 UTC 2023 - PoC APP 1 ...
Utilisateur Kubernetes disposant des autorisations accordées

Vérifiez que les fichiers sont conservés après avoir supprimé les composants de l'application.

Ensuite, vous utilisez un script pour supprimer les composants de l'application (volume persistant, réclamation de volume persistant et pods) et pour vérifier que les fichiers /data/out1.txt /data/out2.txt sont conservés dans le système de fichiers. Exécutez le script validate-efs-content.sh à l'aide de la commande suivante.

./scripts/epic05/validate-efs-content.sh \ -t "$EFS_CREATION_TOKEN"

$EFS_CREATION_TOKEN est le jeton de création unique pour le système de fichiers.

Les résultats sont similaires aux suivants :

pod/poc-app-validation created Waiting for pod get Running state... Waiting for pod get Running state... Waiting for pod get Running state... Results from execution of 'find /data' on validation process pod: /data /data/out2.txt /data/out1.txt
Utilisateur Kubernetes avec autorisations accordées, administrateur système
TâcheDescriptionCompétences requises

Surveillez les journaux des applications.

Dans le cadre d'une opération du deuxième jour, envoyez les journaux des applications à Amazon CloudWatch pour qu'ils soient surveillés.

AWSadministrateur système, utilisateur de Kubernetes avec autorisations accordées

Surveillez les conteneurs Amazon EKS et Kubernetes avec Container Insights.

Dans le cadre d'une opération de deux jours, surveillez les systèmes Amazon EKS et Kubernetes à l'aide d'Amazon Container Insights. CloudWatch Cet outil collecte, agrège et résume les métriques des applications conteneurisées à différents niveaux et dimensions. Pour plus d'informations, consultez la section Ressources connexes.

AWSadministrateur système, utilisateur de Kubernetes avec autorisations accordées

Surveillez Amazon EFS avec CloudWatch.

Dans le cadre d'une opération de deux jours, surveillez les systèmes de fichiers à l'aide d'Amazon CloudWatch, qui collecte et traite les données brutes d'Amazon EFS en indicateurs lisibles en temps quasi réel. Pour plus d'informations, consultez la section Ressources connexes.

AWSadministrateur système
TâcheDescriptionCompétences requises

Nettoyez toutes les ressources créées pour le modèle.

Une fois ce schéma terminé, nettoyez toutes les ressources pour éviter d'encourir des frais. AWS Exécutez le clean-up-resources.sh script pour supprimer toutes les ressources une fois que vous avez fini d'utiliser l'application PoC. Complétez l'une des options suivantes.

Avec le chiffrement au repos, avec une KMS clé :

./scripts/epic06/clean-up-resources.sh \ -c "$CLUSTER_NAME" \ -t "$EFS_CREATION_TOKEN" \ -k "$KMS_KEY_ALIAS"

$CLUSTER_NAME est le nom de votre EKS cluster Amazon, $EFS_CREATION_TOKEN le jeton de création du système de fichiers et $KMS_KEY_ALIAS l'alias de la KMS clé.

Sans chiffrement au repos :

./scripts/epic06/clean-up-resources.sh \ -c "$CLUSTER_NAME" \ -t "$EFS_CREATION_TOKEN"

$CLUSTER_NAME est le nom de votre EKS cluster Amazon et $EFS_CREATION_TOKEN le jeton de création du système de fichiers.

Utilisateur Kubernetes avec autorisations accordées, administrateur système

Ressources connexes

Références

GitHub tutoriels et exemples

Outils nécessaires

Informations supplémentaires

Voici un exemple de sortie de la kubectl get pv commande.

NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE poc-app-pv 1Mi RWX Retain Bound poc-efs-eks-fargate/poc-app-pvc efs-sc 3m56s

Voici un exemple de sortie de la kubectl -n poc-efs-eks-fargate get pvc commande.

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE poc-app-pvc Bound poc-app-pv 1Mi RWX efs-sc 4m34s