kubectl cp не работает с tar: это не похоже на tar-архив на узлах, на которых работает 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 должен быть доступен в контейнере, и это так.

Кто-нибудь знает, что здесь происходит и как я могу это решить?

ОБНОВЛЕНИЕ:

После еще нескольких тестов я могу подтвердить, что это происходит только на узлах, которые работают nvidia-docker, а не на обычных docker. При подаче чего-либо в kubectl exec на этих узлах поток всегда пуст.

Таким образом, следующая команда дает пустой файл в модуле, работающем на узле с поддержкой графического процессора, в то время как файл не является пустым на других узлах без поддержки графического процессора:

cat nonempty_file.txt | kubectl exec -i pod -- tee /home/jovyan/empty_file.txt 

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


person Simon G.    schedule 21.10.2019    source источник
comment
Можете ли вы попробовать с этим, я решил свою ошибку с помощью программы go stackoverflow.com/a/55901093/3053228   -  person prashant    schedule 21.10.2019
comment
Тот факт, что это работает на одном узле, а не на другом, звучит очень подозрительно. Можете ли вы дважды проверить, что контейнер действительно такой же, когда вы запускаете копию для каждого и обновляете свой вопрос, показывая это?   -  person Dandy    schedule 21.10.2019
comment
Также следите за распространением версии между вашим kubectl двоичным файлом и сервером, поскольку разница версий фактически ограничена   -  person mdaniel    schedule 21.10.2019
comment
Я действительно обновил kubectl, пытаясь исправить эту проблему. Младшая версия клиента была 14 раньше, и это дало мне ту же ошибку.   -  person Simon G.    schedule 21.10.2019
comment
не могли бы вы попробовать это: cat /path/to/file.py | kubectl exec -it pod -- tee path/in/container/file.py 2>/dev/null   -  person Mark    schedule 21.10.2019
comment
@Hanx, эта команда не работает с невозможностью использовать TTY - ввод не является терминалом или правильным типом файла   -  person Simon G.    schedule 24.10.2019
comment
1. Если вы используете какое-либо официальное изображение, пожалуйста, предоставьте дополнительную информацию об этом изображении. 2. Вы можете использовать ConfigMap и примените свой сценарий к POD. 3. Вы можете использовать volume и сделать то же самое. 4. Вы можете добавить свой файл в файл докера на этапе сборки.   -  person Mark    schedule 24.10.2019
comment
Оказывается, он действительно работает на одном узле, а не на другом - используя одно и то же изображение. Разница в том, что узел, на котором он не работает, работает под управлением nvidia-docker, что, как я подозреваю, является здесь виновником. Я соответствующим образом обновил исходный вопрос.   -  person Simon G.    schedule 01.11.2019
comment
Я не могу проверить это, но не могли бы вы попробовать в качестве обходного пути и использовать configmap или тома вместо этого для этой конкретной задачи, как описано выше?   -  person Mark    schedule 04.11.2019
comment
Есть какие-нибудь обновления по этому поводу? Я не могу придумать причину, по которой kubectl cp сломается для контейнеров nvidia-docker. Спасибо за все усилия, которые вы вложили в отладку до сих пор. Я использую клиент 1.14.9 и EKS 1.14.9+.   -  person Thomas Havlik    schedule 16.01.2020
comment
ОБНОВЛЕНИЕ: kubectl cp в pod, похоже, вообще не работает с AL2_x86_64_GPU типом AMI. Прекрасно работает с AL2_x86_64. Эта проблема, вероятно, также связана с github.com/NVIDIA/nvidia-docker/issues/1091   -  person Thomas Havlik    schedule 16.01.2020
comment
Проблема сохраняется, поэтому я также сообщил об этом в AWS: github.com/ awslabs / amazon-eks-ami / issues / 453. Что интересно, в Azure этой проблемы нет.   -  person Simon G.    schedule 20.04.2020


Ответы (2)


Проблема решена обновлением версии EKS AMI.

Установите новый выпуск: eks-ami-Release.

См. eks-ami-kubectl.

person Malgorzata    schedule 09.03.2021

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

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

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

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

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

person Mark    schedule 24.10.2019
comment
Как отмечалось в комментариях к исходному вопросу, эта проблема не связана с разницей в версиях. У меня была установлена ​​соответствующая версия kubectl, когда я впервые столкнулся с этой проблемой, и впоследствии я обновил kubectl, пытаясь решить мою проблему. - person Simon G.; 25.10.2019
comment
Вы пробовали это решение - person Mark; 28.10.2019