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 | 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
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
AWSL'interface de ligne de commande (AWSCLI) est un outil open source que vous pouvez utiliser pour interagir avec les AWS services à partir de la ligne de commande.
Amazon Elastic File System (AmazonEFS) vous aide à créer et à configurer des systèmes de fichiers partagés dans le AWS cloud. Dans ce modèle, il fournit un système de fichiers simple, évolutif, entièrement géré et partagé à utiliser avec AmazonEKS.
Amazon Elastic Kubernetes Service (EKSAmazon) vous permet d'exécuter AWS Kubernetes sans avoir à installer ou à exploiter vos propres clusters.
AWSFargate est un moteur de calcul sans serveur pour Amazon. EKS Il crée et gère les ressources de calcul pour vos applications Kubernetes.
AWSLe service de gestion des clés (AWSKMS) vous aide à créer et à contrôler des clés cryptographiques afin de protéger vos données.
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.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âche | Description | Compé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 | 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.
Si ce n'est pas encore le cas, vous pouvez obtenir toutes les informations demandées ci-dessus à l'aide des CLI commandes suivantes.
| AWSadministrateur système |
Tâche | Description | Compé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 Avec un nom d'espace de noms d'application personnalisé :
Sans nom d'espace de noms d'application personnalisé :
où | Utilisateur Kubernetes disposant des autorisations accordées |
Tâche | Description | Compé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é :
où Avec le chiffrement au repos, avec une KMS clé :
où Sans cryptage :
où | 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 :
| 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âche | Description | Compé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
Ce script utilise l' | 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âche | Description | Compé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 Avec le chiffrement en transit :
où Sans chiffrement pendant le transport :
où se | 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 | 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 | Utilisateur Kubernetes disposant des autorisations accordées |
Tâche | Description | Compétences requises |
---|---|---|
Vérifiez l'état du | Entrez la commande suivante pour vérifier l'état du
Pour un exemple de sortie, consultez la section Informations supplémentaires. | Utilisateur Kubernetes disposant des autorisations accordées |
Vérifiez l'état du | Entrez la commande suivante pour vérifier l'état du
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
Les résultats sont similaires aux suivants :
| 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
Les résultats sont similaires aux suivants :
| 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
Les résultats sont similaires aux suivants :
| 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
Les résultats sont similaires aux suivants :
| 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
où Les résultats sont similaires aux suivants :
| Utilisateur Kubernetes avec autorisations accordées, administrateur système |
Tâche | Description | Compé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âche | Description | Compé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 Avec le chiffrement au repos, avec une KMS clé :
où Sans chiffrement au repos :
où | Utilisateur Kubernetes avec autorisations accordées, administrateur système |
Ressources connexes
Références
AWSFargate for EKS Amazon prend désormais en charge EFS Amazon
(annonce) Comment capturer les journaux d'applications lors de l'utilisation d'Amazon EKS sur AWS Fargate
(article de blog) Utilisation de Container Insights ( CloudWatch documentation Amazon)
Configuration de Container Insights sur Amazon EKS et Kubernetes (documentation Amazon) CloudWatch
Métriques Amazon EKS et Kubernetes Container Insights (documentation Amazon) CloudWatch
Surveillance d'Amazon EFS avec Amazon CloudWatch (EFSdocumentation Amazon)
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