AWSClusterConfiguration
Version: deckhouse.io/v1
Описывает конфигурацию облачного кластера в AWS.
Используется облачным провайдером, если управляющий слой (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: 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
, чтобы изменения вступили в силу.- объект
Дополнительные теги, которые будут присвоены созданным инстансам в дополнение к указанным в конфигурации 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.
Ограничивает только создание узлов в кластере.