Стадия жизненного цикла модуля: General Availability
Миграция с operator-postgres на managed-postgres (версия 1.10)
Начиная с версии 1.10 используется модуль managed-postgres вместо operator-postgres. Возможность использования модуля operator-postgres будет удалена в версии 1.12.
Важно: Если вы видите алерт
NeedMigrationPostgres, следуйте данному руководству для миграции базы данных PostgreSQL.
Требования
- Убедитесь, что у вас есть доступ к кластеру Kubernetes с помощью
kubectl
Шаги миграции
-
Включите модуль
managed-postgres:d8 system module enable managed-postgres -
Дождитесь создания новой базы данных PostgreSQL. Это может занять несколько минут, так как требуется два цикла reconciliation модуля:
echo "Ожидание создания секрета managed-postgres-credentials..." until kubectl -n d8-observability-platform get secret managed-postgres-credentials &>/dev/null; do sleep 10 done echo "Готово" -
Сохраните текущее количество реплик и остановите компоненты
backendиalertgate:export BACKEND_REPLICAS=$(kubectl -n d8-observability-platform get deploy backend -o jsonpath='{.spec.replicas}') export ALERTGATE_REPLICAS=$(kubectl -n d8-observability-platform get deploy alertgate-receiver -o jsonpath='{.spec.replicas}') kubectl -n d8-observability-platform scale deploy backend alertgate-receiver alertgate-sender alertgate-api --replicas=0 -
Экспортируйте пароль для нового экземпляра PostgreSQL:
export PGPASSWORD=$(kubectl -n d8-observability-platform get secret managed-postgres-credentials \ -o jsonpath='{.data.password}' | base64 -d) -
Сохраните дамп старой базы данных в локальный файл:
kubectl -n d8-observability-platform exec -i \ $(kubectl -n d8-observability-platform get po -l spilo-role=master -o name) \ -- /usr/lib/postgresql/14/bin/pg_dump -U dop --no-privileges --no-owner --inserts dop > /tmp/dop-dump.sql -
Импортируйте дамп в новую базу данных:
{ echo "SET session_replication_role = 'replica';"; cat /tmp/dop-dump.sql; } | \ kubectl -n d8-observability-platform exec -i \ $(kubectl -n d8-observability-platform get po -l cnpg.internal.managed.deckhouse.io/instanceRole=primary -o name) \ -- sh -c "PGPASSWORD='$PGPASSWORD' psql -q -h localhost -U dop dop"Примечание: Ошибки о существующих схемах (
metric_helpers,user_management), недоступных расширениях (pg_stat_statements,pg_stat_kcache,set_user) или уже существующих функциях безопасны и могут быть проигнорированы — это системные объекты operator-postgres, которые не требуются в managed-postgres. -
Отметьте миграцию как завершённую:
kubectl -n d8-observability-platform create cm postgres-migrated-completed -
Восстановите компоненты
backendиalertgate:kubectl -n d8-observability-platform scale deploy backend --replicas=$BACKEND_REPLICAS kubectl -n d8-observability-platform scale deploy alertgate-receiver alertgate-sender alertgate-api --replicas=$ALERTGATE_REPLICAS -
Проверьте, что веб-интерфейс Deckhouse Observability Platform доступен и открывается без ошибок. Рабочие пространства и проекты отображаются. Дашборды открываются без ошибок, и данные по метрикам корректны.
Переключение обратно на operator-postgres (при необходимости)
Если после миграции возникли проблемы, вы можете вернуться на operator-postgres:
-
Сохраните текущее количество реплик и остановите компоненты
backendиalertgate:export BACKEND_REPLICAS=$(kubectl -n d8-observability-platform get deploy backend -o jsonpath='{.spec.replicas}') export ALERTGATE_REPLICAS=$(kubectl -n d8-observability-platform get deploy alertgate-receiver -o jsonpath='{.spec.replicas}') kubectl -n d8-observability-platform scale deploy backend alertgate-receiver alertgate-sender alertgate-api --replicas=0 -
Удалите маркер завершения миграции:
kubectl -n d8-observability-platform delete cm postgres-migrated-completed -
Восстановите компоненты
backendиalertgate:kubectl -n d8-observability-platform scale deploy backend --replicas=$BACKEND_REPLICAS kubectl -n d8-observability-platform scale deploy alertgate-receiver alertgate-sender alertgate-api --replicas=$ALERTGATE_REPLICAS
Очистка (после успешной миграции)
После подтверждения успешной миграции отключите модуль operator-postgres. Оператор перестанет работать, но CRDs и старый CR PostgreSQL останутся в кластере — это безвредно. Полная очистка старых ресурсов будет выполнена автоматически в версии 1.12.
d8 system module disable operator-postgres