AWSClusterConfiguration
Version: deckhouse.io/v1
Описывает конфигурацию облачного кластера в AWS.
Используется облачным провайдером, если управляющий слой (control plane) кластера размещен в облаке.
Выполните следующую команду, чтобы изменить конфигурацию в работающем кластере:
d8 p edit provider-cluster-configuration
После изменения параметров узлов необходимо выполнить команду dhctl converge, чтобы изменения вступили в силу.
Пример:
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:GetObjectetc
По умолчанию IAM-роли содержат следующие policy actions:
ec2:DescribeTagsec2:DescribeInstances
- строкаЭлемент массива
Шаблон:
^([a-zA-Z0-9_\-]+):([a-zA-Z0-9_\-\*\?]+)$
- строкаapiVersion
Обязательный параметр
Допустимые значения:
deckhouse.io/v1,deckhouse.io/v1alpha1 - булевыйdisableDefaultSecurityGroup
Если установлено значение
true, то security group по умолчанию создаваться не будут.Важно. При использовании
disableDefaultSecurityGroup: trueвы обязаны самостоятельно создать все необходимые security group для доступа к узлам кластера. Кроме того, необходимо явно указать их в следующих параметрах:additionalSecurityGroupsв секцииmasterNodeGroupресурса AWSClusterConfiguration;additionalSecurityGroupsв ресурсе AWSInstanceClass;additionalSecurityGroupsв секцииnodeGroups.instanceClass.
Для настройки security group, используемых балансировщиками нагрузки, укажите их через аннотацию
service.beta.kubernetes.io/aws-load-balancer-security-groups. - строкаexistingVPCID
ID существующего VPC, в котором будет развернута схема.
- Обязательный параметр, если не указан
vpcNetworkCIDR. - Важно! Если в данной VPC уже есть Internet Gateway, деплой базовой инфраструктуры упадет с ошибкой. На данный момент использовать уже существующий Internet Gateway нельзя.
- Обязательный параметр, если не указан
- строкаiamNodeRole
Имя IAM-роли, которая будет привязана ко всем AWS-инстансам узлов кластера.
DKP всегда создает и привязывает к каждому AWS-инстансу узла кластера специальную IAM-роль с именем
<PREFIX>-node, где<PREFIX>— значение параметра cloud.prefix общих параметров кластера. Вы можете указать в параметреiamNodeRoleсвою IAM-роль с бОльшими правами, но, важно чтобы она включала в себя политики IAM-роли, создаваемой DKP (роль<PREFIX>-node).Подробнее о IAM-ролях для AWS EC2 можно прочитать в документации AWS.
Шаблон:
^[a-zA-Z0-9+=,.@\-_']{1,64}$ - строкаkind
Обязательный параметр
Допустимые значения:
AWSClusterConfiguration - строкаlayout
Обязательный параметр
Название схемы размещения.
Подробнее о возможных схемах размещения провайдера.
Схема размещения
Standardсчитается устаревшей, не используйте ее.Допустимые значения:
WithoutNAT,WithNAT,Standard - объектmasterNodeGroup
Обязательный параметр
Спецификация для описания NodeGroup master-узлов.
Чтобы изменения вступили в силу, после изменения параметров секции
masterNodeGroupвыполните командуdhctl converge.- объект
Дополнительные теги, которые будут присвоены созданным инстансам в дополнение к указанным в конфигурации 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: 50 - строка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-узлов или шлюзов).
- объект
Дополнительные к основным (
AWSClusterConfiguration.tags) теги, которые будут присвоены созданным инстансам.Пример:
project: cms-production severity: critical - массив строк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: 50 - строка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.region
Обязательный параметр
Имя AWS региона, в котором будут заказываться инстансы.
- массив строкsshAllowList
Список CIDR, разрешенных для подключения к узлам по SSH.
По умолчанию,
0.0.0.0/0. - строкаsshPublicKey
Обязательный параметр
Публичный ключ для доступа на узлы.
- объектstandardПараметр устарел
Схема размещения
Standardсчитается устаревшей, не используйте ее. - объект
Необязательный параметр.
Словарь тегов, которые будут созданы на всех ресурсах, имеющих такую возможность.
Если поменять теги в рабочем кластере, после применения изменений необходимо пересоздать все машины.
- строка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.
Ограничивает только создание узлов в кластере.