• Русский
  • Архитектура

    Документ-источник: Официальная документация Zalando Postgres Operator Архитектура PostgreSQL Operator

    PostgreSQL Operator управляет кластерами PostgreSQL с использованием шаблона Kubernetes Operator и в основном состоит из следующих ключевых компонентов:

    Основные компоненты

    1. Operator Controller

      • Отслеживает изменения в PostgreSQL Custom Resource Definitions (CRD)
      • Отвечает за создание кластера, масштабирование, обновления конфигурации и другие операции
      • Управляет жизненным циклом кластера
    2. Patroni

      • Обеспечивает гарантии высокой доступности
      • Обрабатывает переключение primary/standby и failover
      • Управляет топологией кластера и состоянием участников
    3. Spilo

      • Предоставляет контейнерный образ PostgreSQL
      • Интегрирует Patroni и PostgreSQL
      • Отвечает за конфигурацию и запуск инициализации
    4. Компонент мониторинга

      • Интегрирует Prometheus для сбора метрик
      • Предоставляет дашборды Grafana
      • Поддерживает настройку правил оповещений

    Поток данных

    1. Пользователи создают PostgreSQL Custom Resource через Kubernetes API
    2. Operator Controller отслеживает изменения ресурсов и создает связанные Kubernetes ресурсы
    3. Patroni отвечает за инициализацию кластера и управление высокой доступностью
    4. Spilo запускает экземпляр PostgreSQL и применяет конфигурацию
    5. Компонент мониторинга собирает метрики и отображает их

    Архитектура RBAC

    PostgreSQL Operator реализует модель RBAC с принципом наименьших привилегий и разделением обязанностей для соответствия требованиям корпоративной безопасности.

    Разрешения Operator

    Оператор следует принципу наименьших привилегий. Он имеет только минимальные разрешения, необходимые для управления кластерами PostgreSQL:

    ResourcePermissionsNotes
    CustomResourceDefinitionsget, list, watchТолько чтение (OLM управляет CRD)
    PersistentVolumesget, list, watchТолько чтение (управляет PV provisioner)
    Rolesget, list, watchТолько чтение
    RoleBindingsget, create, updateВ пределах namespace
    ServiceAccountsget, createБез delete

    У оператора нет разрешений на управление RBAC на уровне кластера (ClusterRole, ClusterRoleBinding).

    Runtime RBAC

    Когда в namespace создается PostgreSQL CR, оператор автоматически создает:

    ResourceScopePurpose
    ServiceAccountДля каждого namespaceДля pod'ов PostgreSQL
    RoleBindingДля каждого namespaceПривязка к operator ClusterRole

    Это стандартный шаблон Kubernetes Operator, в котором разрешениями ClusterRole управляет OLM/admin.

    Роли для пользователей

    Оператор предоставляет шаблоны ролей для разделения обязанностей:

    RolePermissionsUse Case
    adminПолный CRUD для postgresqls, backups, restoresDBA, Platform Admin
    editСоздание/обновление postgresqls (без удаления)Developer
    viewДоступ только для чтенияAuditor, Support
    backupТолько создание/управление PostgresBackupBackup Operator
    restoreТолько создание/управление PostgresRestoreRestore Operator

    Агрегация ролей

    Пользовательские роли агрегируются в platform roles:

    • admin: агрегирует роли admin-base + backup + restore
    • edit/view: агрегируются в rbac.cpaas.io/aggregate-to-namespace-developer
    • Все роли: агрегируются в rbac.cpaas.io/aggregate-to-scope-business-ns

    Режимы развертывания

    PostgreSQL Operator поддерживает следующие режимы развертывания:

    • Single Cluster Mode: работает в одном кластере Kubernetes
    • Multi-Cluster Mode: управляет экземплярами PostgreSQL в нескольких кластерах Kubernetes
    • High Availability Mode: обеспечивает автоматический failover через Patroni