Масштабирование кластера
Вы можете изменить состав кластера, Stackland добавив или удалив узлы. Каждый узел кластера описывается кастомным ресурсом StacklandHostConfig в пространстве имен stackland-install. Создание ресурса инициирует подключение нового узла, а удаление ресурса — вывод существующего.
Поддерживаются узлы с ролями control-plane, worker и combined. Роль узла нельзя изменить напрямую — для смены роли удалите узел и добавьте его заново с новой ролью.
Перед началом работы
-
Убедитесь, что у вас есть доступ к кластеру с правами администратора.
-
Если в кластере выполняется обновление на новую версию, масштабирование начнется автоматически сразу после завершения обновления. При необходимости проверьте текущую фазу обновления:
kubectl get targetinstallationstate main -o jsonpath='{.status.phase}' -
Посмотрите текущий состав узлов кластера одним из способов:
-
В консоли управления выберите в левом меню Управление узлами. Откроется список узлов с именами, статусами и ролями.
-
Через CLI выполните команду:
kubectl get stacklandhostconfig -n stackland-installПример вывода:
NAME ROLE PHASE AGE 192.168.23.2 control-plane Installed 7d 192.168.23.3 control-plane Installed 7d 192.168.23.4 control-plane Installed 7d 192.168.23.10 worker Installed 3dСокращенное имя ресурса —
shc.
-
Добавить узел
Подготовить новый узел
Загрузите новый узел в режиме обслуживания (Maintenance mode), как при первоначальной установке кластера. Без этого подключение узла не сработает. Подробнее см. в разделе Руководство по установке.
После загрузки убедитесь, что у вас есть:
- hostname или IP-адрес узла;
- список и параметры сетевых интерфейсов;
- путь до установочного диска.
Создать ресурс StacklandHostConfig
-
Создайте файл манифеста. Например, с помощью команды
touch host.yaml. -
Откройте файл и вставьте минимальную конфигурацию:
apiVersion: stackland.yandex.cloud/v1alpha1 kind: StacklandHostConfig metadata: name: <имя_узла> namespace: stackland-install spec: role: worker disksConfig: - installDisk: name: "/dev/sda" networkConfig: interfaces: - name: eth0 mac: "<mac_адрес>" addresses: - iface: eth0 ip: "<ip_адрес>/<префикс>" routes: - iface: eth0 to: "0.0.0.0/0" via: "<шлюз>"Где:
metadata.name— hostname узла. Используется как идентификатор ресурса в кластере.spec.role— роль узла:control-plane,workerилиcombined.spec.disksConfig[].installDisk.name— путь до диска для установки операционной системы.spec.networkConfig— параметры сетевого подключения узла.
Поля, не заданные в манифесте, наследуются из шаблона
StacklandClusterConfig, заданного при установке кластера. -
(Опционально) Добавьте секцию
spec.features, чтобы включить дополнительные возможности узла. Например, поддержку GPU:spec: features: - gpu -
Примените манифест:
kubectl apply -f host.yaml -
Сохраните файл
host.yamlв Git-репозитории, где хранятся конфигурации кластера. Это позволит восстановить состав узлов в случае необходимости.
-
В левом меню выберите Управление узлами.
-
Нажмите Создать узел.
-
В разделе Конфигурация узла заполните основные поля:
- Имя узла — hostname узла.
- Роль —
control-plane,workerилиcombined. - Диск для установки — путь до установочного диска, например
/dev/sda.
Чтобы задать конфигурацию узла в формате YAML, включите переключатель Редактировать YAML.
-
В разделе Интерфейсы добавьте сетевые интерфейсы узла. Для каждого интерфейса нажмите Добавить интерфейс и укажите:
- Имя — имя интерфейса, например
eth0. - MAC-адрес — MAC-адрес интерфейса.
- Маршруты — список маршрутов. Нажмите Добавить маршрут, чтобы задать маршрут.
- Адреса — IP-адрес с префиксом, например
192.168.1.1/24.
- Имя — имя интерфейса, например
-
При необходимости в разделе Сетевая конфигурация переопределите общие сетевые параметры узла:
- Резолверы — список DNS-серверов.
- Timeservers — список NTP-серверов.
Если поля не заполнены, используются значения по умолчанию из шаблона
StacklandClusterConfig. -
В разделе Дополнительные возможности включите нужные функции, например GPU.
-
Нажмите Создать.
Удалить узел
При удалении узла кластер выполняет следующие действия:
- Закрывает узел от новой нагрузки (cordon).
- Эвакуирует с узла существующие поды (drain).
- Удаляет узел из кластера Kubernetes.
- Сбрасывает операционную систему узла в режим обслуживания (Maintenance mode). Узел становится доступен для повторного подключения к кластеру.
Удалите ресурс StacklandHostConfig:
kubectl delete stacklandhostconfig <имя_узла> -n stackland-install
Команда не возвращает управление, пока операция вывода узла не завершится. Это поведение обеспечивается финализатором. Прервать ожидание клавишами Ctrl+C безопасно — операция продолжится в фоне.
- В левом меню выберите Управление узлами.
- В строке нужного узла нажмите значок ⋯.
- Нажмите Удалить.
- Подтвердите удаление.
Проверить статус операции
Чтобы посмотреть текущий статус ресурса StacklandHostConfig, выполните команду:
kubectl get stacklandhostconfig <имя_узла> -n stackland-install
Пример вывода:
NAME ROLE PHASE AGE
node-05 worker Installing 2m
В поле PHASE отображается фаза жизненного цикла узла:
Pending— ресурс создан, операция ожидает запуска.Installing— выполняется подключение узла к кластеру.Installed— узел подключен и работает в кластере.Removing— выполняется вывод узла из кластера.Failed— операция завершилась с ошибкой.
Получить подробную информацию
Чтобы посмотреть подробное состояние узла, выполните команду:
kubectl describe stacklandhostconfig <имя_узла> -n stackland-install
В поле Status отображается:
phase— текущая фаза жизненного цикла.message— сообщение о текущем состоянии операции.lastUpdated— время последнего обновления статуса.