Я пытаюсь скопировать локальный файл 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
на этих узлах поток всегда пуст.
Таким образом, следующая команда выдает пустой файл в модуле, работающем на узле с поддержкой графического процессора, в то время как файл не пуст на других узлахбез поддержки графического процессора:
cat nonempty_file.txt | kubectl exec -i pod -- tee /home/jovyan/empty_file.txt
Это было проверено с использованием одинакового изображения / контейнера на обоих узлах.