Стадия жизненного цикла модуля: Preview
У модуля есть требования для установки
ClickhouseClass
Cluster-wide-кастомный ресурс ClickhouseClass задаёт правила валидации,
политики sizing и ограничения планирования для экземпляров Clickhouse.
Каждый ресурс Clickhouse должен ссылаться на существующий ClickhouseClass.
Перед развёртыванием оператор проверяет конфигурацию экземпляра по выбранному классу.
Ресурс ClickhouseClass неизменяем.
Чтобы изменить спецификацию, создайте новый класс и обновите ссылки в ресурсах Clickhouse.
Политики sizing
Поле spec.sizingPolicies определяет допустимые комбинации ресурсов для связанных экземпляров Clickhouse.
Это помогает избежать неравномерного распределения CPU и памяти по узлам кластера.
Оператор выбирает политику по попаданию spec.instance.cpu.cores в диапазон cores.min–cores.max.
Затем проверяются размер памяти, coreFraction и остальные поля выбранной политики.
spec:
sizingPolicies:
- cores:
min: 1
max: 4
memory:
min: 100Mi
max: 1Gi
step: 1Mi
coreFractions:
- 10%
- 30%
- 50%
- cores:
min: 5
max: 10
memory:
min: 500Mi
max: 2Gi
coreFractions:
- 50%
- 70%
- 100%Правила валидации
Используйте выражения CEL (Common Expression Language) в spec.validations для пользовательских проверок.
Validating-вебхук выполняет правила при каждом создании и обновлении ресурса Clickhouse.
Предопределённые переменные в rule:
instance.memory.size(int, байты);instance.cpu.cores(int);instance.persistentVolumeClaim.size(int, байты).
spec:
validations:
- message: "CPU cores must be between 1 and 64"
rule: "instance.cpu.cores >= 1 && instance.cpu.cores <= 64"Node affinity
Стандартный механизм Kubernetes для планирования подов.
Задайте spec.nodeAffinity, чтобы ограничить узлы, на которых могут работать поды ClickHouse.
spec:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "node.deckhouse.io/group"
operator: "In"
values:
- "ch"Tolerations
Стандартный механизм Kubernetes для размещения подов на узлах с taints.
Задайте spec.tolerations в ClickhouseClass.
spec:
tolerations:
- key: primary-role
operator: Equal
value: ch
effect: NoScheduleNode selector
Стандартный механизм Kubernetes для ограничения размещения подов.
Задайте spec.nodeSelector в ClickhouseClass.
spec:
nodeSelector:
node.deckhouse.io/group: chПримеры использования
Конфигурация класса по умолчанию
Согласно рекомендациям ClickHouse по sizing,
для универсального сценария часто используют соотношение 1 CPU к 4 ГиБ RAM.
Класс ClickhouseClass с именем default задаёт это ограничение.
Для нагрузок с соотношением 1:8 или 1:2 создайте отдельный ClickhouseClass
и укажите его в ресурсах Clickhouse.
apiVersion: managed-services.deckhouse.io/v1alpha1
kind: ClickhouseClass
metadata:
name: default
spec:
validations:
- message: "The ratio of memory to cpu should be 4:1"
rule: "instance.memory.size == instance.cpu.cores * 4 * 1024 * 1024 * 1024"
- message: "The ratio of memory to storage should be minimum as 1:1"
rule: "instance.persistentVolumeClaim.size >= instance.memory.size"
sizingPolicies:
- cores:
min: 1
max: 2
memory:
min: 4Gi
max: 8Gi
step: 4Gi
coreFractions:
- "25%"
- "50%"
- "75%"
- "100%"
- cores:
min: 3
max: 6
memory:
min: 12Gi
max: 24Gi
step: 4Gi
coreFractions:
- "75%"
- "100%"