Maison  >  Article  >  Opération et maintenance  >  Quels sont les pilotes de stockage Docker ?

Quels sont les pilotes de stockage Docker ?

藏色散人
藏色散人original
2022-01-12 14:20:548177parcourir

Les pilotes de stockage Docker incluent : 1. AUFS, qui est un pilote de stockage au niveau des fichiers ; 2. Overlay, qui est un Union FS ; 3. Device mapper, qui est un mécanisme de cadre de mappage ; pilote de stockage au niveau des fichiers ; 5. ZFS, un tout nouveau système de fichiers.

Quels sont les pilotes de stockage Docker ?

L'environnement d'exploitation de cet article : système Windows 7, Docker version 20.10.11, ordinateur Dell G3.

Quels sont les cinq principes des pilotes de stockage Docker et leurs scénarios d'application

1 Description du principe

Docker a initialement utilisé AUFS comme système de fichiers et a également bénéficié du concept de superposition AUFS mis en œuvre. que plusieurs conteneurs peuvent partager la même image. Cependant, comme AUFS n'est pas intégré au noyau Linux et ne prend en charge qu'Ubuntu, compte tenu des problèmes de compatibilité, un pilote de stockage a été introduit dans Docker version 0.7. Actuellement, Docker prend en charge cinq types de AUFS, Btrfs, Device mapper, OverlayFS et ZFS. Pilote de stockage. Comme indiqué sur le site officiel de Docker, aucun pilote ne convient à tous les scénarios d'application. Ce n'est qu'en sélectionnant le pilote de stockage approprié en fonction de différents scénarios que les performances de Docker peuvent être efficacement améliorées. Comment choisir un pilote de stockage approprié ?Vous devez d'abord comprendre les principes du pilote de stockage pour porter un meilleur jugement. Cet article présente une explication détaillée des cinq principes du pilote de stockage de Docker et une comparaison des scénarios d'application et des tests de performances d'E/S. Avant de parler des principes, parlons des deux technologies de copie sur écriture et d'allocation sur écriture.

1. Copie sur écriture (CoW)

Une technologie utilisée par tous les conducteurs - copie sur écriture (CoW). CoW est une copie sur écriture, ce qui signifie copier uniquement lorsque l'écriture est nécessaire. Ceci est destiné au scénario de modification des fichiers existants. Par exemple, si plusieurs conteneurs sont démarrés sur la base d'une image, si chaque conteneur se voit attribuer un système de fichiers similaire à l'image, cela occupera beaucoup d'espace disque. La technologie CoW permet à tous les conteneurs de partager le système de fichiers de l'image. Toutes les données sont lues à partir de l'image. Ce n'est que lorsqu'un fichier doit être écrit que le fichier à écrire est copié de l'image vers son propre système de fichiers pour modification. . Par conséquent, quel que soit le nombre de conteneurs partageant la même image, les opérations d'écriture sont effectuées sur la copie copiée de l'image vers son propre système de fichiers. Le fichier source de l'image ne sera pas modifié et plusieurs opérations sur le conteneur seront effectuées simultanément. Un fichier générera une copie dans le système de fichiers de chaque conteneur. Chaque conteneur modifie sa propre copie, qui est isolée les unes des autres et ne s'affecte pas les unes les autres. L'utilisation de CoW peut améliorer efficacement l'utilisation du disque.

2. Allocation à la demande

L'allocation à la demande est utilisée dans les scénarios où le fichier n'existe pas à l'origine. L'espace n'est alloué que lorsqu'un nouveau fichier doit être écrit, ce qui peut améliorer l'utilisation des ressources de stockage. . Par exemple, lorsqu'un conteneur est démarré, une partie de l'espace disque ne sera pas pré-allouée pour le conteneur. Au lieu de cela, un nouvel espace sera alloué à la demande lorsque de nouveaux fichiers sont écrits.

2. Cinq principes de base des pilotes de stockage

1 AUFS

AUFS (AnotherUnionFS) est un Union FS, qui est un pilote de stockage au niveau fichier. AUFS peut superposer de manière transparente un système de fichiers en couches sur un ou plusieurs systèmes de fichiers existants, fusionnant plusieurs couches en une représentation monocouche du système de fichiers. En termes simples, il prend en charge le montage de différents répertoires sur le système de fichiers sous le même système de fichiers virtuel. Ce système de fichiers peut modifier les fichiers couche par couche. Quel que soit le nombre de couches inférieures en lecture seule, seul le système de fichiers le plus haut est accessible en écriture. Lorsqu'un fichier doit être modifié, AUFS crée une copie du fichier, utilise CoW pour copier le fichier de la couche en lecture seule vers la couche inscriptible pour modification, et les résultats sont également enregistrés dans la couche inscriptible. Dans Docker, la couche en lecture seule située en dessous est l'image et la couche inscriptible est le conteneur. La structure est la suivante :

