编程知识 cdmana.com

Docker Storage Drive

Docker Storage Driver

Chaque Docker Les conteneurs ont tous un espace de stockage local,Couche miroir utilisée pour enregistrer les cascades(Image Layer)Et le système de fichiers conteneur monté.

Par défaut,Toutes les opérations de lecture et d'écriture d'un conteneur se produisent sur sa couche miroir ou sur un système de fichiers monté,Le stockage est donc un élément essentiel de la performance et de la stabilité de chaque conteneur.

Passé,Le stockage local est piloté par le stockage(Storage Driver)Pour gérer,Parfois aussi appelé Graph Driver Ou GraphDriver.

Bien que les pilotes de stockage utilisent le stockage de niveau miroir de pile et la réplication en écriture dans la conception abstraite de haut niveau(Copy-on-Write)Des idées de design,Mais Docker In Linux La couche inférieure supporte plusieurs implémentations spécifiques de différents pilotes de stockage,Chaque implémentation utilise différentes méthodes pour implémenter la couche miroir et la copie en temps d'écriture.Bien que les différences dans les implémentations sous - jacentes n'affectent pas les utilisateurs par rapport à Docker Interaction entre,Mais oui Docker La performance et la stabilité sont essentielles.

In Linux Allez.,Docker Certains des pilotes de stockage disponibles sont AUFS(Le plus primitif et le plus ancien)、Overlay2(Peut - être le meilleur choix pour l'avenir)、Device Mapper、Btrfs Et ZFS.

Docker In Windows Un seul pilote de stockage est pris en charge sur le système d'exploitation,C'est - à - dire: Windows Filter.

La sélection du pilote de stockage est au niveau du noeud .Chaque Docker L'hôte ne peut sélectionner qu'un seul pilote de stockage , Impossible de sélectionner un lecteur de stockage différent pour chaque conteneur .

In Linux Allez.,Peut être modifié par /etc/docker/daemon.json Fichier pour modifier la configuration du moteur de stockage ,Redémarrage nécessaire après modification Docker Pour que ça marche..

Le fragment de code suivant montre comment régler le pilote de stockage à overlay2.

{ "storage-driver": "overlay2" }

    Si la configuration n'est pas sur la dernière ligne du fichier , Vous devez ajouter une virgule à la fin de la ligne .

Si le lecteur a modifié l'exécution Docker Type de moteur de stockage pour l'hôte , Les miroirs et conteneurs existants ne seront pas disponibles après le redémarrage , Ceci est dû au fait que chaque pilote de stockage stocke la couche miroir à un endroit différent sur l'hôte (En général /var/lib/docker/ <storage-driver>/... Sous la table des matières).

Le type de lecteur de stockage a été modifié ,Docker Le miroir et le conteneur d'origine ne peuvent pas être trouvés . Passer au lecteur de stockage d'origine , Les miroirs et conteneurs précédents sont prêts à être utilisés .

Si vous souhaitez continuer à utiliser les miroirs et conteneurs précédents après avoir changé le moteur de stockage , Le miroir doit être sauvegardé sous Docker Format, Télécharger dans un entrepôt miroir ,Modifier local Docker Stocker le moteur et redémarrer , Ensuite, tirez le miroir de l'entrepôt de miroir vers le local , Enfin redémarrer le conteneur .

La commande suivante vérifie Docker Type actuel de lecteur de stockage .

docker system info

 

Sélectionnez le pilote de stockage et configurez - le correctement à Docker C'est important dans l'environnement ,En particulier dans un environnement de production.

.La liste suivante peut servir de guide de référence. , Aidez - nous à choisir le bon lecteur de stockage . Voir aussi Docker Sur le site officiel de Linux La documentation la plus récente fournie par l'éditeur pour faire un choix .

    Red Hat Enterprise Linux:4.x Version du noyau ou plus + Docker 17.06 Version ou plus,Utilisation recommandée Overlay2.
    Red Hat Enterprise Linux: Version basse du noyau ou version basse Docker,Utilisation recommandée Device Mapper.
    Ubuntu Linux:4.x Version du noyau ou plus ,Utilisation recommandée Overlay2.
    Ubuntu Linux: Les versions antérieures sont recommandées AUFS.
    SUSE Linux Enterprise Server:Btrfs.

Besoin d'attention constante Docker Liste des derniers supports et versions compatibles des pilotes de stockage dans la documentation , Surtout quand on utilise Docker Version entreprise(EE), Et avec un contrat de soutien après - vente , Il est d'autant plus nécessaire de consulter les documents les plus récents .

 

Device Mapper Configuration
La plupart Linux Le pilote de stockage n'a pas besoin ou nécessite peu de configuration .Mais,Device Mapper Une configuration raisonnable est souvent nécessaire pour obtenir de bonnes performances .Par défaut,Device Mapper Adoption loopback mounted sparse file En tant qu'implémentation sous - jacente pour Docker Support de stockage disponible.

Si vous avez besoin d'une boîte ouverte et que vous n'avez pas besoin de performance , C'est donc possible . Mais cela ne s'applique pas à l'environnement de production .En fait,, Les performances par défaut sont médiocres , Environnement de production non pris en charge .

Pour atteindre Device Mapper Performance optimale dans un environnement de production , L'implémentation sous - jacente doit être modifiée en direct-lvm Mode. Dans ce mode, en utilisant un dispositif à base de blocs nus (Raw Block Device)De LVM Piscine mince(LVM thin pool) Pour une meilleure performance .In Docker 17.06 Et les versions ultérieures peuvent être configurées direct-lvm En tant que pilote de stockage.

Le plus important est , Un seul périphérique bloc peut être configuré de cette façon , Et le réglage ne prend effet qu'après la première installation . Des améliorations pourraient être apportées à l'avenir , Mais pour l'instant, la configuration d'un seul bloc d'équipement présente certains risques en termes de performance et de fiabilité .


Jean Docker Configuration automatique direct-lvm
Les étapes suivantes vont Docker Configurer le pilote de stockage pour Device Mapper,Et utiliser direct-lvm Mode.

1) Ajouter la configuration suivante du pilote de stockage à /etc/docker/daemon.json Milieu.

