我试图将本地Python文件复制到Kubernetes上正在运行的容器中,但失败:
$ kubectl cp /path/to/file.py namespace/pod:/path/in/container/file.py
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors
command terminated with exit code 2
我知道tar
二进制文件必须在容器中可用,并且确实可用。
有人知道这里发生了什么,我该如何解决?
这是kubectl version
的输出:
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T23:42:50Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"14+", GitVersion:"v1.14.6-eks-5047ed", GitCommit:"5047edce664593832e9b889e447ac75ab104f527", GitTreeState:"clean", BuildDate:"2019-08-21T22:32:40Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}
注意:我知道版本不同,但是在更新到最新的kubectl
之前就存在此问题,因此我可以排除版本差异导致的问题。 >
更新:
经过更多测试后,我可以确认这仅在运行nvidia-docker
的节点上发生,而不是在常规docker
上发生。当将内容传送到这些节点上的kubectl exec
时,流始终为空。
因此,以下命令会在启用GPU的节点上运行的Pod中产生一个空文件,而在其他没有GPU支持的节点上该文件是非空的:
cat nonempty_file.txt | kubectl exec -i pod -- tee /home/jovyan/empty_file.txt
这已经在两个节点上使用完全相同的图像/容器进行了测试。
答案 0 :(得分:1)
答案 1 :(得分:0)
请查看文档:
Supported releases and component skew,
节点可能落后于主组件最多两个次要版本,但节点的版本应不比主节点新。 客户端与主服务器的偏斜版本不得超过一个,但可以最多向主服务器偏斜一个次版本。例如,一个v1.3主服务器应与v1.1,v1.2和v1.3节点一起使用,并应与v1.2,v1.3和v1.4客户端一起使用。
kubectl在kube-apiserver的一个次要版本(旧版本或较新版本)中受支持。
kubectl cp不再支持从容器复制符号链接;为了支持这个用例, 有关直接使用tar的示例,请参见kubectl cp --help 在容器之间来回操作文件和目录。
Examples:
# !!!Important Note!!!
# Requires that the 'tar' binary is present in your container
# image. If 'tar' is not present, 'kubectl cp' will fail.
请尝试安装适当的kubectl
版本。
希望获得帮助