AWSClusterConfiguration

Version: deckhouse.io/v1

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

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

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

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

Пример:

apiVersion: deckhouse.io/v1
kind: AWSClusterConfiguration
layout: WithoutNAT
sshPublicKey: "<SSH_PUBLIC_KEY>"
nodeNetworkCIDR: 172.16.0.0/22
vpcNetworkCIDR: 172.16.0.0/16
masterNodeGroup:
  replicas: 1
  instanceClass:
    instanceType: m5.xlarge
    ami: ami-08b6d44b4f6f7b279
    diskType: gp3
nodeGroups:
- name: worker
  nodeTemplate:
    labels:
      node-role.kubernetes.io/worker: ''
  replicas: 2
  instanceClass:
    instanceType: t2.medium
    ami: ami-0caef02b518350c8b
  additionalTags:
    backup: srv1
provider:
  providerAccessKeyId: "<AWS_ACCESS_KEY>"
  providerSecretAccessKey: "<AWS_SECRET_ACCESS_KEY>"
  region: eu-central-1
tags:
  team: rangers
  • additionalRolePoliciesмассив строк

    Список дополнительных policy actions для IAM-ролей.

    • Дополнительные policy actions будут добавлены к базовым политикам IAM-ролей.
    • Необязательный параметр. Если отсутствует, IAM-роли будут использовать только policy actions по умолчанию.
    • Пример policy actions: ecr:ListImages, s3:GetObject etc

    По умолчанию IAM-роли содержат следующие policy actions:

    • ec2:DescribeTags
    • ec2:DescribeInstances
    • Элемент массивастрока

      Шаблон: ^([a-zA-Z0-9_\-]+):([a-zA-Z0-9_\-\*\?]+)$

  • apiVersionстрока

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

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

  • existingVPCIDстрока

    ID существующего VPC, в котором будет развернута схема.

    • Обязательный параметр, если не указан vpcNetworkCIDR.
    • Важно! Если в данной VPC уже есть Internet Gateway, деплой базовой инфраструктуры упадет с ошибкой. На данный момент использовать уже существующий Internet Gateway нельзя.
  • kindстрока

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

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

  • layoutстрока

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

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

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

    Схема размещения Standard считается устаревшей, не используйте ее.

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

  • masterNodeGroupобъект

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

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

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

    • masterNodeGroup.additionalTagsобъект

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

      Пример:

      additionalTags:
        project: cms-production
        severity: critical
      
    • masterNodeGroup.instanceClassобъект

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

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

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

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

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

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

        Образ (AMI ID), который будет использоваться в заказанных инстансах.

        Как найти нужный AMI (в каждом регионе AMI разные):

        aws ec2 --region <REGION> describe-images \
        --filters 'Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-bionic-18.04-amd64-server-2020*' | \
        jq '.Images[].ImageId'
        

        Пример:

        ami: ami-040a1551f9c9d11ad
        
      • masterNodeGroup.instanceClass.diskSizeGbцелочисленный

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

        Пример:

        diskSizeGb: 20
        
      • masterNodeGroup.instanceClass.diskTypeстрока

        Тип созданного диска.

        Допустимые значения: gp3, gp2, io2, io1, st1, sc1

        Пример:

        diskType: gp2
        
      • masterNodeGroup.instanceClass.etcdDiskобъект

        По умолчанию: {"sizeGb":20,"type":"gp3"}

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

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

        • masterNodeGroup.instanceClass.etcdDisk.typeстрока

          Тип диска для etcd.

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

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

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

        Внимание! Следует убедиться, что указанный тип есть во всех зонах, перечисленных в параметре zones.

        Пример:

        instanceType: t3.large
        
    • masterNodeGroup.replicasцелочисленный

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

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

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

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

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

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

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

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

    • nodeGroups.additionalTagsобъект

      Дополнительные к основным (AWSClusterConfiguration.tags) теги, которые будут присвоены созданным инстансам.

      Пример:

      project: cms-production
      severity: critical
      
    • nodeGroups.instanceClassобъект

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

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

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

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

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

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

        Образ (AMI ID), который будет использоваться в заказанных инстансах.

        Как найти нужный AMI (в каждом регионе AMI разные):

        aws ec2 --region <REGION> describe-images \
        --filters 'Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-bionic-18.04-amd64-server-2020*' | \
        jq '.Images[].ImageId'
        

        Пример:

        ami: ami-040a1551f9c9d11ad
        
      • nodeGroups.instanceClass.diskSizeGbцелочисленный

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

        Пример:

        diskSizeGb: 20
        
      • nodeGroups.instanceClass.diskTypeстрока

        Тип созданного диска.

        Допустимые значения: gp3, gp2, io2, io1, st1, sc1

        Пример:

        diskType: gp2
        
      • nodeGroups.instanceClass.instanceTypeстрока

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

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

        Внимание! Следует убедиться, что указанный тип есть во всех зонах, перечисленных в параметре zones.

        Пример:

        instanceType: t3.large
        
    • 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массив строк

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

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

  • nodeNetworkCIDRстрока

    Подсеть, в которой будут работать узлы кластера:

    • Диапазон должен быть частью или должен соответствовать диапазону адресов VPC.
    • Диапазон будет равномерно разбит на подсети по одной на Availability Zone в вашем регионе.
    • Необязательный, но рекомендованный параметр. По умолчанию он соответствует целому диапазону адресов VPC.

    Если при создании кластера создается новая VPC и не указан vpcNetworkCIDR, VPC будет создана с диапазоном, указанным в nodeNetworkCIDR. Таким образом, вся VPC будет выделена под сети кластера и, соответственно, не будет возможности добавить другие ресурсы в эту VPC.

    Диапазон nodeNetworkCIDR распределяется по подсетям в зависимости от количества зон доступности в выбранном регионе. Например, если указана nodeNetworkCIDR: "10.241.1.0/20" и в регионе 3 зоны доступности, подсети будут созданы с маской /22.

    Шаблон: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$

  • peeredVPCsмассив строк

    Список AWS VPC ID для организации пиринга с сетью кластера.

    Учетная запись должна иметь доступ ко всем VPC в списке. Также вы можете настроить соединение вручную, если доступа нет.

  • providerобъект

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

    • provider.providerAccessKeyIdстрока

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

      Access key ID.

    • provider.providerSecretAccessKeyстрока

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

      Access key secret.

    • provider.regionстрока

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

      Имя AWS региона, в котором будут заказываться инстансы.

  • sshAllowListмассив строк

    Список CIDR, разрешенных для подключения к узлам по SSH.

    По умолчанию, 0.0.0.0/0.

  • sshPublicKeyстрока

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

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

  • standardПараметр устарелобъект

    Схема размещения Standard считается устаревшей, не используйте ее.

    • tagsобъект

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

      Словарь тегов, которые будут созданы на всех ресурсах, имеющих такую возможность.

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

    • vpcNetworkCIDRстрока

      Подсеть, которая будет указана в созданном VPC.

      Обязательный параметр, если не указан параметр для развертывания в уже созданном VPC existingVPCID.

      Шаблон: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$

    • withNATобъект
      • withNAT.bastionInstanceобъект
        • withNAT.bastionInstance.instanceClassобъект

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

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

          • withNAT.bastionInstance.instanceClass.additionalSecurityGroupsмассив строк

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

          • withNAT.bastionInstance.instanceClass.amiстрока

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

            Образ (AMI ID), который будет использоваться для создания заказываемого инстанса.

            Как найти нужный AMI (в каждом регионе AMI разные):

            aws ec2 --region <REGION> describe-images \
            --filters 'Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-bionic-18.04-amd64-server-2020*' | \
            jq '.Images[].ImageId'
            

            Пример:

            ami: ami-040a1551f9c9d11ad
            
          • withNAT.bastionInstance.instanceClass.diskSizeGbцелочисленный

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

            Пример:

            diskSizeGb: 20
            
          • withNAT.bastionInstance.instanceClass.diskTypeстрока

            Тип созданного root-диска.

            Допустимые значения: gp3, gp2, io2, io1, st1, sc1

            Пример:

            diskType: gp2
            
          • withNAT.bastionInstance.instanceClass.instanceTypeстрока

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

            Тип заказываемого инстанса.

            Пример:

            instanceType: t3.large
            
        • withNAT.bastionInstance.zoneстрока

          Зона, в которой будет создан инстанс bastion.

          По умолчанию будет использоваться первая доступная зона в регионе или первая из списка глобального параметра zones.

    • withoutNATобъект
      • zonesмассив строк

        Глобальное ограничение набора зон, с которыми работает cloud provider.