Gir*_*ish 14 kubernetes azure-kubernetes azure-aks
我正在尝试将文件从Kubernetes Pods复制到我的本地系统。运行以下命令时出现以下错误:
kubectl cp aks-ssh2-6cd4948f6f-fp9tl:/home/azureuser/test.cap ./test.cap
Run Code Online (Sandbox Code Playgroud)
输出:
tar:home / azureuser / test:无法统计:没有这样的文件或目录tar:由于先前的错误而以失败状态退出错误:home / azureuser / test没有这样的文件或目录
我可以在上面给定的路径下看到文件。我真的很困惑。
你能帮我吗?
小智 33
假设您要将文件从 bin 文件夹复制到本地系统。命令是
kubectl cp default/POD_NAME:bin/FILE_NAME /Users/username/FILE_NAME
Run Code Online (Sandbox Code Playgroud)
您可以连接到 POD 以验证您是否指定了正确的文件名
kubectl exec -ti POD_NAME bash
Run Code Online (Sandbox Code Playgroud)
小智 17
根据https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
kubectl cp <file-spec-src> <file-spec-dest> 相当于使用
kubectl exec -n <some-namespace> <some-pod> -- tar cf - <src-file> | tar xf - -C <dest-file>
所以从技术上讲,如果你没有在 pod 上安装 tar,你可以这样做 kubectl exec -n <some-namespace> <some-pod> -- cat <src-file> > <dest-file>
假设文件很小或者已经压缩过,效果应该是一样的,只是不能在一个目录或一组文件上使用 cat 。
sha*_*359 17
该线程上的一些用户已经提到了 kubectl cp 命令。
kubectl cp <pod-id>:<path> <local-path> -n <namespace> -c <specific_container>
Run Code Online (Sandbox Code Playgroud)
请注意,要运行此命令,pod 上应已安装tar实用程序。
但是,我在Windows PowerShell上运行此命令时遇到了一些错误。
PS P:\Users\nstty\Downloads\k8s-diags> kubectl cp dremio-master-0:/var/log/dremio/server.log P:\Users\nstty\Downloads\k8s-diags\server-logs\
error: one of src or dest must be a local file specification
Run Code Online (Sandbox Code Playgroud)
错误:src 或 dest 之一必须是本地文件规范
在 Windows 上运行此命令时,不要使用本地系统的完整路径。请改用相对路径(. 或 ..)。现在在下面的命令中使用相对路径,但出现不同的错误。
PS P:\Users\nstty\Downloads\k8s-diags> kubectl cp dremio-master-0:/var/log/dremio/server.log .
tar: Removing leading `/' from member names
error: open .: is a directory
Run Code Online (Sandbox Code Playgroud)
错误:打开 .: 是一个目录
如果要复制文件,则在本地路径中使用相对路径以及复制文件所需的文件名。kubectl 会首先创建这个文件,然后将内容复制到这个文件中。下面是工作命令。
PS P:\Users\nstty\Downloads\k8s-diags> kubectl cp dremio-master-0:/var/log/dremio/server.log .\server-logs\server.log
tar: Removing leading `/' from member names
Run Code Online (Sandbox Code Playgroud)
tar:从成员名称中删除前导“/”
此消息只是来自 pod 中 tar 实用程序的警告。该文件应复制到您的本地系统。
替代选项:如果您想避免 kubectl cp,这里是我们使用的另一种方法。
Md *_*ikh 13
“kubectl cp”命令用于将文件从 pod 复制到本地路径,反之亦然
将文件从 pod 复制到本地
kubectl cp <pod_name>:<文件路径> <目标路径>
将文件从 pod 的特定容器复制到本地
kubectl cp <pod_name>:<file_path> <destination_path> -c Specific_container
将文件从本地复制到 pod
kubectl cp <本地源路径> <pod_name>:<目标路径>
Cro*_*rou 12
如kubectl帮助中所述:
kubectl cp --help
Copy files and directories to and from containers.
Examples:
# !!!Important Note!!!
# Requires that the 'tar' binary is present in your container
# image. If 'tar' is not present, 'kubectl cp' will fail.
# 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
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).
Run Code Online (Sandbox Code Playgroud)
您也可以登录到您的站点Containter并检查文件是否存在:
kubectl exec -it aks-ssh2-6cd4948f6f-fp9tl /bin/bash
ls -la /home/azureuser/test.cap
Run Code Online (Sandbox Code Playgroud)
如果仍然无法解决问题,请尝试:
您可以尝试将文件复制到workdir,然后仅使用文件名重试。这很奇怪,但目前仍然有效。
在这里考虑kchugalinskiy的建议#58692。
Nag*_*gev 12
发布的问题中的命令是绝对正确的。作为回答之前,这个特殊的问题似乎是缺少tar在容器二进制文件。我实际上不知道它是必需的,但确认 pod 有它:
# find / -name tar
/bin/tar
/usr/lib/mime/packages/tar
/usr/share/doc/tar
Run Code Online (Sandbox Code Playgroud)
我的错误是.用于复制到当前目录(与cp和 一起使用scp),因为它需要完整路径,如原始问题所示:
kubectl cp pod-name-shown-in-get-pods:path/to/filename /local/dir/filename
Run Code Online (Sandbox Code Playgroud)
但不是:
kubectl cp pod-name-shown-in-get-pods:path/to/filename .
Run Code Online (Sandbox Code Playgroud)
这使:
error: open .: is a directory
tar: Removing leading `/' from member names
Run Code Online (Sandbox Code Playgroud)
现在tar错误消息中的 是有道理的!
请注意,如果源路径中有前导/,如下例所示:
kubectl cp pod-name-shown-in-get-pods:/etc/resolv.conf /local/dir/resolv.conf
Run Code Online (Sandbox Code Playgroud)
您还会看到:
tar: Removing leading `/' from member names
Run Code Online (Sandbox Code Playgroud)
但是,可以忽略警告,因为文件仍会被复制。在上面的例子中使用etc/resolv.conf而不是/etc/resolv.conf在没有警告的情况下进行复制。
kubectl cp <pod-id>:<path> <destination-path> -n <namespace>
Run Code Online (Sandbox Code Playgroud)
为我工作。
| 归档时间: |
|
| 查看次数: |
22957 次 |
| 最近记录: |