Разворачивание и настройка корневой и кэширующей инфраструктуры alt-orchestra c помощью RPM-пакета image-factory: различия между версиями
Строка 176: | Строка 176: | ||
Скопируйте файл описания сервиса <tt>docker-registry</tt> в файл описания сервиса <tt>docker-cache-registry</tt>: | Скопируйте файл описания сервиса <tt>docker-registry</tt> в файл описания сервиса <tt>docker-cache-registry</tt>: | ||
< | <syntaxhighlight lang="bash"> | ||
cp /lib/systemd/system/docker-registry.service /lib/systemd/system/docker-cache-registry.service | # cp /lib/systemd/system/docker-registry.service /lib/systemd/system/docker-cache-registry.service | ||
</ | </syntaxhighlight> | ||
Удалите инициализацию переменной <tt>REGISTRY_PROXY_REMOTEURL</tt> и измените описание файла конфигурации на <tt>/etc/docker-registry/cache-config.yml</tt>: | Удалите инициализацию переменной <tt>REGISTRY_PROXY_REMOTEURL</tt> и измените описание файла конфигурации на <tt>/etc/docker-registry/cache-config.yml</tt>: | ||
Строка 194: | Строка 194: | ||
Скопируйте файл конфигурации сервиса: | Скопируйте файл конфигурации сервиса: | ||
< | <syntaxhighlight lang="bash"> | ||
cp /etc/docker-registry/config.yml /etc/docker-registry/cache-config.yml | # cp /etc/docker-registry/config.yml /etc/docker-registry/cache-config.yml | ||
</ | </syntaxhighlight> | ||
и подправьте его, указав порт <tt>5001</tt>: | и подправьте его, указав порт <tt>5001</tt>: | ||
<pre> | <pre> | ||
Строка 215: | Строка 215: | ||
Запустите новый сервис <tt>docker-cache-registry.service</tt>: | Запустите новый сервис <tt>docker-cache-registry.service</tt>: | ||
< | <syntaxhighlight lang="bash"> | ||
# systemctl daemon-reload | # systemctl daemon-reload | ||
# systemctl enable --now docker-cache-registry.service | # systemctl enable --now docker-cache-registry.service | ||
</ | </syntaxhighlight> | ||
Проверьте работу | Проверьте работу служб: | ||
< | <syntaxhighlight lang="bash"> | ||
netstat -nlpt | grep 500[01] | $ netstat -nlpt | grep 500[01] | ||
tcp 0 0 :::5000 :::* LISTEN 23898/docker-regist | tcp 0 0 :::5000 :::* LISTEN 23898/docker-regist | ||
tcp 0 0 :::5001 :::* LISTEN 24543/docker-regist | tcp 0 0 :::5001 :::* LISTEN 24543/docker-regist | ||
</ | </syntaxhighlight> | ||
=== Разворачивание и настройка image-factory === | === Разворачивание и настройка image-factory === |
Версия от 18:14, 20 мая 2025
RPM-пакет image-factory включает в себя:
- сервис веб-интерфейса image-factory, состоящий из:
- бинарная команда интерфейса /usr/bin/image-factory;
- конфигурационный файл /etc/sysconfig/image-factory, позволяющий сконфигурировать режим запуска команды;
- shell-скрипт /usr/bin/image-factory.sh, конфигурирующий параметры и запускающий команду /usr/bin/image-factory;
- systemd-unit /usr/lib/systemd/system/image-factory.service.
На текущий момент версия image-factory для платформы alt-orchestra отличается от upstream-версии 0.6.8 от siderolabs следующим:
- префиксы образов installer-base, imager, extensions, overlays заменены с siderolabs на alt-orchestra;
- не поддерживается сборка образов на платформе arm64;
- произведена локализация и наряду с английским поддерживается русскоязычный интерфейс.
Так как префиксы образов вшиты в код и не конфигурируются, данная версия image-factory поддерживает только инфраструктуру alt-orchestra и не применима к инфраструктуре siderolabs.
Пакет image-factory поддерживает разворачивание как корневой (https://altlinux.space/alt-orchestra), так и кэширующей инфраструктуры у клиентов. Разворачивание кэширующей инфраструктуры у клиентов позволяет существенно уменьшить время разворачивания alt-orchestra-кластера, так как необходимые артефакты (ISO/RAW/QCOW[2]-образы, ядра, образы файловых систем, ...) генерируются на серверах клиентов и доступны в рамках их локальных сетей.
Разворачивание кэширующей инфраструктуры у клиентов
Для оптимизации трафика при развертывании alt-orchestra кластера в локальной сети клиента необходимо на административном сервере клиента поднять на стороне клиента следующие сервисы:
- image-factory для генерации типов разворачиваний и артефактов;
- кэширующий docker-регистратор для кэширования генерируемых по запросам клиента артефактов на основе alt-orchestra docker-образов imager, base-installer, extensions, ...;
- proxy docker-регистратор для кэширования docker-образов kubernetos с сайта registry.altlinux.org.
В данной схеме каждый образ docker-регистраторов altlinux.space, registry.altlinux.org скачивается однократно.
Образы altlinux.space кэшируются непосредственно в файловой системе административного сервера клиента. На их основе в дальнейшем image-factory сервер генерирует:
- схемы разворачивания кластера (schematics);
- генерируемые по запросам клиента артефакты.
Образы данных артефактов размещаются в кэширующем docker-регистраторе административного сервера клиента. Откуда затем передаются клиентам локальной сети клиента при разворачивании alt-orchestra.
При разворачивании каждого узла alt-orchestra клиента в команде talosctl указывается proxy docker-регистратор административного сервера клиента. При первом разворачивании они скачиваются с docker-регистратора registry.altlinux.org и кэшируются в proxy docker-регистраторе. При разворачивании последующих узлов они в рамках локальной сети клиента скачиваются из proxy docker-регистратора административного сервера клиента.
Разворачивание и настройка proxy-сервера регистратора docker-образов kubernetes
Установите RPM-пакеты docker-registry, net-tools, curl, jq:
# apt-get install -y docker-registry net-tools curl jq
Настройка файла /etc/containers/registries.conf
Добавьте в описание unqualified-search-registries домен registry.altlinux.org:
unqualified-search-registries = ["registry.altlinux.org", ...]
Опишите регистратор образов kubernetes:
[[registry]] prefix = "registry.altlinux.org/k8s-sisyphus" location = "registry.altlinux.org/k8s-sisyphus"
Опишите proxy docker-регистратор:
[[registry.mirror]] location = "localhost:5000/mirror-0.local/k8s-sisyphus" insecure = true
Настройка сервиса docker-регистратора
Добавьте в секцию Service файла /lib/systemd/system/docker-registry.service описание переменной REGISTRY_PROXY_REMOTEURL:
[Unit] Description=Docker Registry 2.0 implementation for storing and distributing Docker images After=network.target [Service] Environment="REGISTRY_PROXY_REMOTEURL=https://registry.altlinux.org" ExecStart=/usr/bin/docker-registry serve /etc/docker-registry/config.yml [Install] WantedBy=multi-user.target
Убедитесь, что в файле конфигурации /etc/docker-registry/config.yml указан порт 5000:
version: 0.1 log: fields: service: registry storage: cache: blobdescriptor: inmemory filesystem: rootdirectory: /var/lib/docker-registry http: addr: :5000 headers: X-Content-Type-Options: [nosniff]
Перезагрузите сервисы и запустите сервис docker-registry:
# systemctl daemon-reload
# systemctl enable --now docker-registry.service
Проверьте работу сервиса:
# systemctl status docker-registry
● docker-registry.service - Docker Registry 2.0 implementation for storing and distributing Docker images
Loaded: loaded (/usr/lib/systemd/system/docker-registry.service; enabled; preset: disabled)
Active: active (running) since Mon 2025-04-21 06:18:09 UTC; 3h 37min ago
Main PID: 23898 (docker-registry)
Tasks: 8 (limit: 9471)
Memory: 111.8M (peak: 120.6M)
CPU: 1.738s
CGroup: /system.slice/docker-registry.service
└─23898 /usr/bin/docker-registry serve /etc/docker-registry/config.yml
апр 21 06:51:29 image-factory docker-registry[23898]: 127.0.0.1 - - [21/Apr/2025:06:51:29 +0000] "GET /v2/ HTTP/1.1" 200 2 "" "containers/5.34.0 (github.com>
апр 21 06:51:29 image-factory docker-registry[23898]: time="2025-04-21T06:51:29.664009384Z" level=info msg="Challenge established with upstream : {https r>
апр 21 06:51:29 image-factory docker-registry[23898]: time="2025-04-21T06:51:29.676328039Z" level=info msg="response completed" go.version=go1.22.3 http.req>
апр 21 06:51:29 image-factory docker-registry[23898]: 127.0.0.1 - - [21/Apr/2025:06:51:29 +0000] "GET /v2/k8s-sisyphus/kube-apiserver/manifests/latest HTTP/>
апр 21 06:51:29 image-factory docker-registry[23898]: time="2025-04-21T06:51:29.679041754Z" level=info msg="response completed" go.version=go1.22.3 http.req>
апр 21 06:51:29 image-factory docker-registry[23898]: 127.0.0.1 - - [21/Apr/2025:06:51:29 +0000] "GET /v2/k8s-sisyphus/kube-apiserver/manifests/sha256:47201>
апр 21 06:51:29 image-factory docker-registry[23898]: time="2025-04-21T06:51:29.682127544Z" level=info msg="response completed" go.version=go1.22.3 http.req>
апр 21 06:51:29 image-factory docker-registry[23898]: 127.0.0.1 - - [21/Apr/2025:06:51:29 +0000] "GET /v2/k8s-sisyphus/kube-apiserver/blobs/sha256:72b188bab>
апр 21 07:02:18 image-factory docker-registry[23898]: time="2025-04-21T07:02:18.767521547Z" level=info msg="response completed" go.version=go1.22.3 http.req>
апр 21 07:02:18 image-factory docker-registry[23898]: ::1 - - [21/Apr/2025:07:02:18 +0000] "GET /v2?_catalog HTTP/1.1" 301 48 "" "curl/8.12.0"
$ netstat -nlpt | grep 5000
tcp 0 0 :::5000 :::* LISTEN 23898/docker-regist
Скачайте пробный образ:
$ podman pull --tls-verify=false registry.altlinux.org/k8s-sisyphus/kube-apiserver
Проверьте наличие образа в кэше:
$ curl http://localhost:5000/v2/_catalog | jq .
{ "repositories": [ ... "k8s-sisyphus/kube-apiserver", ... ] }
и его теги:
$ curl http://localhost:5000/v2/k8s-sisyphus/kube-apiserver/tags/list | jq .
Настройка talosctl
Для того чтобы при развертывании кластера узлы использовали proxy-сервер для домена registry.altlinux.org, при вызове talosctl необходимо указать patch YAML-файл:
machine: registries: mirrors: registry.altlinux.org: endpoints: - http://<IP-административного-сервера>:5000
Разворачивание и настройка docker-регистатора кэш образов alt-orchestra
Скопируйте файл описания сервиса docker-registry в файл описания сервиса docker-cache-registry:
# cp /lib/systemd/system/docker-registry.service /lib/systemd/system/docker-cache-registry.service
Удалите инициализацию переменной REGISTRY_PROXY_REMOTEURL и измените описание файла конфигурации на /etc/docker-registry/cache-config.yml:
[Unit] Description=Docker Registry 2.0 implementation for storing and distributing Docker images After=network.target [Service] ExecStart=/usr/bin/docker-registry serve /etc/docker-registry/cache-config.yml [Install] WantedBy=multi-user.target
Скопируйте файл конфигурации сервиса:
# cp /etc/docker-registry/config.yml /etc/docker-registry/cache-config.yml
и подправьте его, указав порт 5001:
version: 0.1 log: fields: service: registry storage: cache: blobdescriptor: inmemory filesystem: rootdirectory: /var/lib/docker-registry http: addr: :5001 headers: X-Content-Type-Options: [nosniff]
Запустите новый сервис docker-cache-registry.service:
# systemctl daemon-reload
# systemctl enable --now docker-cache-registry.service
Проверьте работу служб:
$ netstat -nlpt | grep 500[01]
tcp 0 0 :::5000 :::* LISTEN 23898/docker-regist
tcp 0 0 :::5001 :::* LISTEN 24543/docker-regist
Разворачивание и настройка image-factory
Перед запуском сервиса image-factory отредактируйте файл /etc/sysconfig/image-factory описания окружения запуска:
REGISTRY=altlinux.space REPOSITORY="$REGISTRY/alt-orchestra" IMAGE_FACTORY_NAME="image-factory" PUBLICKEYBASE='alt-orchestra-baseimages-publickey' PUBLICKEYBASE_IMAGE="$REPOSITORY/$IMAGE_FACTORY_NAME/$PUBLICKEYBASE" HTTP_PORT=80 MIN_TALOSVERISON=1.9.0 INSECURE_IMAGE_REGISTRY=-insecure-image-registry CONTAINER_SIGNATURE_SUBJECT_REGEXP='@altlinux\.space$' CONTAINER_SIGNATURE_ISSUER_REGEXP='' CONTAINER_SIGNATURE_ISSUER='' CONTAINER_SIGNATURE_PUBKEY="/var/lib/$IMAGE_FACTORY_NAME/${PUBLICKEYBASE}.key" CONTAINER_SIGNATURE_PUBKEY_HASHALGO=sha256 ASSET_BUILER_MAX_ONCURRENCY=6 EXTERNAL_URL='' EXTERNAL_PXE_URL='<IP-адрес или домен image-factory сервера>' SCHEMATIC_SERVICE_REPOSITORY="$REPOSITORY/$IMAGE_FACTORY_NAME/schematics" INSECURE_SCHEMATIC_SERVICE_REPOSITORY='-insecure-schematic-service-repository' INSTALLER_INTERNAL_REPOSITORY="$REPOSITORY" INSTALLER_EXTERNAL_REPOSITORY="$REPOSITORY" INSECURE_INSTALLER_INTERNAL_REPOSITORY='-insecure-installer-internal-repository' TALOS_VERSIONS_RECHECK_INTERVAL="15m0s" CACHE_SIGNING_KEY_PATH="/var/lib/$IMAGE_FACTORY_NAME/cache-signing-key.key" CACHE_REPOSITORY="localhost:5001/$IMAGE_FACTORY_NAME/cache" INSECURE_CACHE_REPOSITORY='-insecure-cache-repository' METRICS_LISTEN_ADDR=':2122'
Убедитесь, что переменная CACHE_REPOSITORY имеет указанное значение:
CACHE_REPOSITORY="localhost:5001/$IMAGE_FACTORY_NAME/cache"
Укажите в переменной EXTERNAL_PXE_URL IP-адрес или домен image-factory сервера. Так как длина URL загружаемых артефактов (iPXE-скрипт, ядро, файловая система initramfs-amd64.xz) в iPXE ограничена 128 байтами, используйте либо IP-адрес сервера, либо домен или его алиас, который короче IP-адреса. В противном случае URL, формирующийся по шаблону http://<EXTERNAL_PXE_URL>/image/<hash>/<имя_артефакта> может оказаться длинней 128 байт и отрежется при формировании запроса со стороны iPXE-клиента.
Разворачивание сервера сетевой загрузки
Для разворачивания alt-orchestra
кластера по сети необходима установка сервера сетевой загрузки, включающего в себя:
DHCP-сервер
(ISC dhcpd) для раздачи IP-адресов узлам кластера и обеспеченияiPXE
-загрузки;- программу talos-img для загрузки нужных артефактов с сервера
Image Factory
и управления кэшем артефактов на сервере сетевой загрузки; TFTP
- иHTTP
-сервер для доступа к загруженным артефактам при разворачивании узлов кластера.
Установите пакет netboot-talos и выполните начальную настройку:
# apt-get install netboot-talos
# netboot-setup --iface=ens11 --talos
Остальные операции выполняются под обычным (непривилегированным) пользователем:
$ talos-img --get 376567988ad370138ad8b2698212367b8edcb69b5fd68c80be1f2ec7d603b4ba v1.10.0-alpha.3
Checking configuration...
Downloading iPXE script...
Downloading Linux kernel...
Downloading initramfs image...
Committing changes to cache...
25042801
$ talos-img --list
Boot-ID Arch Talos schematic Talos release
======== ===== ================================================================ =============
25042801 amd64 376567988ad370138ad8b2698212367b8edcb69b5fd68c80be1f2ec7d603b4ba v1.10.0-alpha.3
Разворачивание корневой инфраструктуры (https://altlinux.space/alt-orchestra)
Разворачивание и настройка proxy-сервера регистратора docker-образов kubernetes и docker-регистратора кэша образов image-factory
Так как docker-образы kubernetes (https://registry.altlinux.org) и образы image-factory (https://altlinux.space/alt-orchestra) для разработчиков, тестеров и администраторов доступны в рамках локальной сети, то поднимать proxy и cache docker-регистраторы особого смысла нет.
Для того чтобы снять лишнюю нагрузку с регистратора https://altlinux.space/alt-orchestra, имеет смысл поднять docker-регистратор кэша образов alt-orchestra.
Разворачивание и настройка image-factory
Если в разворачивании docker-регистатора кэша образов alt-orchestra нет необходимости, нужно в переменной CACHE_REPOSITORY указать URL:
CACHE_REPOSITORY="$REPOSITORY/$IMAGE_FACTORY_NAME/cache"