kubectl cp завершается с ошибкой «tar: это не похоже на архив tar» на узлах, работающих под управлением nvidia-docker - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь скопировать локальный файл 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 

Это было проверено с использованием одинакового изображения / контейнера на обоих узлах.

1 Ответ

0 голосов
/ 24 октября 2019

Пожалуйста, посмотрите документы:

  • Поддерживаемые выпуски и перекос компонентов ,

    Узлы могут отставать от компонентов мастера подо двух минорных версий, но не более новой версии, чем основная; клиент должен быть перекошен не более чем одной вспомогательной версией от мастера , но может вести мастера до одной вспомогательной версии. Например, мастер v1.3 должен работать с узлами v1.1, v1.2 и v1.3 и должен работать с клиентами v1.2, v1.3 и v1.4.

  • другие проблемы с GitHub ,

  • k8s документы ,

kubectl поддерживается в одной вспомогательной версии (более старой или новой) kube-apiserver.

  • v1.16.0 выпуск

    kubectlcp больше не поддерживает копирование символических ссылок из контейнеров;для поддержки этого варианта использования см. kubectl cp --help для примеров использования файлов и каталогов tar напрямую opy в и из контейнеров.

Examples: # !!!Important Note!!! # Requires that the 'tar' binary is present in your container # image. If 'tar' is not present, 'kubectl cp' will fail.

Пожалуйста, попробуйте и установите соответствующую kubectl версию.

Надеюсь, эта помощь

...