Управляемый PostgreSQL с синхронной репликацией — без хлопот с эксплуатацией

Настройка PostgreSQL с синхронной репликацией «трудным путём» — это конфиги Patroni, кластеры etcd, pgBouncer, экспортеры мониторинга, скрипты резервного копирования, тестирование переключения при сбое — легко неделя работы ещё до того, как вы сохраните хотя бы одну строку. А потом всё это ещё нужно поддерживать. AWS RDS решает эту задачу, но привязывает вас к облачному счёту, который растёт быстрее ваших данных.

А что, если бы вы могли получить управляемый PostgreSQL на собственном оборудовании за две минуты?

Решение: управляемый PostgreSQL от Cozystack

Cozystack использует под капотом оператор CloudNativePG — один из самых зрелых доступных Kubernetes-нативных операторов Postgres. Вы получаете автоматическое переключение при сбое, потоковую репликацию и опциональную синхронную репликацию на основе кворума — всё это управляется платформой.

Через панель управления (быстрый способ)

  1. Откройте панель управления Cozystack по адресу https://dashboard.<your-domain>.
  2. Перейдите в Marketplace и найдите Postgres.
Marketplace панели управления Cozystack с приложением Postgres
  1. Нажмите Deploy и заполните форму:
    • Введите имя (например, app-postgres).
    • Задайте число реплик 2 (primary + standby с асинхронной репликацией) или 3 (для синхронной репликации с кворумом).
    • Выберите resourcesPreset (nano, micro, small, medium, large).
    • Задайте размер хранилища (например, 10Gi).
    • В параметрах PostgreSQL при необходимости настройте max_connections.
Форма развёртывания Postgres с настроенными репликами и ресурсами
  1. Нажмите Deploy. За две минуты вы получаете конфигурацию primary + реплика с автоматическим переключением при сбое.
Развёрнутое приложение Postgres в состоянии Ready

Через kubectl (способ GitOps)

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: postgres-myapp
  namespace: tenant-team1
spec:
  chart:
    spec:
      chart: postgres
      reconcileStrategy: Revision  # Согласование при изменении версии чарта
      sourceRef:
        kind: HelmRepository
        name: cozystack-apps
        namespace: cozy-public
      version: 0.10.0
  interval: 0s  # Согласование только при изменении spec, а не периодически
  values:
    replicas: 3
    size: 10Gi
    resourcesPreset: small
    databases:
      production:
        roles:
          admin:
            - appuser
    users:
      appuser:
        password: "your-strong-password"  # или удалите эту строку для автогенерации
    external: false
kubectl apply -f postgres.yaml

Получение учётных данных для подключения

# Primary (чтение-запись)
kubectl get svc -n tenant-team1 | grep postgres-myapp-rw

# Реплика (только чтение)
kubectl get svc -n tenant-team1 | grep postgres-myapp-ro

# Пароль
kubectl get secret -n tenant-team1 postgres-myapp-app \
  -o jsonpath='{.data.password}' | base64 --decode

Эти имена сервисов разрешаются из любого вложенного кластера Kubernetes в том же арендаторе — без внешнего DNS или VPN.

Резервные копии

Включите S3-совместимое хранилище резервных копий, задав backup.enabled: true в values. Восстановление — это изменение одной строки конфигурации, указывающей имя исходного кластера и опциональную метку времени в формате RFC 3339.

Узнать больше

Присоединяйтесь к сообществу