Стадия жизненного цикла модуля: Предварительная версия (preview)

У модуля есть требования для установки

OpensearchClass

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

Spec ресурса OpensearchClass иммутабелен после создания. Для изменения конфигурации создайте новый класс.

Sizing Policies

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

spec:
  sizingPolicies:
    - cores:
        min: 1
        max: 4
      memory:
        min: 2Gi
        max: 8Gi
        step: 1Gi
      coreFractions:
        - "50%"
        - "100%"
    - cores:
        min: 5
        max: 16
      memory:
        min: 8Gi
        max: 32Gi
        step: 1Gi
      coreFractions:
        - "100%"

Validation Rules

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

  • instance.memory.size
  • instance.cpu.cores
spec:
  validations:
    - message: "Memory must be at least 2x CPU cores in GiB"
      rule: "instance.memory.size >= instance.cpu.cores * 2147483648"

Affinity

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

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

Tolerations

spec:
  tolerations:
  - key: dedicated
    operator: Equal
    value: opensearch
    effect: NoSchedule

Node Selector

spec:
  nodeSelector:
    "node.deckhouse.io/group": "opensearch"

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

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

apiVersion: managed-services.deckhouse.io/v1alpha1
kind: OpensearchClass
metadata:
  name: default
spec:
  sizingPolicies:
    - cores:
        min: 1
        max: 4
      memory:
        min: 2Gi
        max: 8Gi
        step: 1Gi
      coreFractions:
        - "50%"
        - "100%"
    - cores:
        min: 5
        max: 16
      memory:
        min: 8Gi
        max: 32Gi
        step: 1Gi
      coreFractions:
        - "100%"

Класс с валидацией и размещением

apiVersion: managed-services.deckhouse.io/v1alpha1
kind: OpensearchClass
metadata:
  name: production
spec:
  sizingPolicies:
    - cores:
        min: 4
        max: 16
      memory:
        min: 8Gi
        max: 32Gi
        step: 1Gi
      coreFractions:
        - "100%"
  validations:
    - message: "Memory must be at least 2x CPU cores in GiB"
      rule: "instance.memory.size >= instance.cpu.cores * 2147483648"
  nodeSelector:
    "node.deckhouse.io/group": "opensearch"
  tolerations:
    - key: dedicated
      operator: Equal
      value: opensearch
      effect: NoSchedule