Стадия жизненного цикла модуля: General Availability
Как поднять пиринговое соединение между VPC?
Для примера рассмотрим настройку пирингового соединения между двумя условными VPC — vpc-a и vpc-b.
Важно! IPv4 CIDR у обоих VPC должен различаться.
Для настройки выполните следующие шаги:
- Перейдите в регион, где работает vpc-a.
- Нажмите
VPC->VPC Peering Connections->Create Peering Connectionи настройте пиринговое соединение:- Name:
vpc-a-vpc-b. - Заполните
LocalиAnother VPC.
- Name:
- Перейдите в регион, где работает vpc-b.
- Нажмите
VPC->VPC Peering Connections. - Выделите созданное соединение и выберите
Action "Accept Request". - Для vpc-a добавьте во все таблицы маршрутизации маршруты до CIDR vpc-b через пиринговое соединение.
- Для vpc-b добавьте во все таблицы маршрутизации маршруты до CIDR vpc-a через пиринговое соединение.
Как создать кластер в новом VPC с доступом через имеющийся bastion-хост?
-
Выполнить bootstrap базовой инфраструктуры кластера:
dhctl bootstrap-phase base-infra --config config -
Поднять пиринговое соединение по инструкции выше.
-
Продолжить установку кластера. На вопрос про кеш Terraform ответить
y:dhctl bootstrap --config config --ssh-...
Как создать кластер в новом VPC и развернуть bastion-хост для доступа к узлам?
-
Выполнить bootstrap базовой инфраструктуры кластера:
dhctl bootstrap-phase base-infra --config config -
Запустить вручную bastion-хост в subnet
-public-0. -
Продолжить установку кластера. На вопрос про кеш Terraform ответить
y:dhctl bootstrap --config config --ssh-...
Особенности настройки bastion
Поддерживаются сценарии:
- bastion-хост уже создан во внешней VPC:
- Создайте базовую инфраструктуру кластера —
dhctl bootstrap-phase base-infra. - Настройте пиринговое соединение между внешней и свежесозданной VPC.
- Продолжите установку с указанием bastion-хоста —
dhctl bootstrap --ssh-bastion....
- Создайте базовую инфраструктуру кластера —
- bastion-хост требуется поставить в свежесозданной VPC:
- Создайте базовую инфраструктуру кластера —
dhctl bootstrap-phase base-infra. - Запустите вручную bastion-хост в subnet
-public-0. - Продолжите установку с указанием bastion-хоста —
dhctl bootstrap --ssh-bastion....
- Создайте базовую инфраструктуру кластера —
Добавление CloudStatic-узлов в кластер
Для добавления виртуальной машины в качестве узла в кластер выполните следующие шаги:
- Прикрепите группу безопасности
<prefix>-nodeк виртуальной машине. - Прикрепите IAM-роль
<prefix>-nodeк виртуальной машине. -
Укажите следующие теги у виртуальной машины (чтобы
cloud-controller-managerсмог найти виртуальные машины в облаке):"kubernetes.io/cluster/<cluster_uuid>" = "shared" "kubernetes.io/cluster/<prefix>" = "shared"-
Узнать
cluster_uuidможно с помощью команды:d8 k -n kube-system get cm d8-cluster-uuid -o json | jq -r '.data."cluster-uuid"' -
Узнать
prefixможно с помощью команды:d8 k -n kube-system get secret d8-cluster-configuration -o json | jq -r '.data."cluster-configuration.yaml"' \ | base64 -d | grep prefix
-
Как увеличить размер volume в кластере?
Задайте новый размер в соответствующем ресурсе PersistentVolumeClaim в параметре spec.resources.requests.storage.
Операция проходит полностью автоматически и занимает до одной минуты. Никаких дополнительных действий не требуется.
За ходом процесса можно наблюдать в events через команду d8 k describe pvc.
После изменения volume нужно подождать не менее шести часов и убедиться, что volume находится в состоянии
in-useилиavailable, прежде чем станет возможно изменить его еще раз. Подробности можно найти в официальной документации.
Как настроить доступ к репозиторию Amazon ECR на узлах кластера
Под репозиторием Amazon ECR подразумевается Amazon ECR repository.
-
Задайте права для чтения образов в Repository policies. В
Principalдолжен быть существующий объектRoles.{ "Version": "2012-10-17", "Statement": [ { "Sid": "RepositoryRead", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::xxx:role/xxx-node" }, "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:DescribeImages", "ecr:DescribeRepositories", "ecr:GetAuthorizationToken", "ecr:GetDownloadUrlForLayer", "ecr:ListImages", "ecr:ListTagsForResource" ] } ] }Примените эту политику в
Amazon ECR>Private registry>Repositories> `` >Permissions. -
Добавьте
ecr:GetAuthorizationTokenв additionalRolePolicies.
Как создать прерываемые узлы в AWS?
Прерываемые виртуальные машины в AWS называются spot-инстансами. Чтобы группа узлов заказывала их, установите параметр spot ресурса AWSInstanceClass в true.
Пример:
apiVersion: deckhouse.io/v1
kind: AWSInstanceClass
metadata:
name: worker-spot
spec:
instanceType: m5.large
diskSizeGb: 30
spot: true
---
apiVersion: deckhouse.io/v1
kind: NodeGroup
metadata:
name: worker-spot
spec:
nodeType: CloudEphemeral
cloudInstances:
classReference:
kind: AWSInstanceClass
name: worker-spot
minPerZone: 2
maxPerZone: 4
zones:
- eu-central-1a
Получив от AWS уведомление о предстоящем прерывании инстанса, Deckhouse Platform устанавливает на узел taint aws-node-termination-handler/spot-itn, выполняет drain узла и удаляет его. Взамен группа заказывает новый узел, пока их количество не достигнет значения параметра minPerZone.
Ограничения прерываемых узлов в AWS
Учитывайте следующие ограничения:
- Параметр
spotдействует только для групп узлов типа CloudEphemeral, потому что AWSInstanceClass применяется только к ним. - Времени между уведомлением о прерывании и остановкой инстанса может не хватить на drain узла. Размещайте на прерываемых узлах только ту нагрузку, которая переносит внезапную потерю узла.
Изменение параметра spot в существующем AWSInstanceClass приводит к пересозданию всех узлов соответствующей группы.
Что делать, если переключение на заказ узлов в менее приоритетных группах занимает много времени?
Если переключение на заказ узлов в менее приоритетных группах занимает много времени (например, когда для групп узлов со spot-инстансами установлен наивысший приоритет и при недоступности таких инстансов заказ узлов из других групп происходит очень долго), воспользуйтесь инструкцией.