YandexClusterConfiguration

Version: deckhouse.io/v1

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

Используется облачным провайдером, если управляющий слой (control plane) кластера размещен в облаке.

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

kubectl -n d8-system exec -ti svc/deckhouse-leader -c deckhouse -- deckhouse-controller edit provider-cluster-configuration

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

Пример:

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-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: 0
        
      • masterNodeGroup.instanceClass.diskType
        строка

        Тип диска у создаваемых инстансов.

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

        Допустимые значения: network-ssd, network-ssd-io-m3, network-ssd-nonreplicated

        Пример:

        diskType: network-ssd-io-m3
        
      • masterNodeGroup.instanceClass.etcdDiskSizeGb
        целочисленный

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

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

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

        Пример:

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

        Список внешних IP-адресов, перечисленных в порядке зон, в которых будут создаваться узлы.

        В списке можно указывать следующие значения:

        • IP-адрес из дополнительной внешней сети для соответствующей зоны (параметр externalSubnetIDs);
        • зарезервированный публичный IP-адрес, если список дополнительных внешних сетей не определен (параметр externalSubnetIDs);
        • Auto, для заказа публичного IP-адреса в соответствующей зоне.

        Обратите внимание:

        • Элементы массива должны быть перечислены согласно порядку зон (параметр zones), в которых будут создаваться узлы.

          Например:

          - <RU-CENTRAL1-A-IP-ADDRESS>
          - <RU-CENTRAL1-B-IP-ADDRESS>
          - <RU-CENTRAL1-D-IP-ADDRESS>
          
        • Количество элементов массива в параметре externalIPAddresses должно быть равно количеству узлов в группе (параметра replicas). Для автоматического заказа публичных IP-адресов в зоне, используйте значение Auto в списке в параметре externalIPAddresses на соответствующем месте (соответствующему порядку зон).
        • Если не указать externalIPAddresses, то узлы в группе будут заказаны без внешних IP-адресов.
        • Элемент массива
          строка

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

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

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

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

        Список дополнительных внешних сетей, подключаемых к узлам.

        Интерфейс узла, находящийся в сети из списка, будет назначен шлюзом по умолчанию.

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

        Элементы массива должны быть перечислены согласно порядку зон (параметр zones), в которых будут создаваться узлы. Например:

        - <RU-CENTRAL1-A-SUBNET-ID>
        - <RU-CENTRAL1-B-SUBNET-ID>
        - <RU-CENTRAL1-D-SUBNET-ID>
        
      • 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-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: 0
        
      • nodeGroups.instanceClass.diskType
        строка

        Тип диска у создаваемых инстансов.

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

        Допустимые значения: network-ssd, network-ssd-io-m3, network-ssd-nonreplicated

        Пример:

        diskType: network-ssd-io-m3
        
      • nodeGroups.instanceClass.externalIPAddresses
        массив строк

        Список внешних IP-адресов, перечисленных в порядке зон, в которых будут создаваться узлы.

        В списке можно указывать следующие значения:

        • IP-адрес из дополнительной внешней сети для соответствующей зоны (параметр externalSubnetIDs);
        • зарезервированный публичный IP-адрес, если список дополнительных внешних сетей не определен (параметр externalSubnetIDs);
        • Auto, для заказа публичного IP-адреса в соответствующей зоне.

        Обратите внимание:

        • Элементы массива должны быть перечислены согласно порядку зон (параметр zones), в которых будут создаваться узлы.

          Например:

          - <RU-CENTRAL1-A-IP-ADDRESS>
          - <RU-CENTRAL1-B-IP-ADDRESS>
          - <RU-CENTRAL1-D-IP-ADDRESS>
          
        • Количество элементов массива в параметре externalIPAddresses должно быть равно количеству узлов в группе (параметра replicas). Для автоматического заказа публичных IP-адресов в зоне, используйте значение Auto в списке в параметре externalIPAddresses на соответствующем месте (соответствующему порядку зон).
        • Если не указать externalIPAddresses, то узлы в группе будут заказаны без внешних IP-адресов.
        • Элемент массива
          строка

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

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

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

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

        Список дополнительных внешних сетей, подключаемых к узлам.

        Интерфейс узла, находящийся в сети из списка, будет назначен шлюзом по умолчанию.

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

        Элементы массива должны быть перечислены согласно порядку зон (параметр zones), в которых будут создаваться узлы. Например:

        - <RU-CENTRAL1-A-SUBNET-ID>
        - <RU-CENTRAL1-B-SUBNET-ID>
        - <RU-CENTRAL1-D-SUBNET-ID>
        
      • 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-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}$

    • withNATInstance.natInstanceResources
      объект

      Вычислительные ресурсы, выделяемые для NAT-инстанса. Если параметр не указан, будут использоваться значения по умолчанию.

      • withNATInstance.natInstanceResources.cores
        целочисленный

        Количество ядер у создаваемого NAT-инстанса.

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

      • withNATInstance.natInstanceResources.memory
        целочисленный

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

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

  • zones
    массив

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

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

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