k8s 容器拷贝文件
有时候我们需要把pod中的文件下载到本地,k8s本身提供了kubectl cp命令。
语法
复制 files 和 directories 到 containers 和从容器中复制 files 和 directories.
Examples:
# !!!Important Note!!!
# Requires that the 'tar' binary is present in your container
# image. If 'tar' is not present, 'kubectl cp' will fail.
#
# For advanced use cases, such as symlinks, wildcard expansion or
# file mode preservation consider using 'kubectl exec'.
# Copy /tmp/foo local file to /tmp/bar in a remote pod in namespace <some-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
# Copy /tmp/foo_dir local directory to /tmp/bar_dir in a remote pod in the default namespace
kubectl cp /tmp/foo_dir <some-pod>:/tmp/bar_dir
# Copy /tmp/foo local file to /tmp/bar in a remote pod in a specific container
kubectl cp /tmp/foo <some-pod>:/tmp/bar -c <specific-container>
# Copy /tmp/foo local file to /tmp/bar in a remote pod in namespace <some-namespace>
kubectl cp /tmp/foo <some-namespace>/<some-pod>:/tmp/bar
# Copy /tmp/foo from a remote pod to /tmp/bar locally
kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar
Options:
-c, --container='': Container name. If omitted, the first container in the pod will be chosen
--no-preserve=false: The copied file/directory's ownership and permissions will not be preserved in the container
Usage:
kubectl cp <file-spec-src> <file-spec-dest> [options]
Use "kubectl options" for a list of global command-line options (applies to all commands).
kubectl cp命令拷贝容器中文件到本地
$ kubectl exec jenkins-builder-zbd4p -n jenkins -- tar cf - /home/jenkins/agent/maven-repositories/0 | sudo tar xf - -C .
Defaulting container name to node.
Use 'kubectl describe pod/jenkins-builder-zbd4p -n jenkins' to see all of the containers in this pod.
tar: Removing leading `/' from member names
[root@iZ0xidn9x6aujoamu80eqnZ test]$ cd home/jenkins/agent/maven-repositories/0/
[root@iZ0xidn9x6aujoamu80eqnZ 0]$ ls
antlr backport-util-concurrent cn commons-collections commons-io commons-logging jakarta junit redis xml-apis
aopalliance ch com commons-configuration commons-jxpath dom4j javax net software xmlpull
asm classworlds commons-codec commons-fileupload commons-lang io joda-time org stax xpp3
kubectl cp命令拷贝本地文件到容器中
[root@iZ0xidn9x6aujoamu80eqnZ test]$ echo 123 > 1.txt
[root@iZ0xidn9x6aujoamu80eqnZ test]$ kubectl cp /root/test/1.txt jenkins-builder-9vh83:/root -n jenkins
Defaulting container name to node.
#进入容器查看文件
[root@iZ0xidn9x6aujoamu80eqnZ ~]$ kubectl exec -it jenkins-builder-9vh83 -n jenkins /bin/bash
root@jenkins-builder-9vh83:~# cat /root/1.txt
123
root@jenkins-builder-9vh83:~#
扩展:docker 拷贝文件
语法
Usage: docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
Copy files/folders between a container and the local filesystem
docker 拷贝容器中文件到本地
root@app:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
22dd5523a639 sonatype/nexus3 "sh -c ${SONATYPE_DI…" 16 months ago Up 3 days 0.0.0.0:8081-8082->8081-8082/tcp nexus
root@app:~# docker cp 22dd5523a639:/var/log/dnf.log .
root@app:~# ls
dnf.log
docker拷贝本地文件到容器内
root@app:~# echo 123 >123.log
root@app:~# docker cp 123.log 22dd5523a639:/var/log/
root@app:~# docker exec 22dd5523a639 cat /var/log/123.log
123