ValkeyClass

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

Sizing Policies

Структура позволяет создавать набор политик определения размера связанных Valkey.
Это позволит избегать неравномерного распределения ресурсов 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.maxMemory int
  • configuration.maxMemoryPolicy string
  • configuration.save string
  • configuration.appendOnly string
  • instance.memory.size int
  • instance.cpu.cores int
spec:
  validations:
    - message: "maxMemory should be less then instance.memory.size at least for 10%"
      rule: "configuration.maxMemory <= instance.memory.size - instance.memory.size / 10"

Overridable Configuration

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

spec:
  overridableConfiguration:
    - maxMemory
    - maxMemoryPolicy

Configuration

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

spec:
  configuration:
    maxMemoryPolicy: Noeviction
    save: "360 100"
    appendOnly: "No"

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

  • save: ""
  • appendOnly: “no”
  • maxMemory: spec.instance.memory.size * 0.9

Affinity

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

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

Tolerations

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

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

Node Selector

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

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

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

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

apiVersion: managed-services.deckhouse.io/v1alpha1
kind: ValkeyClass
spec:
  overridableConfiguration:
    - maxMemoryPolicy
    - save
    - appendOnly
    - maxMemory

  configuration:
    maxMemoryPolicy: Noeviction
    save: "360 100"
    appendOnly: "No"

  sizingPolicies:
    - cores:
        min: 1
        max: 4
      memory:
        min: 128Mi
        max: 2Gi
        step: 128Mi
      coreFractions:
        - "25%"
        - "50%"
        - "75%"
        - "100%"
    - cores:
        min: 5
        max: 8
      memory:
        min: 2Gi
        max: 8Gi
        step: 1Gi
      coreFractions:
        - "25%"
        - "50%"
        - "75%"
        - "100%"

  validations:
    - message: "maxMemory should be less then instance.memory.size at least for 10%"
      rule: "configuration.maxMemory <= instance.memory.size - instance.memory.size / 10"