Перейти к содержанию

Восстановление CNPG приложения после перезагрузки сервера

·511 слов·3 минуты

Приложения использующие базы данных 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

Шаги Для Восстановления #

Для того, чтобы восстановить ваше приложение вам необходимо для начала его остановить, удалить зависшие поды и после перезапустить приложение:

  1. Останавливаем приложение установкой галочки «Stop All» в настройках приложения или с помощью HeavyScript:
heavyscript app --stop <app-name>
  1. Ждём 2-3 минуты.
  2. Удаляем все зависшие поды командами:
k3s kubectl delete pods -n ix-<app-name> <pod name>
например k3s kubectl delete pods -n ix-home-assistant home-assistant-85865456d5-tc8h4
  1. Запускаем приложение или снимая галочку «Stop All» или через HeavyScript:
heavyscript app --start <app-name>
  1. Если вы снимали галочку «Stop All», то возможно вам надо будет нажать кнопку Start в TrueNAS Web UI (Да кнопку Start нажимать можно — кнопку Stop НЕЛЬЗЯ!). На этом этапе у вас может быть зависшее задание в списке задач TrueNAS (верхний правый угол TrueNAS Web UI). Вы можете избавиться от него выполнив следующее:
systemctl restart middlewared
  1. Подождите 2-3 минуты.
  2. Проверьте, что приложение и всего его поды запустились. У вас не должно быть 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
  1. Вы можете самостоятельно масштабировать их (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 пула приложений:

  1. Apps -> Settings -> Unset Pool.
  2. Ждём пока все приложения не масштабируются до нуля (scale down). Вы не будете видеть ваши приложения, но они не будут удалены!
  3. Перезагружаем сервер.
  4. Apps -> Settings -> Choose Pool. Выбираем наш пул приложений.
  5. Ждём пока наши приложения не запустятся (scale up).