{
"storage-driver": "devicemapper",
"storage-opts": [
        "dm.directlvm_device=/dev/xdf",
        "dm.thinp_percent=95",
        "dm.thinp_metapercent=1",
        "dm.thinp_autoextend_threshold=80",
        "dm.thinp_autoextend_percent=20",
        "dm.directlvm_device_force=false"
    ]
}
Device Mapper Et LVM Ce sont des points de connaissance très complexes , Voici une brève description de la signification de chaque élément de configuration .

    dm.directlvm_device: La position du dispositif de bloc est réglée . Pour une performance et une disponibilité optimales de stockage , Le périphérique bloc doit être situé sur un périphérique de stockage haute performance (Comme au niveau local SSD)Ou de l'extérieur RAID Au - dessus du tableau de stockage .
    dm.thinp_percent=95: La proportion maximale d'espace de stockage autorisée pour les miroirs et les conteneurs est définie ,Par défaut 95%.
    dm.thinp_metapercent: Mise en place d'un stockage de métadonnées (MetaData Storage) Taille de l'espace de stockage autorisé .Par défaut 1%.
    dm.thinp_autoextend_threshold:C'est réglé. LVM Étendre automatiquement le seuil du pool mince ,Par défaut 80%.
    dm.thinp_autoextend_percent: Indique que lorsque le pool mince est déclenché (thin pool) Quand le mécanisme d'expansion automatique , La taille de l'expansion doit être proportionnelle à l'espace disponible .
    dm.directlvm_device_force: Permet à l'utilisateur de décider s'il faut ou non formater un périphérique bloc dans un nouveau système de fichiers .


2) Redémarrer Docker.

3) Confirmation Docker A fonctionné avec succès , Et la configuration du périphérique bloc a été chargée avec succès .

$ docker system info

Voir principalement si les informations suivantes ont changé

Storage Driver: devicemapper
Pool Name: docker-thinpool
Pool Blocksize: 524.3 kB
Base Device Size: 25 GB
Backing Filesystem: xfs

Même si Docker In direct-lvm Seul un seul périphérique bloc peut être réglé en mode , Ses performances seront également nettement meilleures que loopback Mode.

 

Configuration manuelle Device Mapper De direct-lvm
1) Matériel de bloc(Block Device)
En service direct-lvm En mode, Besoin d'un équipement de bloc disponible . Ces blocs doivent être situés au - dessus des dispositifs de stockage haute performance , Comme au niveau local. SSD Ou des performances externes élevées LUN Stockage.

Si Docker L'environnement est déployé dans le cloud privé de l'entreprise (On-Premise)Au - dessus de,Alors l'extérieur LUN Le stockage peut être utilisé FC、iSCSI, Ou tout autre réseau de stockage supportant le Protocole de périphérique bloc .

Si Docker L'environnement est déployé sur le Cloud public , Vous pouvez utiliser n'importe quel appareil bloc haute performance fourni par un fournisseur de Cloud public (Généralement basé sur SSD).
2) LVMConfiguration
Docker De Device Mapper Utilisation sous - jacente de l'entraînement de stockage LVM(Logical Volume Manager)Pour réaliser,La configuration est donc nécessaire LVM Équipement physique requis 、Groupe de volume、 Volumes logiques et Pools minces . Les volumes physiques dédiés doivent être utilisés et configurés dans le même groupe de volumes . Ce groupe de volume ne devrait pas être Docker Utilisé pour des charges de travail autres que .

Deux volumes logiques supplémentaires doivent également être configurés , Utilisé pour stocker des données et des informations sur les données sources, respectivement .En plus,Pour créer LVM Profil、Désignation LVM Seuil de déclenchement de l'expansion automatique , Et la taille de l'auto - expansion , Et configurer la surveillance correspondante pour l'expansion automatique , Assurez - vous que l'expansion automatique sera déclenchée .
3) Docker Configuration
Modifier Docker Enregistrer le fichier original avant de configurer le fichier (etc/docker/daemon.json),Et puis les modifications.

Dans l'environnement dm.thinpooldev La valeur correspondante de l'élément de configuration peut différer de l'exemple suivant , Doit être modifié pour correspondre à la configuration .

{
    "storage-driver": "devicemapper",
    "storage-opts": [
        "dm.thinpooldev=/dev/mapper/docker-thinpool",
        "dm.use_deferred_removal=true",
        "dm.use_deferred_deletion=true"
    ]
}
Après avoir modifié et sauvegardé la configuration ,Redémarrer Docker daemon.

版权声明
本文为[Petit, York?]所创,转载请带上原文链接,感谢
https://cdmana.com/2022/01/202201080556241561.html

Scroll to Top