在运行nvidia-docker的节点上,kubectl cp失败并显示“ tar:这看起来不像tar存档”

时间:2019-10-21 04:03:58

标签: kubernetes kubectl amazon-eks aws-eks nvidia-docker

我试图将本地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 

这已经在两个节点上使用完全相同的图像/容器进行了测试。

2 个答案:

答案 0 :(得分:1)

问题通过更新 EKS AMI 版本解决。

请安装新版本:eks-ami-releases

参见:eks-ami-kubectl

答案 1 :(得分:0)

请查看文档:

  • Supported releases and component skew

      

    节点可能落后于主组件最多两个次要版本,但节点的版本应不比主节点新。 客户端与主服务器的偏斜版本不得超过一个,但可以最多向主服务器偏斜一个次版本。例如,一个v1.3主服务器应与v1.1,v1.2和v1.3节点一起使用,并应与v1.2,v1.3和v1.4客户端一起使用。

  • 其他github issues

  • k8s docs

  

kubectl在kube-apiserver的一个次要版本(旧版本或较新版本)中受支持。

  • v1.16.0 release
      

    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版本。

希望获得帮助