YandexClusterConfiguration

Version: deckhouse.io/v1

Описывает конфигурацию облачного кластера в Yandex Cloud.

Используется cloud-провайдером, если control plane кластера размещен в облаке.

Выполните следующую команду, чтобы изменить конфигурацию в работающем кластере:

kubectl -n d8-system exec -ti deploy/deckhouse -- deckhouse-controller edit provider-cluster-configuration

Пример:

apiVersion: deckhouse.io/v1
kind: YandexClusterConfiguration
layout: Standard
nodeNetworkCIDR: 127.0.0.1/8
labels:
  label-2: b
sshPublicKey: "<SSH_PUBLIC_KEY>"
masterNodeGroup:
  replicas: 1
  instanceClass:
    cores: 4
    memory: 8192
    imageID: fd8nb7ecsbvj76dfaa8b
nodeGroups:
- name: worker
  replicas: 1
  zones:
  - ru-central1-a
  instanceClass:
    cores: 4
    memory: 8192
    imageID: fd8nb7ecsbvj76dfaa8b
    coreFraction: 50
    externalIPAddresses:
    - 198.51.100.5
    - Auto
provider:
  cloudID: "<CLOUD_ID>"
  folderID: "<FOLDER_ID>"
  serviceAccountJSON: |
    {
    "id": "id",
    "service_account_id": "service_account_id",
    "key_algorithm": "RSA_2048",
    "public_key": "-----BEGIN PUBLIC KEY-----\nMIIwID....AQAB\n-----END PUBLIC KEY-----\n",
    "private_key": "-----BEGIN PRIVATE KEY-----\nMIIE....1ZPJeBLt+\n-----END PRIVATE KEY-----\n"
    }
  • apiVersionстрока

    Обязательный параметр

    Допустимые значения: deckhouse.io/v1, deckhouse.io/v1alpha1

  • dhcpOptionsобъект

    Список DHCP-опций, которые будут установлены на все подсети.

    Возможные проблемы при использовании.

    • dhcpOptions.domainNameстрока

      Search-домен.

    • dhcpOptions.domainNameServersмассив строк

      Список адресов рекурсивных DNS.

      • Элемент массивастрока

        Шаблон: ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$

  • existingNetworkIDстрока

    ID существующей VPC Network.

  • existingZoneToSubnetIDMapобъект

    Одна или несколько ранее существовавших подсетей, сопоставленных с соответствующей зоной.

    Внимание! Deckhouse создаст таблицу маршрутизации, которую необходимо вручную привязать к указанным подсетям.

    Шаблон: ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}$

    Пример:

    existingZoneToSubnetIDMap:
      ru-central1-a: e2lu8r1tbbtryhdpa9ro
      ru-central1-b: e2lu8r1tbbtryhdpa9ro
      ru-central1-c: e2lu8r1tbbtryhdpa9ro
      ru-central1-d: e2lu8r1tbbtryhdpa9ro
    
  • kindстрока

    Обязательный параметр

    Допустимые значения: YandexClusterConfiguration

  • labelsобъект

    Лейблы, проставляемые на ресурсы, создаваемые в Yandex Cloud.

    Если поменять лейблы в рабочем кластере, после применения изменений необходимо пересоздать все машины.

  • layoutстрока

    Обязательный параметр

    Название схемы размещения.

    Подробнее о возможных схемах размещения провайдера.

    Допустимые значения: Standard, WithoutNAT, WithNATInstance

  • masterNodeGroupобъект

    Обязательный параметр

    Спецификация для описания NodeGroup master-узлов.

    Внимание! После изменения параметров секции masterNodeGroup необходимо выполнить команду dhctl converge, чтобы изменения вступили в силу.

    • masterNodeGroup.instanceClassобъект

      Обязательный параметр

      Частичное содержимое полей YandexInstanceClass.

      • masterNodeGroup.instanceClass.additionalLabelsобъект

        Дополнительные лейблы, которые будут присвоены созданным инстансам.

        Пример:

        project: cms-production
        severity: critical
        
      • masterNodeGroup.instanceClass.coresцелочисленный

        Обязательный параметр

        Количество ядер у создаваемых инстансов.

      • masterNodeGroup.instanceClass.diskSizeGBцелочисленный

        Размер диска у инстансов. Значение указывается в ГиБ.

        По умолчанию: 50

        Пример:

        diskSizeGB: 20
        
      • masterNodeGroup.instanceClass.etcdDiskSizeGbцелочисленный

        Размер диска для etcd. Значение указывается в ГиБ.

        При изменении этого параметра необходимо вручную расширить каждый диск для etcd в интерфейсе Yandex Cloud (причина такого поведения — в issue).

        По умолчанию: 10

        Пример:

        etcdDiskSizeGb: 10
        
      • masterNodeGroup.instanceClass.externalIPAddressesмассив строк

        Список внешних IP-адресов.

        При отсутствии опции externalSubnetID необходимо использовать или зарезервированные публичные IP-адреса, или константу Auto.

        При наличии опции externalSubnetID необходимо выбрать конкретные свободные IP-адреса из указанной подсети.

        Количество элементов массива должно соответствовать количеству узлов в группе (значение параметра replicas). Если используется значение Auto (автоматический заказ публичных IP-адресов), количество элементов в массиве externalIPAddresses все равно должно соответствовать количеству узлов в группе.

        • Элемент массивастрока

          Шаблон: ^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})|(Auto)$

      • masterNodeGroup.instanceClass.externalSubnetIDПараметр устарелстрока

        Подключаемый к узлу дополнительный сетевой интерфейс, в который будет идти маршрут по умолчанию.

      • masterNodeGroup.instanceClass.externalSubnetIDsмассив строк

        Подключаемый к узлу дополнительный сетевой интерфейс, в который будет идти маршрут по умолчанию.

        Также будет добавлен маршрут для internal-интерфейса узла на всю подсеть, указанную в nodeNetworkCIDR.

      • masterNodeGroup.instanceClass.imageIDстрока

        Обязательный параметр

        Идентификатор образа, который будет установлен в заказанные инстансы.

        Пример:

        imageID: fd8nb7ecsbvj76dfaa8b
        
      • masterNodeGroup.instanceClass.memoryцелочисленный

        Обязательный параметр

        Количество оперативной памяти (в мегабайтах) у создаваемых инстансов.

        Пример:

        memory: 8192
        
      • masterNodeGroup.instanceClass.networkTypeстрока

        Тип сети.

        По умолчанию: "Standard"

        Допустимые значения: Standard, SoftwareAccelerated

      • masterNodeGroup.instanceClass.platformстрока

        Платформа виртуальной машины.

        По умолчанию: "standard-v2"

    • masterNodeGroup.replicasцелочисленный

      Обязательный параметр

      Количество создаваемых master-узлов. Для обеспечения кворума важно, чтобы оно было нечетным.

      Допустимые значения: 1 <= X

    • masterNodeGroup.zonesмассив

      Необязательный параметр.

      Список зон, в которых допустимо создавать узлы.

      • Элемент массива

        Допустимые значения: ru-central1-a, ru-central1-b, ru-central1-c, ru-central1-d

  • nodeGroupsмассив объектов

    Массив дополнительных NodeGroup для создания статических узлов (например, для выделенных frontend-узлов или шлюзов).

    • nodeGroups.instanceClassобъект

      Обязательный параметр

      Частичное содержимое полей YandexInstanceClass.

      • nodeGroups.instanceClass.additionalLabelsобъект

        Дополнительные лейблы, которые будут присвоены созданным инстансам.

        Пример:

        project: cms-production
        severity: critical
        
      • nodeGroups.instanceClass.coreFractionцелочисленный

        Базовый уровень производительности каждого ядра CPU у создаваемых инстансов. Подробнее…

        По умолчанию: 100

        Допустимые значения: 5, 20, 50, 100

        Пример:

        coreFraction: 20
        
      • nodeGroups.instanceClass.coresцелочисленный

        Обязательный параметр

        Количество ядер у создаваемых инстансов.

      • nodeGroups.instanceClass.diskSizeGBцелочисленный

        Размер диска у инстансов. Значение указывается в ГиБ.

        По умолчанию: 50

        Пример:

        diskSizeGB: 20
        
      • nodeGroups.instanceClass.externalIPAddressesмассив строк

        Список внешних IP-адресов.

        При отсутствии опции externalSubnetID необходимо использовать или зарезервированные публичные IP-адреса, или константу Auto.

        При наличии опции externalSubnetID необходимо выбрать конкретные свободные IP-адреса из указанной подсети.

        Количество элементов массива должно соответствовать количеству узлов в группе (значение параметра replicas). Если используется значение Auto (автоматический заказ публичных IP-адресов), количество элементов в массиве externalIPAddresses все равно должно соответствовать количеству узлов в группе.

        • Элемент массивастрока

          Шаблон: ^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})|(Auto)$

      • nodeGroups.instanceClass.externalSubnetIDПараметр устарелстрока

        Подключаемый к узлу дополнительный сетевой интерфейс, в который будет идти маршрут по умолчанию.

      • nodeGroups.instanceClass.externalSubnetIDsмассив строк

        Подключаемый к узлу дополнительный сетевой интерфейс, в который будет идти маршрут по умолчанию.

        Также будет добавлен маршрут для internal-интерфейса узла на всю подсеть, указанную в nodeNetworkCIDR.

      • nodeGroups.instanceClass.imageIDстрока

        Обязательный параметр

        Идентификатор образа, который будет установлен в заказанные инстансы.

        Пример:

        imageID: fd8nb7ecsbvj76dfaa8b
        
      • nodeGroups.instanceClass.memoryцелочисленный

        Обязательный параметр

        Количество оперативной памяти (в мегабайтах) у создаваемых инстансов.

        Пример:

        memory: 8192
        
      • nodeGroups.instanceClass.networkTypeстрока

        Тип сети.

        По умолчанию: "Standard"

        Допустимые значения: Standard, SoftwareAccelerated

      • nodeGroups.instanceClass.platformстрока

        Платформа виртуальной машины.

        По умолчанию: "standard-v2"

    • nodeGroups.nameстрока

      Обязательный параметр

      Имя NodeGroup, которое будет использоваться для генерации имен узлов.

    • nodeGroups.nodeTemplate

      Настройки Node-объектов в Kubernetes, которые будут добавлены после регистрации узла.

      • nodeGroups.nodeTemplate.annotationsобъект

        Аналогично стандартному полю metadata.annotations.

        Пример:

        annotations:
          ai.fleet.com/discombobulate: "true"
        
      • nodeGroups.nodeTemplate.labelsобъект

        Список лейблов, которые будут прикреплены ко всем ресурсам кластера (если они это поддерживают).

        Аналогично стандартному полю metadata.labels.

        Если поменять теги в рабочем кластере, после применения изменений необходимо пересоздать все машины.

        Пример:

        labels:
          environment: production
          app: warp-drive-ai
        
      • nodeGroups.nodeTemplate.taintsмассив объектов

        Аналогично полю .spec.taints из объекта Node.

        Внимание! Доступны только поля effect, key, values.

        Пример:

        taints:
        - effect: NoExecute
          key: ship-class
          value: frigate
        
        • nodeGroups.nodeTemplate.taints.effectстрока

          Допустимые значения: NoSchedule, PreferNoSchedule, NoExecute

        • nodeGroups.nodeTemplate.taints.keyстрока
        • nodeGroups.nodeTemplate.taints.valueстрока
    • nodeGroups.replicasцелочисленный

      Обязательный параметр

      Количество узлов.

    • nodeGroups.zonesмассив

      Список зон, в которых допустимо создавать узлы.

      • Элемент массива

        Допустимые значения: ru-central1-a, ru-central1-b, ru-central1-c, ru-central1-d

  • nodeNetworkCIDRстрока

    Обязательный параметр

    Данная подсеть будет разделена на три равные части и использована для создания подсетей в трех зонах Yandex Cloud.

  • providerобъект

    Обязательный параметр

    • provider.cloudIDстрока

      Обязательный параметр

      Идентификатор облака.

    • provider.folderIDстрока

      Обязательный параметр

      Идентификатор директории.

    • provider.serviceAccountJSONстрока

      Обязательный параметр

      Ключ к service account’у в JSON-формате.

      Получить его можно с помощью команды [yc iam key create](environment.html).

      Шаблон: ^[ \t\n]*\{(.|\n)*\}[ \t\n]*$

      Пример:

      serviceAccountJSON: |
        {
           "id": "...",
           "service_account_id": "...",
           "created_at": "2022-08-04T05:38:34.756137618Z",
           "key_algorithm": "RSA_2048",
           "public_key": "-----BEGIN PUBLIC KEY-----...-----END PUBLIC KEY-----\n",
           "private_key": "-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----\n"
        }
      
  • sshPublicKeyстрока

    Обязательный параметр

    Публичный ключ для доступа на узлы.

  • withNATInstanceобъект

    Настройки для схемы размещения WithNATInstance.

    • withNATInstance.exporterAPIKeyстрока

      API-ключ для экспортера метрик Yandex Cloud.

      • Если значение ключа — пустая строка, экспортер не будет развернут в кластере.
      • Если значение ключа — Auto, Deckhouse создаст service account c ролью monitoring.viewer и API-ключ для него. Для основного service account’а требуется роль admin.
      • Любое другое значение ключа считается допустимым API-ключем. Используйте инструкцию для создания API-ключа. Service account’у, для которого будет создан ключ, необходимо назначить роль monitoring.viewer.

      По умолчанию: ""

    • withNATInstance.externalSubnetIDстрока

      Подключаемый к узлу дополнительный сетевой интерфейс, в который будет идти маршрут по умолчанию.

    • withNATInstance.internalSubnetIDстрока

      ID подсети для внутреннего интерфейса.

    • withNATInstance.natInstanceExternalAddressстрока

      Внешний зарезервированный IP-адрес или адрес из externalSubnetID при указании опции.

      Шаблон: ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$

    • withNATInstance.natInstanceInternalAddressПараметр устарелстрока

      Лучше не использовать эту опцию, а использовать автоматически назначаемые адреса.

      Шаблон: ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$

  • zonesмассив

    Глобальное ограничение набора зон, с которыми работает данный cloud-провайдер.

    • Элемент массива

      Допустимые значения: ru-central1-a, ru-central1-b, ru-central1-c, ru-central1-d