Как повторить попытку извлечения изображения в контейнерах кубернетов?

92

Я новичок в кубернетах. У меня проблема со стручками. Когда я запускаю команду

 kubectl get pods

Результат:

NAME                   READY     STATUS             RESTARTS   AGE
mysql-apim-db-1viwg    1/1       Running            1          20h
mysql-govdb-qioee      1/1       Running            1          20h
mysql-userdb-l8q8c     1/1       Running            0          20h
wso2am-default-813fy   0/1       ImagePullBackOff   0          20h

Из-за проблемы с узлом «wso2am-default-813fy» мне нужно перезапустить его. Любое предложение?

Дилшани Субасингхе
источник

Ответы:

69

Обычно в случае "ImagePullBackOff" повторяется через несколько секунд / минут. Если вы хотите повторить попытку вручную, вы можете удалить старый модуль и воссоздать его заново. Однострочная команда для удаления и воссоздания модуля:

kubectl replace --force -f <yml_file_describing_pod>
Айон Нахиян
источник
6
Если у вас есть набор репликации / контроллер, управляющий этим модулем, новый модуль должен быть автоматически создан после его уничтожения.
Hem
^^ абсолютно. Я был бы очень обеспокоен, если бы смертоносная капсула исчезла навсегда.
Дэмиен Рош
3
Я считаю, kubectl replace --force -f ...что это было бы эквивалентно удалению с последующим созданием
Оливер
1
Если ваш модуль создан с помощью развертывания, просто удалите модуль - новый будет создан автоматически
Иллидан
Зачем --forceнужна опция?
mchawre
222

В случае отсутствия файла yaml:

kubectl get pod PODNAME -n NAMESPACE -o yaml | kubectl replace --force -f -

Мацек Савицкий
источник
19
$ kubectl replace --force -f <resource-file>

если все пойдет хорошо, вы должны увидеть что-то вроде:

<resource-type> <resource-name> deleted
<resource-type> <resource-name> replaced

подробности об этом можно найти в документации Kubernetes, на страницах «manage-deployment» и kubectl-cheatsheet на момент написания.

EversMcc
источник
Как узнать, как должен выглядеть файл ресурсов для модуля? Я видел файл ./pod.json, но в ссылке не упоминается какой-либо шаблон или что-то подобное
Доминик Пол
7

Если Podявляется частью Deploymentили Service, удаление его перезапустит Podи, возможно, поместит его на другой узел:

$ kubectl delete po $POD_NAME

replaceесли это физическое лицо Pod:

$ kubectl get po -n $namespace $POD_NAME -o yaml | kubectl replace -f -

Карлос Нуньес
источник
2

Попробуйте удалить модуль, он снова попытается извлечь изображение.

kubectl delete pod <pod_name> -n <namespace_name>

Сачин Ароте
источник
0

Сначала попробуйте увидеть, что не так с модулем:

kubectl logs -p <your_pod>

В моем случае это была проблема с файлом YAML.

Итак, мне нужно было исправить файл конфигурации и заменить его:

kubectl replace --force -f <yml_file_describing_pod>
Edubriguenti
источник
0

Скорее всего, проблема ImagePullBackOff связана либо с отсутствием изображения, либо с проблемой с файлом YAML модуля.

Что я сделаю это

kubectl get pod -n $namespace $POD_NAME --export > pod.yaml | kubectl -f apply -

Я бы также посмотрел pod.yaml, чтобы узнать, почему предыдущий модуль не работал

Анкур Котари
источник