Стадия жизненного цикла модуля: Preview
У модуля есть требования для установки

ClickhouseClass

Cluster-wide-кастомный ресурс ClickhouseClass задаёт правила валидации, политики sizing и ограничения планирования для экземпляров Clickhouse. Каждый ресурс Clickhouse должен ссылаться на существующий ClickhouseClass. Перед развёртыванием оператор проверяет конфигурацию экземпляра по выбранному классу.

Ресурс ClickhouseClass неизменяем. Чтобы изменить спецификацию, создайте новый класс и обновите ссылки в ресурсах Clickhouse.

Политики sizing

Поле spec.sizingPolicies определяет допустимые комбинации ресурсов для связанных экземпляров Clickhouse. Это помогает избежать неравномерного распределения CPU и памяти по узлам кластера.

Оператор выбирает политику по попаданию spec.instance.cpu.cores в диапазон cores.mincores.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: NoSchedule

Node 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%"