GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment copier des fichiers entre les pods Kubernetes et votre machine

Les conteneurs exécutés dans les pods Kubernetes sont censés être des unités de calcul autonomes avec lesquelles vous n'avez pas besoin d'interagir manuellement. Parfois, vous devrez peut-être copier des fichiers vers ou depuis le système de fichiers d'un pod, peut-être parce que vous déboguez un problème et que vous souhaitez archiver les journaux, les fichiers de configuration ou les caches stockés dans un conteneur.

Voici comment déplacer des fichiers entre votre machine et les conteneurs d'un pod, à l'aide de la fonction de transfert intégrée de Kubectl ou d'une alternative manuelle.

Copier vers ou depuis votre machine

Le kubectl cp La commande est le moyen le plus simple de copier vers ou depuis un système de fichiers conteneur. Cela fonctionne de la même manière que le docker cp vous êtes peut-être déjà familiarisé avec le développement de conteneurs locaux.

kubectl cp nécessite des arguments source et destination. L'une des sources ou des destinations doit être une référence de pod. Il est formaté comme le nom du pod, suivi de deux-points et du chemin du système de fichiers dans le conteneur.

kubectl cp example-pod:/tmp/example-dir ./example-dir

Cet exemple copie le contenu de /tmp/example-dir de example-pod vers example-dir sur votre système de fichiers local. Inverser les arguments copierait le example-dir de votre machine retour au pod.

Arguments de la commande

Comme un seul pod peut contenir plusieurs conteneurs, il est important de garder cela à l'esprit lors de l'utilisation de cp . Kubernetes copiera par défaut vers ou depuis la première instance de conteneur dans le pod. Vous pouvez cibler un conteneur spécifique à la place en ajoutant le -c drapeau :

kubectl cp example-pod:/tmp/example-dir ./example-dir -c second-container

Comme tous les autres kubectl commandes, cp s'exécute sur la connexion de cluster définie par votre KUBECONFIG variables d'environnement. Par défaut, c'est ~/.kube/conf .

Il existe deux options lorsque vous faites référence à des pods avec espace de noms. Vous pouvez soit ajouter le standard --namespace example-namespace indicateur ou utilisez un chemin d'accès complet au pod dans votre référence de système de fichiers :

kubectl cp example-namespace/example-pod:/tmp/example-dir ./example-dir

Les attributs de fichier sont conservés par défaut. Ajoutez le --no-preserve indicateur à votre cp commande pour supprimer les données de propriété et d'autorisations des fichiers copiés laissés à la destination. Contrairement à Unix classique cp , l'implémentation de Kubectl est toujours récursive, donc le référencement d'un répertoire inclura également son contenu.

Quand Kubectl Cp ne fonctionnera pas

kubectl cp vient avec une grosse mise en garde :en interne, c'est un simple wrapper autour de tar . La commande compressera le chemin source, copiera l'archive vers la destination, puis extraira son contenu. Votre image de conteneur doit inclure le tar binaire dans son chemin pour que cela fonctionne.

Cela signifie kubectl cp peut ne pas toujours être une option lorsque vous suivez les meilleures pratiques Docker pour garder les images petites. Bien que les bases minimales populaires telles que alpine incluez tar , il peut ne pas figurer dans toutes les images et ne sera pas présent si vous les assemblez à partir de zéro.

L'utilisation de tar limite également ce que kubectl cp peut copier. Vous ne pouvez pas résoudre les liens symboliques ou utiliser des caractères génériques comme /tmp/*.log . Vous devrez utiliser une approche différente lorsque cette fonctionnalité sera nécessaire.

Une option consiste à combiner kubectl exec , le cat commande et redirection du shell pour diffuser le contenu d'un fichier hors du cluster et dans un fichier local :

kubectl exec 
    --namespace example-namespace 
    example-pod -c second-container 
    -- cat /tmp/example-file > local-file

Le kubectl exec La commande démarre une session shell dans le pod. Tout après le -- est exécuté à l'intérieur du conteneur. La sortie de l'appel de cat sur le fichier sera émis vers votre terminal où il pourra être redirigé vers un fichier local.

Cette technique convient lorsque vous copiez une poignée de fichiers relativement petits. Cela deviendrait vite fastidieux si vous aviez besoin de récupérer un répertoire volumineux. Malheureusement, il n'y a pas de meilleure alternative sans ajouter de logiciel supplémentaire à votre conteneur.

Si vous vous sentez audacieux, vous pouvez installer SSH dans votre conteneur et utiliser scp pour accéder à son système de fichiers depuis votre hôte. Cela vous donnerait une expérience de copie complète au détriment de l'exécution d'un démon supplémentaire et de la création d'un problème de sécurité potentiel. Il ne doit être envisagé que sur des clusters correctement protégés.

Ajout de tar à vos images de conteneur est une option beaucoup plus sûre. Cela vous permet d'utiliser kubectl cp et débloque une copie manuelle plus avancée via kubectl exec lorsque vous avez besoin de fonctionnalités supplémentaires. Si vous rencontrez des limitations avec le cp syntaxe, appelez tar directement via kubectl exec pour ajouter des drapeaux supplémentaires à la commande :

kubectl exec 
    --namespace example-namespace 
    example-pod -c second-container 
    -- tar -cf /tmp/example-dir | tar xf - -C ./extracted-dir

Cela exécute tar -cF à l'intérieur de votre conteneur et dirige le résultat vers le tar xf commande d'extraction sur votre machine locale. Le - ordonne à tar pour extraire les données qui lui sont transmises via le flux d'entrée standard. -C est utilisé pour spécifier un répertoire de destination.

Résumé

Le kubectl cp La commande vous permet de copier des fichiers entre les pods Kubernetes et votre machine. Il fonctionne dans les deux sens mais ne peut pas être utilisé pour déplacer des fichiers d'un pod à l'autre. Si vous devez le faire, il est préférable d'utiliser une procédure en deux étapes, en copiant d'abord du pod A vers votre machine, puis vers le pod B.

Comme cp repose sur tar sous le capot, vous devez vous assurer que votre image de conteneur l'inclut. Vous verrez un No such file or directory tar erreur si vous essayez d'exécuter cp contre un pod sans tar . Dans cette situation, soit ajouter tar au conteneur ou utilisez une combinaison de kubectl exec et cat si vous n'avez besoin de récupérer que quelques fichiers.


Docker
  1. Comment transférer des fichiers entre des machines locales et distantes à l'aide du protocole SFTP

  2. Comment copier en toute sécurité des fichiers entre des hôtes Linux à l'aide de SCP et SFTP

  3. Comment copier et modifier des fichiers dans le shell Android ?

  4. Rechercher et copier des fichiers

  5. Comment partager des fichiers entre Ubuntu et Mac OS X

Comment partager des fichiers de jeu Steam entre Linux et Windows

Comment utiliser FTP pour déplacer des fichiers entre votre ordinateur et votre appareil Android

Comment copier des fichiers et des répertoires dans un terminal Linux

Comment utiliser Docker Cp pour copier des fichiers entre l'hôte et les conteneurs

Comment copier des fichiers avec Docker cp dans votre conteneur Docker

Comment copier des fichiers entre l'hôte et le conteneur Docker