Jak ponowić próbę pobrania obrazu w podach Kubernetes?

92

Jestem nowy w Kubernetes. Mam problem w strąkach. Kiedy uruchamiam polecenie

 kubectl get pods

Wynik:

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

Ze względu na problem z węzłem „wso2am-default-813fy” muszę go ponownie uruchomić. Jakieś sugestie?

Dilshani Subasinghe
źródło

Odpowiedzi:

70

Zwykle w przypadku „ImagePullBackOff” jest to ponawiane po kilku sekundach / minutach. Jeśli chcesz spróbować ponownie ręcznie, możesz usunąć stary pojemnik i odtworzyć go. Jedno wierszowe polecenie do usunięcia i ponownego utworzenia kapsuły to:

kubectl replace --force -f <yml_file_describing_pod>
Ayon Nahiyan
źródło
6
Jeśli masz zestaw replikacyjny / kontroler zarządzający tym kapsułem, po jego zabiciu powinien zostać automatycznie utworzony nowy pod.
Hem
^^ absolutnie. Byłbym bardzo zmartwiony, gdyby zabijając kapsułę, zniknął na dobre.
Damien Roche
3
Uważam, że kubectl replace --force -f ...byłoby to równoważne usunięciu, a następnie utworzeniu
Oliver
1
Jeśli Twój kapsuła została utworzona za pomocą wdrożenia, po prostu usuń kapsułę - nowa zostanie utworzona automatycznie
Illidan
Dlaczego ta --forceopcja jest wymagana?
mchawre
221

W przypadku braku pliku yaml:

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

Maciek Sawicki
źródło
19
$ kubectl replace --force -f <resource-file>

jeśli wszystko pójdzie dobrze, powinieneś zobaczyć coś takiego:

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

szczegóły na ten temat można znaleźć w dokumentacji Kubernetes, na stronach „manage-deployment” i kubectl-cheatsheet w momencie pisania.

eversMcc
źródło
Skąd mam wiedzieć, jak powinien wyglądać plik zasobów dla kapsuły? Widziałem plik ./pod.json, ale link nie wspomina o żadnym szablonie ani podobnym
Dominique Paul
7

Jeśli Podjest częścią Deploymentlub Service, usunięcie go spowoduje ponowne uruchomienie Podi potencjalnie umieszczenie go w innym węźle:

$ kubectl delete po $POD_NAME

replacejeśli jest to osoba fizyczna Pod:

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

Carlos Nunez
źródło
2

Spróbuj z usunięciem poda, spróbuje ponownie pobrać obraz.

kubectl delete pod <pod_name> -n <namespace_name>

Sachin Arote
źródło
0

Najpierw spróbuj sprawdzić, co jest nie tak z kapsułą:

kubectl logs -p <your_pod>

W moim przypadku był to problem z plikiem YAML.

Musiałem więc poprawić plik konfiguracyjny i zastąpić go:

kubectl replace --force -f <yml_file_describing_pod>
edubriguenti
źródło
0

Najprawdopodobniej problem z ImagePullBackOff wynika z braku obrazu lub problemu z plikiem pod YAML.

Zrobię to

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

Chciałbym również zobaczyć plik pod.yaml, aby zobaczyć, dlaczego wcześniejszy moduł nie działał

Ankur Kothari
źródło