Стадия жизненного цикла модуля: Preview
Доступно в редакциях: 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. Подробное описание ресурса