Предварительная версия. Функциональность может измениться, но основные возможности сохранятся. Совместимость с будущими версиями может потребовать ручных действий по миграции.

PostgresClass

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

Topology

Структура позволяет управлять распределением подов Postgres Managed Service в Kubernetes кластере.

spec:
  topology:
      allowedTopologies:
        - Ignored    # Используется стандартный механизм распределения Kubernetes
        - Zonal      # Развертывание внутри одной зоны
        - TransZonal # Развертывание преимущественно в разные зоны
      defaultTopology: "TransZonal"
      allowedZones:
        - zone-1
        - zone-2
        - zone-3

Sizing Policies

Структура позволяет создавать набор политик определения размера связанных Postgres.
Это позволит избегать неравномерного распределения ресурсов CPU и Memory на нодах кластера.
Определяющим фактором выбора той или иной политики является попадание в интервал cores.
Далее будет проверено соответствие остальных полей конкретной политики.

spec:
  sizingPolicies:
    - cores:
        min: 1
        max: 4
      memory:
        min: 100Mi
        max: 1Gi
        step: 1Mi
      coreFraction: [10, 30, 50] 
    - cores:
        min: 5
        max: 10
      memory:
        min: 500Mi
        max: 2Gi
      coreFraction: [50, 70, 100]

Validation Rules

В качестве синтаксиса используется CEL (Common Expression Language) для создания гибких механизмов валидаций. Мы предоставляем набор предопределенных переменных, которые можно использовать в rule:

  • configuration.maxConnections
  • configuration.workMem
  • configuration.sharedBuffers
  • configuration.walKeepSize
  • instance.memory.size
  • instance.cpu.cores
spec:
  validations:
    - message: "Max connections should not be more than 300"
      rule: "configuration.maxConnections < 300"
    - message: "Shared buffers should not be more than 25% of RAM"
      rule: "configuration.sharedBuffers < instance.memory.size / 4"

Overridable Configuration

Белый список параметров конфигурации которые могут быть переопределены в ресурсе Postgres.
Список всех возможных параметров.

spec:
  overridableConfiguration:
    - maxConnections
    - workMem

Configuration

Параметры конфигурации, которые могут быть определены на уровне PostgresClass.
Значения этих параметров переопределят defaults для всех связанных Postgres.
Note: Параметры, которые были разрешены и переопределены в overridableConfiguration будут являться приоритетными.

spec:
  configuration:
    maxConnections: 100
    workMem: 100Mi

Значения по умолчанию, которые устанавливаются Postgres Operator исходят из следующей логики:

  • maxConnections: 100
  • sharedBuffers: Высчитывается как 25% от указанного memory.size.
  • workMem: Высчитывается как (memory.size - sharedBuffers) * 4 / maxConnections.
  • walKeepSize: 512Mi

Affinity

Стандартный механизм Kubernetes для управления планированием разворачиваемых подов.

spec:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: "node.deckhouse.io/group"
          operator: "In"
          values:
          - "pg"

Tolerations

Стандартный механизм Kubernetes для управления планированием разворачиваемых подов.

spec:
  tolerations:
  - key: primary-role
    operator: Equal
    value: pg
    effect: NoSchedule

Node Selector

Стандартный механизм Kubernetes для управления планированием разворачиваемых подов.

  nodeSelector:
    "node.deckhouse.io/group": "pg"

Примеры использования

Базовое использование

apiVersion: managed-services.deckhouse.io/v1alpha1
kind: PostgresClass
metadata:
  labels:
    app.kubernetes.io/name: managed-psql-operator
  name: new
spec:
  topology:
    allowedTopologies:
      - Zonal
      - TransZonal
      - Ignored
    allowedZones: []
    defaultTopology: Ignored
  configuration:
    maxConnections: 300
  overridableConfiguration:
    - maxConnections
    - sharedBuffers
    - walKeepSize
  validations:
    - message: "Max connections should not be more than 100"
      rule: "configuration.maxConnections > 100"
    - message: "Shared buffers should be less that 40% of memory.size"
      rule: "configuration.sharedBuffers * 100 < instance.memory.size * 40"
    - message: "walKeepSize can not be more than 1Gi"
      rule: "configuration.walKeepSize <= 1073741824"
  sizingPolicies:
    - cores:
        min: 1
        max: 3
      memory:
        min: 1Gi
        max: 5Gi
        step: 1Gi
      coreFractions:
        - 10
        - 20
        - 50
        - 100
    - cores:
        min: 4
        max: 10
      memory:
        min: 5Gi
        max: 15Gi
        step: 1Gi
      coreFractions:
        - 50
        - 100