Предварительная версия. Функциональность может измениться, но основные возможности сохранятся. Совместимость с будущими версиями может потребовать ручных действий по миграции.
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: 100sharedBuffers: Высчитывается как 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