2, Overlay

Overlay est pris en charge par le noyau Linux après 3.18 et est également un Union FS différent du multicouche d'AUFS, La superposition n'a que deux couches : Un système de fichiers supérieur et un système de fichiers inférieur représentent respectivement la couche d'image et la couche de conteneur de Docker. Lorsqu'un fichier doit être modifié, CoW est utilisé pour copier le fichier de la couche inférieure en lecture seule vers la couche supérieure inscriptible pour modification, et le résultat est également enregistré dans la couche supérieure. Dans Docker, la couche en lecture seule située en dessous est l'image et la couche inscriptible est le conteneur. La structure est présentée dans la figure ci-dessous :

3, Device mapper

Le mappeur de périphériques est pris en charge par le noyau Linux 2.6.9 et versions ultérieures. Il fournit un mécanisme de cadre de mappage des périphériques logiques aux périphériques physiques. Grâce à ce mécanisme, les utilisateurs peuvent facilement formuler des stratégies de gestion des ressources de stockage en fonction de leurs propres besoins. Les AUFS et OverlayFS mentionnés précédemment sont un stockage au niveau des fichiers, tandis que le Device mapper est un stockage au niveau des blocs Toutes les opérations sont effectuées directement sur des blocs, pas sur des fichiers. Le pilote du mappeur de périphériques créera d'abord un pool de ressources sur le périphérique de bloc, puis créera un périphérique de base avec un système de fichiers sur le pool de ressources. Toutes les images sont des instantanés de ce périphérique de base et les conteneurs sont des instantanés de l'image. Par conséquent, le système de fichiers vu dans le conteneur est un instantané du système de fichiers du périphérique de base sur le pool de ressources, et aucun espace n'est alloué au conteneur. Lorsqu'un nouveau fichier est écrit, de nouveaux blocs lui sont alloués dans l'image du conteneur et les données sont écrites. C'est ce qu'on appelle allocation de temps. Lorsque vous souhaitez modifier un fichier existant, utilisez CoW pour allouer de l'espace de bloc pour l'instantané du conteneur, copiez les données à modifier dans le nouveau bloc de l'instantané du conteneur, puis modifiez-le. Le pilote Device Mapper créera par défaut un fichier 100G contenant des images et des conteneurs. Chaque conteneur est limité à un volume de 10G et peut être configuré et ajusté par vous-même. La structure est illustrée dans la figure ci-dessous :

4, Btrfs

Btrfs est appelé le système de fichiers de copie sur écriture de nouvelle génération, incorporé au noyau Linux, et est également un fichier Pilote de stockage de niveau supérieur, mais peut être utilisé comme Device Mapper. Faites toujours fonctionner l'équipement sous-jacent directement. Btrfs configure une partie du système de fichiers comme un sous-système de fichiers complet, appelé sous-volume. À l'aide d'un sous-volume, un système de fichiers volumineux peut être divisé en plusieurs sous-systèmes de fichiers. Ces sous-systèmes de fichiers partagent l'espace du périphérique sous-jacent et sont alloués à partir du périphérique sous-jacent lorsque l'espace disque est nécessaire, de la même manière qu'une application appelle malloc() pour. allouer de la mémoire. Afin d'utiliser l'espace de l'appareil de manière flexible, Btrfs divise l'espace disque en plusieurs morceaux. Chaque morceau peut utiliser différentes stratégies d'allocation d'espace disque. Par exemple, certains morceaux stockent uniquement des métadonnées et d’autres uniquement des données. Ce modèle présente de nombreux avantages, tels que Btrfs prenant en charge l'ajout dynamique de périphériques. Une fois que l'utilisateur a ajouté un nouveau disque au système, il peut utiliser la commande Btrfs pour ajouter le périphérique au système de fichiers. Btrfs traite un système de fichiers volumineux comme un pool de ressources et le configure en plusieurs systèmes de sous-fichiers complets. De nouveaux systèmes de sous-fichiers peuvent également être ajoutés au pool de ressources. L'image de base est un instantané de chaque sous-système de fichiers. -image et conteneur Chacun a son propre instantané, et ces instantanés sont tous des instantanés de sous-volume.

Lorsqu'un nouveau fichier est écrit, un nouveau bloc de données lui est alloué dans l'instantané du conteneur, et le fichier est écrit dans cet espace. Lorsque vous souhaitez modifier un fichier existant, utilisez la copie CoW pour allouer de nouvelles données d'origine et un nouvel instantané, modifiez les données dans cet espace nouvellement alloué, puis mettez à jour la structure de données appropriée pour pointer vers le nouveau sous-système de fichiers et l'instantané, le original données originales Et l'instantané n'a aucun pointeur pointant vers lui et est écrasé.

5, ZFS

