Человек чувствует свой долг лишь в том случае, если он свободен (А. Бергсон).

3 мин для чтенияКак перезапустить поды в Kubernetes

FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
15 сентября 2020
Как читать узлы в Kubernetes
Иногда вы можете попасть в ситуацию, когда вам нужно перезапустить Pod. Например, если ваш модуль находится в состоянии ошибки.

В зависимости от политики перезапуска Kubernetes сам пытается перезапустить и исправить это.

Но если это не сработает и вы не можете найти источник ошибки, перезапуск Kubernetes Pod вручную – это самый быстрый способ заставить ваше приложение снова заработать.

 

Как перезапустить поды в Kubernetes

К сожалению, для этой цели нет команды kubectl restart pod. Вот несколько способов перезапустить поды:

  1. Модуль развертывания перезапускается
  2. Масштабирование количества реплик

Позвольте нам подробно показать вам оба метода.

 

Метод 1. Перезапуск модуля развертывания

Начиная с версии Kubernetes 1.15, вы можете выполнять непрерывный перезапуск развертываний.

Контроллер убивает по одному модулю за раз и полагается на ReplicaSet для масштабирования новых модулей, пока все модули не станут новее, чем время перезапуска. На наш взгляд, это лучший способ перезапустить ваши поды, так как ваше приложение не выйдет из строя.

Примечание
IP-адреса отдельных модулей будут изменены.

 

Возьмем пример. У вас есть развертывание с именем my-dep, которое состоит из двух модулей (поскольку для реплики установлено значение два).

root@andreyex:~# kubectl get deployments
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
my-dep   2/2     2            2           13s

 

Давайте узнаем детали pod:

root@andreyex:~# kubectl get pod -o wide
NAME                      READY   STATUS    RESTARTS   AGE   IP               NODE          NOMINATED NODE   READINESS GATES
my-dep-6d9f78d6c4-8j5fq   1/1     Running   0          47s   172.16.213.255   kworker-rj2   <none>           <none>
my-dep-6d9f78d6c4-rkhrz   1/1     Running   0          47s   172.16.213.35    kworker-rj1   <none>           <none>

 

Теперь давайте развернем перезапуск для развертывания my-dep с помощью такой команды:

kubectl rollout restart deployment name_of_deployment

 

Вы помните название развертывания из предыдущих команд? Используйте это здесь:

root@andreyex:~# kubectl rollout restart deployment my-dep
deployment.apps/my-dep restarted

 

Вы можете наблюдать за процессом завершения работы старых модулей и создания новых с помощью команды kubectl get pod -w:

root@andreyex:~# kubectl get pod -w
NAME                      READY   STATUS              RESTARTS   AGE
my-dep-557548758d-kz6r7   1/1     Running             0          5s
my-dep-557548758d-svg7w   0/1     ContainerCreating   0          1s
my-dep-6d9f78d6c4-8j5fq   1/1     Running             0          69s
my-dep-6d9f78d6c4-rkhrz   1/1     Terminating         0          69s
my-dep-6d9f78d6c4-rkhrz   0/1     Terminating         0          69s
my-dep-557548758d-svg7w   0/1     ContainerCreating   0          1s
my-dep-557548758d-svg7w   1/1     Running             0          3s
my-dep-6d9f78d6c4-8j5fq   1/1     Terminating         0          71s
my-dep-6d9f78d6c4-8j5fq   0/1     Terminating         0          72s
my-dep-6d9f78d6c4-rkhrz   0/1     Terminating         0          74s
my-dep-6d9f78d6c4-rkhrz   0/1     Terminating         0          74s
my-dep-6d9f78d6c4-8j5fq   0/1     Terminating         0          76s
my-dep-6d9f78d6c4-8j5fq   0/1     Terminating         0          76s

 

Читать  7 полезных примеров командной строки SFTP

Если вы проверите модули сейчас, то увидите, что здесь детали изменились:

root@andreyex:~# kubectl get pod -o wide
NAME                      READY   STATUS    RESTARTS   AGE   IP               NODE          NOMINATED NODE   READINESS GATES
my-dep-557548758d-kz6r7   1/1     Running   0          42s   172.16.213.43    kworker-rj1   <none>           <none>
my-dep-557548758d-svg7w   1/1     Running   0          38s   172.16.213.251   kworker-rj2   <none>           <none>

 

Метод 2. Масштабирование количества реплик.

В среде CI/CD процесс перезагрузки модулей при возникновении ошибки может занять много времени, так как он должен снова пройти весь процесс сборки.

Более быстрый способ добиться этого – использовать команду kubectl scale для изменения номера реплики на ноль, и как только вы установите число больше нуля, Kubernetes создаст новые реплики.

Давай попробуем. Сначала проверьте свои pod:

root@andreyex:~# kubectl get pod
NAME                      READY   STATUS    RESTARTS   AGE
my-dep-557548758d-kz6r7   1/1     Running   0          11m
my-dep-557548758d-svg7w   1/1     Running   0          11m

 

Получите информацию о развертывании:

root@andreyex:~# kubectl get deployments
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
my-dep   2/2     2            2           12m

 

Теперь установите номер реплики на ноль:

root@andreyex:~# kubectl scale deployment --replicas=0 my-dep
deployment.apps/my-dep scaled

 

А затем установите его обратно на два:

root@andreyex:~# kubectscale deployment --replicas=2 my-dep
deployment.apps/my-dep scaled

 

Проверьте pod сейчас:

root@andreyex:~# kubectl get pod
NAME                      READY   STATUS    RESTARTS   AGE
my-dep-557548758d-d2pmd   1/1     Running   0          10s
my-dep-557548758d-gprnr   1/1     Running   0          10s

 

Вы успешно перезапустили модули Kubernetes.

Используйте любой из вышеперечисленных методов, чтобы быстро и безопасно заставить ваше приложение работать, не затрагивая конечных пользователей.

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

Надеюсь, вам понравится этот совет Kubernetes. Не забудьте подписаться на больше.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читайте также

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close