GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo copiar archivos entre pods de Kubernetes y su máquina

Los contenedores que se ejecutan en Kubernetes Pods están destinados a ser unidades informáticas independientes con las que no es necesario interactuar manualmente. Sin embargo, a veces es posible que deba copiar archivos hacia o desde el sistema de archivos de un Pod, tal vez porque está depurando un problema y desea archivar registros, archivos de configuración o cachés almacenados en un contenedor.

Aquí le mostramos cómo mover archivos entre su máquina y los contenedores en un Pod, utilizando la función de transferencia integrada de Kubectl o una alternativa manual.

Copiar ao desde su equipo

El kubectl cp El comando es la forma más sencilla de copiar hacia o desde un sistema de archivos contenedor. Funciona de manera similar al docker cp es posible que ya esté familiarizado con el desarrollo de contenedores locales.

kubectl cp requiere argumentos de origen y destino. Una de las fuentes o destinos debe ser una referencia de Pod. Tiene el formato del nombre del Pod, seguido de dos puntos y la ruta del sistema de archivos del contenedor.

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

Este ejemplo copia el contenido de /tmp/example-dir de example-pod a example-dir en su sistema de archivos local. Invertir los argumentos copiaría el example-dir de su máquina de vuelta al Pod.

Argumentos de comando

Como un solo pod puede contener varios contenedores, es importante tener esto en cuenta al usar cp . Kubernetes utilizará de forma predeterminada la copia hacia o desde la primera instancia de contenedor dentro del Pod. En su lugar, puede dirigirse a un contenedor específico agregando -c bandera:

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

Como todos los demás kubectl comandos, cp se ejecuta contra la conexión del clúster definida por su KUBECONFIG Variable ambiental. Esto por defecto es ~/.kube/conf .

Hay dos opciones cuando hace referencia a pods con espacio de nombres. Puede agregar el estándar --namespace example-namespace marque o use una ruta de Pod completa en la referencia de su sistema de archivos:

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

Los atributos de archivo se conservan de forma predeterminada. Agrega el --no-preserve marca a tu cp Comando para eliminar los datos de propiedad y permisos de los archivos copiados que quedan en el destino. A diferencia de Unix normal cp , la implementación de Kubectl siempre es recursiva, por lo que hacer referencia a un directorio también incluirá su contenido.

Cuando Kubectl Cp no funciona

kubectl cp viene con una gran advertencia:internamente, es un simple envoltorio alrededor de tar . El comando comprimirá la ruta de origen, copiará el archivo en el destino y luego extraerá su contenido. La imagen de su contenedor debe incluir el tar binario en su camino para que esto funcione.

Esto significa kubectl cp Puede que no siempre sea una opción cuando sigue las mejores prácticas de Docker para mantener las imágenes pequeñas. Aunque las bases mínimas populares como alpine incluya tar , es posible que no aparezca en todas las imágenes y no estará presente si las ensambla desde cero.

El uso de tar también limita lo que kubectl cp puede copiar No puede resolver enlaces simbólicos o usar comodines como /tmp/*.log . Tendrá que usar un enfoque diferente cuando se necesite esta funcionalidad.

Una opción es combinar kubectl exec , el cat comando y redirección de shell para transmitir el contenido de un archivo fuera del clúster y en un archivo local:

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

El kubectl exec El comando inicia una sesión de shell en el Pod. Todo después del -- se ejecuta dentro del contenedor. El resultado de llamar a cat en el archivo se emitirá a su terminal donde se puede redirigir a un archivo local.

Esta técnica es adecuada cuando está copiando un puñado de archivos relativamente pequeños. Rápidamente se volvería tedioso si necesitara recuperar un directorio grande. Desafortunadamente, no hay mejor alternativa sin agregar software adicional a su contenedor.

Si se siente atrevido, puede instalar SSH en su contenedor y usar scp para acceder a su sistema de archivos desde su host. Esto le brindaría una experiencia de copia completa a expensas de ejecutar un demonio adicional y crear un posible problema de seguridad. Solo debe considerarse en clústeres debidamente protegidos.

Agregando tar a las imágenes de su contenedor es una opción mucho más segura. Esto le permite usar kubectl cp y desbloquea la copia manual más avanzada a través de kubectl exec cuando necesite funcionalidad adicional. Si encuentra limitaciones con el cp sintaxis, invoque tar directamente a través de kubectl exec para agregar banderas adicionales al comando:

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

Esto ejecuta tar -cF dentro de su contenedor y canaliza el resultado al tar xf comando de extracción en su máquina local. El - instruye a tar para extraer los datos que se le alimentan a través del flujo de entrada estándar. -C se utiliza para especificar un directorio de destino.

Resumen

El kubectl cp El comando le permite copiar archivos entre Kubernetes Pods y su máquina. Funciona en cualquier dirección, pero no se puede usar para mover archivos de Pod a Pod. Si necesita hacer eso, es mejor usar un procedimiento de dos etapas, copiando primero desde el Pod A a su máquina, luego hacia el Pod B.

Como cp se basa en tar bajo el capó, debe asegurarse de que la imagen de su contenedor lo incluya. Verá un No such file or directory tar error si intenta ejecutar cp contra un Pod sin tar . En esta situación, agregue tar al contenedor o use una combinación de kubectl exec y cat si solo necesita recuperar algunos archivos.


Docker
  1. Cómo transferir archivos entre máquinas locales y remotas usando el protocolo SFTP

  2. Cómo copiar archivos de forma segura entre hosts Linux utilizando SCP y SFTP

  3. ¿Cómo copiar y editar archivos en el shell de Android?

  4. Buscar y copiar archivos

  5. Cómo compartir archivos entre Ubuntu y Mac OS X

Cómo compartir archivos de juegos de Steam entre Linux y Windows

Cómo usar FTP para mover archivos entre su computadora y su dispositivo Android

Cómo copiar archivos y directorios en la terminal de Linux

Cómo usar Docker Cp para copiar archivos entre el host y los contenedores

Cómo copiar archivos con Docker cp a su Docker Container

Cómo copiar archivos entre el host y el contenedor Docker