Стадия жизненного цикла модуля: General Availability

Миграция с operator-postgres на managed-postgres (версия 1.10)

Начиная с версии 1.10 используется модуль managed-postgres вместо operator-postgres. Возможность использования модуля operator-postgres будет удалена в версии 1.12.

Важно: Если вы видите алерт NeedMigrationPostgres, следуйте данному руководству для миграции базы данных PostgreSQL.

Требования

  • Убедитесь, что у вас есть доступ к кластеру Kubernetes с помощью kubectl

Шаги миграции

  1. Включите модуль managed-postgres:

    d8 system module enable managed-postgres
    
  2. Дождитесь создания новой базы данных PostgreSQL. Это может занять несколько минут, так как требуется два цикла reconciliation модуля:

    echo "Ожидание создания секрета managed-postgres-credentials..."
    until kubectl -n d8-observability-platform get secret managed-postgres-credentials &>/dev/null; do
      sleep 10
    done
    echo "Готово"
    
  3. Сохраните текущее количество реплик и остановите компоненты 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
    
  4. Экспортируйте пароль для нового экземпляра PostgreSQL:

    export PGPASSWORD=$(kubectl -n d8-observability-platform get secret managed-postgres-credentials \
      -o jsonpath='{.data.password}' | base64 -d)
    
  5. Сохраните дамп старой базы данных в локальный файл:

    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
    
  6. Импортируйте дамп в новую базу данных:

    { 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.

  7. Отметьте миграцию как завершённую:

    kubectl -n d8-observability-platform create cm postgres-migrated-completed
    
  8. Восстановите компоненты 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
    
  9. Проверьте, что веб-интерфейс Deckhouse Observability Platform доступен и открывается без ошибок. Рабочие пространства и проекты отображаются. Дашборды открываются без ошибок, и данные по метрикам корректны.

Переключение обратно на operator-postgres (при необходимости)

Если после миграции возникли проблемы, вы можете вернуться на operator-postgres:

  1. Сохраните текущее количество реплик и остановите компоненты 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
    
  2. Удалите маркер завершения миграции:

    kubectl -n d8-observability-platform delete cm postgres-migrated-completed
    
  3. Восстановите компоненты 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