Kubernetes client kubectl
provides cp
sub command to copy file from pod to local filesystem or from local filesystem to pod.
You can use the kubectl cp
command to copy files from a pod to your local system.
The syntax for the command is as follows:
kubectl cp <namespace>/<pod-name>:<pod-file-path> <local-file-path>
For example, if you have a pod named “my-pod” in the “my-namespace” namespace and you want to copy the file “config.json” from the pod’s “/etc/config” directory to your local system’s “/tmp” directory, you can use the following command:
kubectl cp my-namespace/my-pod:/etc/config/config.json /tmp/config.json
You can also copy files from a container within a pod to your local system, by specifying the container name after the pod name.
kubectl cp my-namespace/my-pod:container-name:/etc/config/config.json /tmp/config.json
Note
to run this command tar utility should already be installed on the pod.
kubctl cp
equals to the following command:
#Copy /tmp/foo local file to /tmp/bar in a remote pod in namespace
tar cf - /tmp/foo | kubectl exec -i -n <some-namespace> <some-pod> -- tar xf - -C /tmp/bar
#Copy /tmp/foo from a remote pod to /tmp/bar locally
kubectl exec -n <some-namespace> <some-pod> -- tar cf - /tmp/foo | tar xf - -C /tmp/bar
It’s important to note that the kubectl cp
command uses the container’s filesystem, not the host’s filesystem, which means that you can only copy files that are present within the container’s filesystem and not on the host. Additionally, you need to have permissions to access the pod or container and the pod should be running.
An alternative way is to use kubectl exec command to open a shell inside the pod and use standard commands such as cp, scp or tar to copy the files.
kubectl exec -it my-pod -c container-name -- bash
Once you’re inside the pod, you can copy the files using the standard commands.
cp /etc/config/config.json /tmp/config.json
You can then use exit
command to exit the pod’s shell, and use scp
to copy the file from the pod to your local machine.