Доступно в редакциях:  EE

Обзор модуля

Модуль managed-postgres управляет кластерами PostgreSQL в Kubernetes-кластерах. Он позволяет пользователям конфигурировать и масштабировать PostgreSQL-кластеры в соответствии с их потребностями, обеспечивая оптимальную производительность и безопасность. Основные фичи:

  • Автоматическое развертывание: Разворачивает инстанс Postgres при помощи простой YAML конфигурации
  • High Availability: Поддерживает установку отказоустойчивого кластера Postgres или одиночного инстанса на выбор.
  • Управление конфигурацией: Отдельный ресурс PostgresClass для шаблонизации подхода к созданию кластеров с возможностью гибко валидировать пользовательские конфиги
  • Управление Пользователями и Базами: Декларативня модель создания пользователей и логических баз данных.
  • Статус: Информативный набор состояний для отслеживания развернутого Postgres.

Включение модуля

Для включения модуля managed-postgres примените следующий манифест:

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: managed-postgres
spec:
  enabled: true
  version: 1

После включения модуля автоматически будет создан кластерный ресурс PostgresClass с именем default.

Быстрый старт

Для примеров использования модуля смотрите:

Использование в production

Если модуль планируется использовать в production-среде, то для него рекомендуется настроить отдельный ModuleUpdatePolicy.

В примере политики ниже используется режим AutoPatch, который позволяет автоматически обновлять патч-релизы модуля (0.1.0 => 0.1.1), но ждать подтверждения при обновлении minor (0.1.2 => 0.2.0) или major (0.1.2 => 1.0.0) версии модуля.

{% alert level=“danger” %} Режим AutoPatch выбран потому, что обновления minor/major-версий модуля сопряжены с ВОЗМОЖНЫМ ПЕРЕЗАПУСКОМ всех управляемых модулем кластеров Postgres. И для production-среды рекомендуется контролировать этот процесс и сервисы, зависящие от доступности баз данных Postgres. {% endalert %}

Пример политики:

apiVersion: deckhouse.io/v1alpha2
kind: ModuleUpdatePolicy
metadata:
  name: managed-postgres-policy
spec:
  releaseChannel: Stable # or RockSolid
  update:
    mode: AutoPatch # this is important!
    # windows:
    # - days:
    #   - Mon
    #   - Wed
    #   # time in UTC
    #   from: '18:30'
    #   to: '19:00'

Затем свяжите эту политику с модулем, отредактировав ModuleConfig managed-postgres:

d8 k edit mc managed-postgres
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: managed-postgres
spec:
  enabled: true
  updatePolicy: managed-postgres-policy

Для ручного подтверждения обновления установите аннотацию modules.deckhouse.io/approved="true" в соответствующем ресурсе ModuleRelease.

Основные ресурсы

Модуль Managed Service Postgres предлагает инструменты для двух условных ролей Пользователь и Администратор. Основными объектами модуля являются ресурсы Postgres, PostgresClass и контроллер состояния Postgres Operator.

Условная роль Администратор:

  • управляет cluster wide ресурсом PostgresClass и создает шаблоны валидаций, правила развертывания, конфигурацию для будущих сервисов, разворачиваемых в DKP.
  • Имеет доступ до системного namespace d8-managed-postgres, где развернут Postgres Operator, до его сервисных логов, определения состояния.

Условная роль Пользователь:

  • управляет ресурсом Postgres и конфигурирует сервис принимая во внимание созданный Администратором PostgresClass.

Ресурсы Администратора

PostgresClass

Ресурс PostgresClass позволяет ограничить создание невалидных конфигураций и предопределить некоторые значения. Каждый ресурс Postgres обязательно должен быть связан с существующим ресурсом PostgresClass. Перед развертыванием сервиса, вся конфигурация будет проверена о соответствующий PostgresClass. Подробное описание ресурса

Postgres Operator

При включении модуля контроллер (postgres operator) разворачивается в системном namespace d8-managed-postgres и согласовывает состояния ресурсов Postgres во всех пользовательских namespace.

Ресурсы Пользователя

Postgres

Основной ресурс, который описывает состояние сервиса. Должен быть создан внутри пользовательского namespace, и является точкой правды состояния для конкретного развернутого сервиса postgres. Подробное описание ресурса