Запуск образа ALT Orchestra в Yandex Cloud
Эта инструкция описывает развёртывание тестового кластера ALT Orchestra в облачной платформе Yandex Cloud на виртуальных машинах. В примере используется кластер из одного узла control plane и одного узла worker.
Предварительная подготовка
Перед началом убедитесь, что у вас есть:
- действующий аккаунт в Yandex Cloud и созданное облако с каталогом;
- установленный и настроенный
ycCLI согласно инструкции Yandex Cloud; - установленные
talosctlиkubectlна рабочем месте администратора (см. talosctl); - базовое знакомство с быстрым стартом.
Идентификатор каталога
Многие команды yc требуют идентификатора каталога (folder-id). Узнайте идентификатор каталога, в котором будет развёрнут кластер:
yc resource-manager folder listВ выводе найдите нужный каталог и скопируйте его идентификатор из колонки ID. Чтобы не передавать --folder-id в каждой команде, задайте каталог по умолчанию:
yc config set folder-id <идентификатор-каталога>Далее в инструкции предполагается, что каталог по умолчанию задан и флаг --folder-id опускается.
Создание сети
Создайте облачную сеть и подсеть, в которой будут размещены узлы кластера:
yc vpc network create --name alt-orchestra-netyc vpc subnet create \
--name alt-orchestra-subnet \
--network-name alt-orchestra-net \
--range 192.168.0.0/24 \
--zone ru-central1-aГруппы безопасности
Разрешите входящий трафик на порты, необходимые для работы кластера ALT Orchestra:
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— взаимодействие внутренних компонентов кластера.
Сохраните идентификатор группы безопасности в переменную окружения:
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 его нужно разжать:
unxz alt-orchestra-11.0-nocloud-amd64.raw.xzYandex Cloud поддерживает несколько форматов образов дисков: raw, qcow2 и другие (см. документацию Yandex Cloud по поддерживаемым форматам). Далее образ нужно загрузить в Object Storage и создать из него образ диска Compute Cloud.
Загрузка образа в Object Storage
Создайте бакет в Object Storage для хранения образа:
yc storage bucket create --name alt-orchestra-imagesЗагрузите файл образа в бакет:
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 часа:
SIGNED_URL=$(yc storage s3 presign s3://alt-orchestra-images/alt-orchestra-11.0-nocloud-amd64.raw --expires-in 86400)Создание образа диска
Создайте образ диска в Compute Cloud из полученной ссылки:
yc compute image create \
--name alt-orchestra-image \
--source-uri "$SIGNED_URL"Дождитесь перехода образа в статус READY:
yc compute image get --name alt-orchestra-imageTIP
После успешного создания образа файл в Object Storage можно удалить для экономии места:
yc storage s3api delete-object --bucket alt-orchestra-images --key alt-orchestra-11.0-nocloud-amd64.rawРезервирование статических публичных IP-адресов
По умолчанию Yandex Cloud назначает ВМ динамический публичный IP-адрес, который может измениться после остановки и запуска ВМ. Чтобы адреса оставались неизменными, зарезервируйте статические IP-адреса для узлов кластера:
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-адреса в переменные:
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 ГБ достаточен для тестового кластера.
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=1yc 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 узлы доступны по сети, но ещё не сконфигурированы. Определите имена дисков и сетевых интерфейсов для каждого узла:
talosctl get disks --insecure --nodes "$CONTROL_PLANE_IP"
talosctl get links --insecure --nodes "$CONTROL_PLANE_IP"talosctl get disks --insecure --nodes "$WORKER_IP"
talosctl get links --insecure --nodes "$WORKER_IP"Команда talosctl get disks выведет список дисков с именами (например, /dev/vda) и размерами. talosctl get links выведет список сетевых интерфейсов с именами (например, eth0). Запишите эти значения — они понадобятся при создании патчей.
Генерация секретов и конфигураций
Сгенерируйте секреты и конфигурации узлов кластера:
talosctl gen secrets -o secrets.yamltalosctl gen config \
--with-secrets secrets.yaml \
"$CLUSTER_NAME" \
"https://$CLUSTER_ENDPOINT:6443"В результате получаются файлы controlplane.yaml, worker.yaml и talosconfig.
Патчи для Yandex Cloud
Сертификаты (certSANs)
Укажите в certSANs публичные IP-адреса всех узлов кластера, чтобы подключения по talosctl и kubectl проходили проверку сертификата:
# set_sans.yaml
machine:
certSANs:
- <control-plane-public-ip>
- <worker-public-ip>Образы компонентов
Реестр и образы компонентов Kubernetes по умолчанию зашиты в сборку ALT Orchestra. Если нужно явно переопределить образы (например, для конкретной версии Kubernetes), создайте патч:
# 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# 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> из генератора образов.
Диски и сетевые интерфейсы
Используя имена диска и интерфейса, полученные на шаге Получение информации об узлах, создайте патчи:
# cp-patch.yaml
machine:
network:
interfaces:
- interface: eth0
dhcp: true
install:
disk: /dev/vda# worker-patch.yaml
machine:
network:
interfaces:
- interface: eth0
dhcp: true
install:
disk: /dev/vdaПрименение патчей и конфигураций
Примените патчи к сгенерированным конфигам:
talosctl machineconfig patch controlplane.yaml \
--patch @set_altlinux_images_controlplane.yaml \
--patch @set_sans.yaml \
--patch @cp-patch.yaml \
--output controlplane.yamltalosctl machineconfig patch worker.yaml \
--patch @set_altlinux_images_worker.yaml \
--patch @set_sans.yaml \
--patch @worker-patch.yaml \
--output worker.yamlПрименение конфигурации к узлам
Примените подготовленные конфиги к узлам:
talosctl apply-config --insecure \
--nodes "$CONTROL_PLANE_IP" \
--file controlplane.yamltalosctl apply-config --insecure \
--nodes "$WORKER_IP" \
--file worker.yamlОбъедините сгенерированный talosconfig с файлом ~/.talos/config:
talosctl config merge ./talosconfigУкажите endpoint кластера:
talosctl config endpoint "$CONTROL_PLANE_IP"Инициализация кластера
Выполните bootstrap на control plane-узле:
talosctl --nodes "$CONTROL_PLANE_IP" bootstrapПолучите kubeconfig:
talosctl --nodes "$CONTROL_PLANE_IP" kubeconfigПроверьте состояние узлов:
kubectl get nodesПроверка работоспособности
Убедитесь, что все узлы перешли в состояние Ready и поды системных компонентов запущены:
kubectl get nodes -o wide
kubectl get pods -AПодробнее о проверке работоспособности кластера см. в разделе Работоспособность.
Удаление кластера
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