Volumes Docker - Amazon Elastic Container Service

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.

Volumes Docker

Les volumes Docker sont une fonctionnalité du moteur d'exécution des conteneurs Docker qui permet aux conteneurs de conserver les données en montant un répertoire à partir du système de fichiers de l'hôte. Les pilotes de volume Docker (également appelés plugins) sont utilisés pour intégrer des volumes de conteneurs à des systèmes de stockage externes, tels qu'Amazon EBS. Les volumes Docker ne sont pris en charge que lors de l'hébergement de tâches Amazon ECS sur des instances Amazon EC2.

Les tâches Amazon ECS peuvent utiliser les volumes Docker pour conserver les données à l'aide des volumes Amazon EBS. Cela se fait en attachant un volume Amazon EBS à une instance Amazon EC2, puis en montant le volume dans une tâche à l'aide de volumes Docker. Un volume Docker peut être partagé entre plusieurs tâches Amazon ECS sur l'hôte.

La limite des volumes Docker est que le système de fichiers utilisé par la tâche est lié à l'instance Amazon EC2 spécifique. Si l'instance s'arrête pour une raison quelconque et que la tâche est placée sur une autre instance, les données sont perdues. Vous pouvez attribuer des tâches aux instances afin de garantir que les volumes EBS associés sont toujours disponibles pour les tâches.

Pour plus d'informations, consultez la section sur les volumes Docker dans le manuel Amazon Elastic Container Service Developer Guide.

Cycle de vie des volumes Amazon EBS

Il existe deux principaux modèles d'utilisation avec le stockage par conteneurs et Amazon EBS. La première est lorsqu'une application doit conserver les données et éviter toute perte de données lorsque son conteneur se termine. Un exemple de ce type d'application serait une base de données transactionnelle telle que MySQL. Lorsqu'une tâche MySQL se termine, une autre tâche est censée la remplacer. Dans ce scénario, le cycle de vie du volume est distinct du cycle de vie de la tâche. Lorsque vous utilisez EBS pour conserver des données de conteneur, il est recommandé d'utiliser des contraintes de placement des tâches afin de limiter le placement de la tâche à un seul hôte auquel le volume EBS est attaché.

La seconde est lorsque le cycle de vie du volume est indépendant du cycle de vie des tâches. Cela est particulièrement utile pour les applications qui nécessitent un stockage performant et à faible latence, mais qui n'ont pas besoin de conserver les données une fois la tâche terminée. Par exemple, une charge de travail ETL qui traite de gros volumes de données peut nécessiter un stockage à haut débit. Amazon EBS convient à ce type de charge de travail car il fournit des volumes de haute performance fournissant jusqu'à 256 000 IOPS. Lorsque la tâche est terminée, la réplique de remplacement peut être placée en toute sécurité sur n'importe quel hôte Amazon EC2 du cluster. Tant que la tâche a accès à un backend de stockage capable de répondre à ses exigences de performances, elle peut exécuter sa fonction. Par conséquent, aucune contrainte de placement des tâches n'est nécessaire dans ce cas.

Si plusieurs types de volumes Amazon EBS sont associés aux instances Amazon EC2 de votre cluster, vous pouvez utiliser des contraintes de placement des tâches pour vous assurer que les tâches sont placées sur des instances associées à un volume Amazon EBS approprié. Supposons, par exemple, qu'un cluster possède certaines instances avec un gp2 volume, tandis que d'autres utilisent io1 des volumes. Vous pouvez associer des attributs personnalisés aux instances comportant des io1 volumes, puis utiliser des contraintes de placement des tâches pour garantir que vos tâches intensives en E/S soient toujours placées sur des instances de conteneur contenant des io1 volumes.

La AWS CLI commande suivante est utilisée pour placer des attributs sur une instance de conteneur Amazon ECS.

aws ecs put-attributes \ --attributes name=EBS,value=io1,targetId=<your-container-instance-arn>

Disponibilité des données Amazon EBS

Les conteneurs ont généralement une courte durée de vie, sont fréquemment créés et interrompus lorsque les applications évoluent horizontalement. La meilleure pratique consiste à exécuter des charges de travail dans plusieurs zones de disponibilité afin d'améliorer la disponibilité de vos applications. Amazon ECS vous permet de contrôler le placement des tâches à l'aide de stratégies de placement de tâches et de contraintes de placement de tâches. Lorsqu'une charge de travail conserve ses données à l'aide de volumes Amazon EBS, ses tâches doivent être placées dans la même zone de disponibilité que le volume Amazon EBS. Nous vous recommandons également de définir une contrainte de placement qui limite la zone de disponibilité dans laquelle une tâche peut être placée. Cela garantit que vos tâches et les volumes correspondants sont toujours situés dans la même zone de disponibilité.

Lorsque vous exécutez des tâches autonomes, vous pouvez contrôler la zone de disponibilité dans laquelle la tâche est placée en définissant des contraintes de placement à l'aide de l'attribut de zone de disponibilité.

attribute:ecs.availability-zone == us-east-1a

Lorsque vous exécutez des applications qui bénéficieraient d'une exécution dans plusieurs zones de disponibilité, pensez à créer un service Amazon ECS différent pour chaque zone de disponibilité. Cela garantit que les tâches nécessitant un volume Amazon EBS sont toujours placées dans la même zone de disponibilité que le volume associé.

Nous vous recommandons de créer des instances de conteneur dans chaque zone de disponibilité, d'associer des volumes Amazon EBS à l'aide de modèles de lancement et d'ajouter des attributs personnalisés aux instances afin de les différencier des autres instances de conteneur du cluster Amazon ECS. Lorsque vous créez des services, configurez les contraintes de placement des tâches pour vous assurer qu'Amazon ECS place les tâches dans la bonne zone de disponibilité et dans la bonne instance. Pour plus d'informations, consultez les exemples de contraintes de placement de tâches dans le manuel Amazon Elastic Container Service Developer Guide.

Plug-ins de volume Docker

Les plugins Docker tels que Portworx fournissent une abstraction entre le volume Docker et le volume Amazon EBS. Ces plugins peuvent créer dynamiquement un volume Amazon EBS lorsque votre tâche nécessitant un volume démarre. Portworx peut également attacher un volume à un nouvel hôte lorsqu'un conteneur se termine et que sa réplique suivante est placée sur une autre instance de conteneur. Il réplique également les données de volume de chaque conteneur entre les nœuds Amazon ECS et entre les zones de disponibilité. Pour plus d'informations, consultez Portworx.