Le système de fichiers ZFS est un nouveau système de fichiers révolutionnaire, qui change fondamentalement la façon dont les systèmes de fichiers sont gérés. ZFS abandonne complètement la "gestion des volumes" et ne crée plus de volumes virtuels, mais centralise tous les appareils. en pool de stockage pour la gestion, utilisez le concept de "pool de stockage" pour gérer l'espace de stockage physique. Dans le passé, les systèmes de fichiers étaient construits sur des appareils physiques. Afin de gérer ces périphériques physiques et d'assurer la redondance des données, le concept de « gestion des volumes » fournit une image de périphérique unique. ZFS est construit sur des pools de stockage virtuels appelés « zpools ». Chaque pool de stockage est constitué de plusieurs périphériques virtuels (vdev). Ces périphériques virtuels peuvent être des disques bruts, un périphérique miroir RAID1 ou un groupe multidisque avec des niveaux RAID non standard. Le système de fichiers sur le zpool peut alors utiliser la capacité totale de stockage de ces périphériques virtuels.

Jetons un coup d'œil à l'utilisation de ZFS dans Docker. Tout d'abord, allouez un système de fichiers ZFS de zpool à la couche de base de l'image, et les autres couches d'image sont des clones de cet instantané du système de fichiers ZFS. L'instantané est en lecture seule et le clone est accessible en écriture. dans le miroir. Le calque supérieur génère un calque inscriptible. Comme le montre l'image ci-dessous :

Lorsque vous souhaitez écrire un nouveau fichier, utilisez l'allocation à la demande, un nouveau bloc de données est généré à partir du zpool, les nouvelles données sont écrites dans ce bloc, et ce nouvel espace est stocké dans le conteneur (clone ZFS ). Lorsque vous souhaitez modifier un fichier existant, utilisez la copie sur écriture pour allouer un nouvel espace et copiez les données d'origine dans le nouvel espace pour terminer la modification.

3. Comparaison des pilotes de stockage et adaptation aux scénarios

1, AUFS VS Overlay

AUFS et Overlay sont tous deux des systèmes de fichiers communs, mais AUFS a plusieurs couches, tandis qu'Overlay n'en a qu'une. deux couches, donc lors d'opérations de copie sur écriture, si le fichier est plus grand et qu'il y a des couches inférieures, AUSF peut être plus lent. De plus, Overlay est intégré à la ligne principale du noyau Linux, mais AUFS ne l'est pas, il peut donc être plus rapide que AUFS. Mais Overlay est encore trop jeune et doit être utilisé en production avec prudence. En tant que premier pilote de stockage de Docker, AUFS a une longue histoire, est relativement stable, a été pratiqué dans un grand nombre de productions et bénéficie d'un fort soutien de la communauté. Le DC/OS open source actuel spécifie l’utilisation de Overlay.

2, Overlay VS Device mapper

Overlay est un stockage au niveau du fichier, et Device mapper est un stockage au niveau du bloc Lorsque le fichier est particulièrement volumineux et que le contenu modifié est petit, Overlay copiera l'intégralité. fichier quelle que soit la taille du contenu modifié, il faut plus de temps pour modifier un gros fichier qu'un petit fichier, et au niveau des blocs, qu'il s'agisse d'un gros fichier ou d'un petit fichier, seuls les blocs qui doivent être modifiés. sont copiés, et non l'intégralité du fichier. Dans ce scénario, il est évident que le mappeur de périphérique sera plus rapide. Étant donné que le niveau bloc accède directement au disque logique, il convient aux scénarios gourmands en E/S. Pour les scénarios avec des programmes internes complexes, une concurrence importante mais peu d'E/S, les performances d'Overlay sont relativement meilleures.

3 Plusieurs copies sont nécessaires, ce pilote de stockage ne convient donc pas à une utilisation sur les plates-formes PaaS de conteneurs haute densité. De plus, lorsque de nombreux conteneurs sont démarrés et arrêtés, cela peut provoquer un débordement de disque et empêcher l'hôte de fonctionner. Le mappeur de périphériques n'est pas recommandé pour une utilisation en production, Btrfs peut être très efficace dans la construction de Docker.          ZFS a été conçu à l'origine pour les serveurs Salaris avec une grande quantité de mémoire, il aura donc un impact sur la mémoire lorsqu'il est utilisé et convient aux environnements avec une grande mémoire. Le COW de ZFS aggrave le problème de fragmentation.Pour les fichiers volumineux générés par l'écriture séquentielle, si une partie de celui-ci est modifiée de manière aléatoire à l'avenir, l'adresse physique du fichier sur le disque dur ne sera plus continue et les futures lectures séquentielles perdront en performance. deviendra plus pauvre. ZFS prend en charge plusieurs conteneurs partageant un bloc de cache, ce qui convient aux scénarios PaaS et utilisateur haute densité. Apprentissage recommandé : "tutoriel docker"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn