Skip to content

Запуск образа ALT Orchestra в Yandex Cloud

Эта инструкция описывает развёртывание тестового кластера ALT Orchestra в облачной платформе Yandex Cloud на виртуальных машинах. В примере используется кластер из одного узла control plane и одного узла worker.

Предварительная подготовка

Перед началом убедитесь, что у вас есть:

Идентификатор каталога

Многие команды yc требуют идентификатора каталога (folder-id). Узнайте идентификатор каталога, в котором будет развёрнут кластер:

console
yc resource-manager folder list

В выводе найдите нужный каталог и скопируйте его идентификатор из колонки ID. Чтобы не передавать --folder-id в каждой команде, задайте каталог по умолчанию:

console
yc config set folder-id <идентификатор-каталога>

Далее в инструкции предполагается, что каталог по умолчанию задан и флаг --folder-id опускается.

Создание сети

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

console
yc vpc network create --name alt-orchestra-net
console
yc vpc subnet create \
  --name alt-orchestra-subnet \
  --network-name alt-orchestra-net \
  --range 192.168.0.0/24 \
  --zone ru-central1-a

Группы безопасности

Разрешите входящий трафик на порты, необходимые для работы кластера ALT Orchestra:

console
yc vpc security-group create \
  --name alt-orchestra-sg \
  --network-name alt-orchestra-net \
  --rule direction=ingress,port=6443,protocol=tcp,v4-cidrs=[0.0.0.0/0] \
  --rule direction=ingress,port=50000,protocol=tcp,v4-cidrs=[0.0.0.0/0] \
  --rule direction=ingress,protocol=any,from-port=0,to-port=65535,v4-cidrs=[192.168.0.0/24] \
  --rule direction=egress,protocol=any,from-port=0,to-port=65535,v4-cidrs=[0.0.0.0/0]
  • 6443/tcp — Kubernetes API;
  • 50000/tcp — API ALT Orchestra (talosctl);
  • трафик внутри подсети 192.168.0.0/24 — взаимодействие внутренних компонентов кластера.

Сохраните идентификатор группы безопасности в переменную окружения:

console
SG_ID=$(yc vpc security-group get --name alt-orchestra-sg --format json | jq -r .id)

Образ диска

Сгенерируйте образ ALT Orchestra через генератор образов, выбрав платформу NoCloud. Эта платформа не зависит от сервиса метаданных облачного провайдера, поэтому подходит для Yandex Cloud: виртуальные машины получают IP-адреса от DHCP-сервера Yandex Cloud, а конфигурация узлов применяется через talosctl apply-config.

Скачайте полученный образ. По умолчанию генератор образов отдаёт образ в сжатом виде (расширение .xz). Перед загрузкой в Object Storage его нужно разжать:

console
unxz alt-orchestra-11.0-nocloud-amd64.raw.xz

Yandex Cloud поддерживает несколько форматов образов дисков: raw, qcow2 и другие (см. документацию Yandex Cloud по поддерживаемым форматам). Далее образ нужно загрузить в Object Storage и создать из него образ диска Compute Cloud.

Загрузка образа в Object Storage

Создайте бакет в Object Storage для хранения образа:

console
yc storage bucket create --name alt-orchestra-images

Загрузите файл образа в бакет:

console
yc storage s3 cp ./alt-orchestra-11.0-nocloud-amd64.raw s3://alt-orchestra-images/alt-orchestra-11.0-nocloud-amd64.raw

Получите pre-signed URL для загруженного объекта и сохраните его в переменную. URL должен оставаться действительным на всё время создания образа, поэтому укажите достаточный срок действия — например, 24 часа:

console
SIGNED_URL=$(yc storage s3 presign s3://alt-orchestra-images/alt-orchestra-11.0-nocloud-amd64.raw --expires-in 86400)

Создание образа диска

Создайте образ диска в Compute Cloud из полученной ссылки:

console
yc compute image create \
  --name alt-orchestra-image \
  --source-uri "$SIGNED_URL"

Дождитесь перехода образа в статус READY:

console
yc compute image get --name alt-orchestra-image

TIP

После успешного создания образа файл в Object Storage можно удалить для экономии места:

console
yc storage s3api delete-object --bucket alt-orchestra-images --key alt-orchestra-11.0-nocloud-amd64.raw

Резервирование статических публичных IP-адресов

По умолчанию Yandex Cloud назначает ВМ динамический публичный IP-адрес, который может измениться после остановки и запуска ВМ. Чтобы адреса оставались неизменными, зарезервируйте статические IP-адреса для узлов кластера:

console
yc vpc address create --name alt-orchestra-cp-1-ip --external-ipv4 zone=ru-central1-a
yc vpc address create --name alt-orchestra-worker-1-ip --external-ipv4 zone=ru-central1-a

Сохраните зарезервированные IP-адреса в переменные:

console
CONTROL_PLANE_IP=$(yc vpc address get --name alt-orchestra-cp-1-ip --format json | jq -r '.external_ipv4_address.address')
WORKER_IP=$(yc vpc address get --name alt-orchestra-worker-1-ip --format json | jq -r '.external_ipv4_address.address')
CLUSTER_ENDPOINT="$CONTROL_PLANE_IP"
CLUSTER_NAME="alt-orchestra"

CLUSTER_ENDPOINT — публичный IP-адрес control plane-узла, по которому будет доступен Kubernetes API кластера.

Виртуальные машины

Создайте виртуальные машины для control plane и worker, указав зарезервированные статические IP-адреса через параметр nat-address. Размер диска 10 ГБ достаточен для тестового кластера.

console
yc compute instance create \
  --name alt-orchestra-cp-1 \
  --zone ru-central1-a \
  --network-interface subnet-name=alt-orchestra-subnet,security-group-ids=$SG_ID,nat-ip-version=ipv4,nat-address=$CONTROL_PLANE_IP \
  --create-boot-disk image-name=alt-orchestra-image,size=10 \
  --memory 4 --cores 2 \
  --metadata serial-port-enable=1
console
yc compute instance create \
  --name alt-orchestra-worker-1 \
  --zone ru-central1-a \
  --network-interface subnet-name=alt-orchestra-subnet,security-group-ids=$SG_ID,nat-ip-version=ipv4,nat-address=$WORKER_IP \
  --create-boot-disk image-name=alt-orchestra-image,size=10 \
  --memory 4 --cores 2 \
  --metadata serial-port-enable=1

Метаданные serial-port-enable=1 включают доступ к серийной консоли ВМ (подключение: yc compute connect-to-serial-port --instance-name alt-orchestra-cp-1).

Получение информации об узлах

После загрузки ВМ из образа NoCloud узлы доступны по сети, но ещё не сконфигурированы. Определите имена дисков и сетевых интерфейсов для каждого узла:

console
talosctl get disks --insecure --nodes "$CONTROL_PLANE_IP"
talosctl get links --insecure --nodes "$CONTROL_PLANE_IP"
console
talosctl get disks --insecure --nodes "$WORKER_IP"
talosctl get links --insecure --nodes "$WORKER_IP"

Команда talosctl get disks выведет список дисков с именами (например, /dev/vda) и размерами. talosctl get links выведет список сетевых интерфейсов с именами (например, eth0). Запишите эти значения — они понадобятся при создании патчей.

Генерация секретов и конфигураций

Сгенерируйте секреты и конфигурации узлов кластера:

console
talosctl gen secrets -o secrets.yaml
console
talosctl gen config \
  --with-secrets secrets.yaml \
  "$CLUSTER_NAME" \
  "https://$CLUSTER_ENDPOINT:6443"

В результате получаются файлы controlplane.yaml, worker.yaml и talosconfig.

Патчи для Yandex Cloud

Сертификаты (certSANs)

Укажите в certSANs публичные IP-адреса всех узлов кластера, чтобы подключения по talosctl и kubectl проходили проверку сертификата:

yaml
# set_sans.yaml
machine:
  certSANs:
    - <control-plane-public-ip>
    - <worker-public-ip>

Образы компонентов

Реестр и образы компонентов Kubernetes по умолчанию зашиты в сборку ALT Orchestra. Если нужно явно переопределить образы (например, для конкретной версии Kubernetes), создайте патч:

yaml
# set_altlinux_images_controlplane.yaml
machine:
  kubelet:
    image: registry.altlinux.org/p11/kubelet:v1.35.5
  install:
    image: factory.altlinux.space/alt-orchestra-nocloud-installer/<schematic-id>:v11.0
cluster:
  apiServer:
    image: registry.altlinux.org/p11/kube-apiserver:v1.35.5
  controllerManager:
    image: registry.altlinux.org/p11/kube-controller-manager:v1.35.5
  proxy:
    image: registry.altlinux.org/p11/kube-proxy:v1.35.5
  scheduler:
    image: registry.altlinux.org/p11/kube-scheduler:v1.35.5
  etcd:
    image: registry.altlinux.org/p11/etcd:v3.6.6
  coreDNS:
    image: registry.altlinux.org/p11/coredns:v1.13.1
yaml
# set_altlinux_images_worker.yaml
machine:
  kubelet:
    image: registry.altlinux.org/p11/kubelet:v1.35.5
  install:
    image: factory.altlinux.space/alt-orchestra-nocloud-installer/<schematic-id>:v11.0

Подставьте актуальный <schematic-id> из генератора образов.

Диски и сетевые интерфейсы

Используя имена диска и интерфейса, полученные на шаге Получение информации об узлах, создайте патчи:

yaml
# cp-patch.yaml
machine:
  network:
    interfaces:
      - interface: eth0
        dhcp: true
  install:
    disk: /dev/vda
yaml
# worker-patch.yaml
machine:
  network:
    interfaces:
      - interface: eth0
        dhcp: true
  install:
    disk: /dev/vda

Применение патчей и конфигураций

Примените патчи к сгенерированным конфигам:

console
talosctl machineconfig patch controlplane.yaml \
  --patch @set_altlinux_images_controlplane.yaml \
  --patch @set_sans.yaml \
  --patch @cp-patch.yaml \
  --output controlplane.yaml
console
talosctl machineconfig patch worker.yaml \
  --patch @set_altlinux_images_worker.yaml \
  --patch @set_sans.yaml \
  --patch @worker-patch.yaml \
  --output worker.yaml

Применение конфигурации к узлам

Примените подготовленные конфиги к узлам:

console
talosctl apply-config --insecure \
  --nodes "$CONTROL_PLANE_IP" \
  --file controlplane.yaml
console
talosctl apply-config --insecure \
  --nodes "$WORKER_IP" \
  --file worker.yaml

Объедините сгенерированный talosconfig с файлом ~/.talos/config:

console
talosctl config merge ./talosconfig

Укажите endpoint кластера:

console
talosctl config endpoint "$CONTROL_PLANE_IP"

Инициализация кластера

Выполните bootstrap на control plane-узле:

console
talosctl --nodes "$CONTROL_PLANE_IP" bootstrap

Получите kubeconfig:

console
talosctl --nodes "$CONTROL_PLANE_IP" kubeconfig

Проверьте состояние узлов:

console
kubectl get nodes

Проверка работоспособности

Убедитесь, что все узлы перешли в состояние Ready и поды системных компонентов запущены:

console
kubectl get nodes -o wide
kubectl get pods -A

Подробнее о проверке работоспособности кластера см. в разделе Работоспособность.

Удаление кластера

console
yc compute instance delete --name alt-orchestra-cp-1
yc compute instance delete --name alt-orchestra-worker-1
yc vpc address delete --name alt-orchestra-cp-1-ip
yc vpc address delete --name alt-orchestra-worker-1-ip
yc vpc security-group delete --name alt-orchestra-sg
yc vpc subnet delete --name alt-orchestra-subnet
yc vpc network delete --name alt-orchestra-net
yc compute image delete --name alt-orchestra-image

Дальнейшие шаги

Опубликовано под лицензией GPL-3.0+. Содержание доступно по лицензии CC BY-SA 4.0, если не указано иное. Разработано участниками ALT Orchestra.