Восстановление CNPG приложения после перезагрузки сервера
Содержание
Приложения использующие базы данных PostgressSQL после обновления на новый CNPG Common от TrueCharts иногда могут не пережить перезагрузку сервера. Приложение зависает в состоянии DEPLOYING и его поды находятся в состоянии Completed или TaintToleration.
ПОЛИТИКА МАКСИМАЛЬНОГО УСИЛИЯ #
Данное руководство было написано стараниями сотрудников TrueCharts и протестировано насколько возможно хорошо. Мы не несем ответственности, если оно не сработает в каждом сценарии или ситуации пользователя, или если в результате этого произойдет потеря данных. Данное руководство было протестировано с TrueNAS SCALE 22.12.4.2, Cobia beta, CNPG 1.20.2_2.0.3 и HomeAssistant 2023.10.3_20.0.12.
Симптомы #
Если вы перезагрузили сервер и ваши приложения зависли в состоянии DEPLOYING, проверьте если поды находятся в состоянии Completed или TaintToleration и главный под приложения в состоянии Init командой:
k3s kubectl get all -n ix-<имя приложения>
Пример вывода команды:
k3s kubectl get all -n ix-home-assistant
NAME READY STATUS RESTARTS AGE
pod/home-assistant-cnpg-main-1 0/1 TaintToleration 0 12h
pod/home-assistant-cnpg-main-2 0/1 TaintToleration 0 12h
pod/home-assistant-85865456d5-tc8h4 0/1 TaintToleration 0 12h
pod/home-assistant-85865456d5-kl96x 0/1 Init:0/2 0 12h
k3s kubectl get all -n ix-home-assistant
NAME READY STATUS RESTARTS AGE
pod/home-assistant-cnpg-main-2 0/1 Completed 0 22m
pod/home-assistant-cnpg-main-rw-df9bcbccc-s8z2n 0/1 Completed 0 23m
pod/home-assistant-cnpg-main-rw-df9bcbccc-ptltn 0/1 Completed 0 23m
pod/home-assistant-cnpg-main-rw-df9bcbccc-jbbcj 1/1 Running 0 12m
pod/home-assistant-5867d984d9-gfznd 0/1 Completed 0 23m
pod/home-assistant-cnpg-main-1 0/1 Completed 0 23m
pod/home-assistant-cnpg-main-rw-df9bcbccc-q2w2d 1/1 Running 0 12m
pod/home-assistant-5867d984d9-vcp6x 0/1 Init:0/2 0 12m
Лог из контейнера cnpg-wait в основном поде приложения показывает, что-то похожее на:
Testing database on url: home-assistant-cnpg-main-rw
home-assistant-cnpg-main-rw:5432 - no response
Шаги Для Восстановления #
Для того, чтобы восстановить ваше приложение вам необходимо для начала его остановить, удалить зависшие поды и после перезапустить приложение:
- Останавливаем приложение установкой галочки «Stop All» в настройках приложения или с помощью HeavyScript:
heavyscript app --stop <app-name>
- Ждём 2-3 минуты.
- Удаляем все зависшие поды командами:
k3s kubectl delete pods -n ix-<app-name> <pod name>
например k3s kubectl delete pods -n ix-home-assistant home-assistant-85865456d5-tc8h4
- Запускаем приложение или снимая галочку «Stop All» или через HeavyScript:
heavyscript app --start <app-name>
- Если вы снимали галочку «Stop All», то возможно вам надо будет нажать кнопку Start в TrueNAS Web UI (Да кнопку Start нажимать можно — кнопку Stop НЕЛЬЗЯ!). На этом этапе у вас может быть зависшее задание в списке задач TrueNAS (верхний правый угол TrueNAS Web UI). Вы можете избавиться от него выполнив следующее:
systemctl restart middlewared
- Подождите 2-3 минуты.
- Проверьте, что приложение и всего его поды запустились. У вас не должно быть deployment.apps в состоянии 0 AVAILABLE: Пример:
k3s kubectl get all -n ix-home-assistant
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/home-assistant-cnpg-main-rw 0/0 0 0 14h
deployment.apps/home-assistant 1/1 1 1 14h
- Вы можете самостоятельно масштабировать их (scale up) до 1 реплики или до 2х если это под cnpg-main-rw. Делаем:
k3s kubectl scale deploy <имя приложения> -n ix-<имя пространства имен> --replicas=1
например k3s kubectl scale deploy home-assistant-cnpg-main-rw -n ix-home-assistant --replicas=2
Безопасная Перезагрузка #
Вы восстановили ваши приложения, но что если вам надо перезагрузить сервер опять? Есть безопасный и быстрый способ через Unset пула приложений:
- Apps -> Settings -> Unset Pool.
- Ждём пока все приложения не масштабируются до нуля (scale down). Вы не будете видеть ваши приложения, но они не будут удалены!
- Перезагружаем сервер.
- Apps -> Settings -> Choose Pool. Выбираем наш пул приложений.
- Ждём пока наши приложения не запустятся (scale up).