Материалы к экзамену · Урок 1

Из чего собран Cozystack

Три слоя, четыре варианта установки и почему платформа — это просто ещё один набор объектов Kubernetes.

Начнём с вопроса, который на экзамене задают чаще любого другого: что такое Cozystack по своей природе? Не «для чего он», а именно из чего сделан.

Ответ короткий: это Kubernetes, которому добавили новые типы объектов. Не форк, не надстройка над чужим API, не отдельный сервер управления. Когда вы просите платформу завести базу данных, вы создаёте объект — такой же, как под или сервис, только называется он Postgres. Дальше за ним следит программа-оператор и делает всё остальное.

Это стоит уложить в голове до всего прочего, потому что из этого следует почти всё остальное. Работает kubectl? Работает. Работает Terraform? Работает. Права раздаются обычным RBAC? Да, обычным.

Три слоя

Платформа собрана из трёх этажей, и путать их порядок — самая частая ошибка на экзамене.

Cozystackтенанты, базы, виртуалки, S3 — как объекты KubernetesKubernetesуправляющий кластер: API, планировщик, операторыTalos Linuxоперационная система на каждом узле
Снизу вверх: Talos → Kubernetes → Cozystack. Каждый слой стоит на предыдущем.

Talos Linux — операционная система узлов (node OS). Её особенность в том, что у неё нет командной строки: ни SSH, ни консоли, ни пакетного менеджера. Настраивается она декларативно, через свой API: вы отправляете описание желаемого состояния, узел приводит себя к нему. Корневая файловая система при этом только для чтения.

Для администратора, привыкшего зайти на сервер и что-нибудь поправить, это поначалу неуютно. Смысл в другом: если зайти и поправить нельзя, то и состояние узла не расползается со временем. Два узла, собранные по одному описанию, останутся одинаковыми через год.

Ставят при этом не стоковый Talos, а собственный образ платформы: в него добавлены модули ядра DRBD — на нём держится репликация LINSTOR — и ZFS. В обычном образе их нет.

Kubernetes — управляющий кластер (management cluster), который работает поверх Talos. Обычный, не переделанный: тот же API, те же контроллеры.

Здесь легко смешать два разных понятия. Управляющий кластер один — это и есть платформа. А кластеры, которые заказывают тенанты (tenant clusters), — уже её продукт: их управляющий слой работает подами внутри управляющего кластера.

Cozystack — набор компонентов, устанавливаемых в этот кластер. Именно они добавляют новые типы объектов и следят за ними.

Установка в три этапа

Экзамен спрашивает не команды, а порядок и смысл этапов.

  1. Talos на узлах. Машины загружаются с образа платформы и получают машинное описание. Способов три: boot-to-talos — установщик пишет Talos на диск из уже запущенного Linux, загрузка с ISO и сетевая загрузка PXE. PXE держат два временных контейнера: Matchbox отдаёт образ по HTTP, dnsmasq раздаёт DHCP и TFTP.
  2. Kubernetes. Из этих узлов собирается управляющий кластер. Рекомендованный инструмент — Talm, собственный менеджер конфигураций Talos с шаблонами в духе Helm.
  3. Cozystack. В кластер ставится сама платформа, дальше она разворачивает свои компоненты сама. Ставят её чартом cozy-installer в пространство имён cozy-system, а затем применяют один YAML — Platform Package. Это единственная точка настройки: домен платформы, адрес apiserver, диапазоны адресов и выбранный вариант установки.

Третий этап устроен любопытно: платформа не устанавливает компоненты по списку, а описывает желаемый состав и передаёт его FluxCD. Дальше Flux сам приводит кластер к описанию и продолжает следить, чтобы состав не расходился. Обновление платформы — это смена версии в описании, а не пересборка руками.

Каждый компонент платформы Flux ставит отдельным релизом — объект называется HelmRelease, в командах сокращается до hr. Поэтому вопрос «встала ли платформа» — это вопрос о релизах, а не о подах:

kubectl get hr -A

Все в состоянии READY True — установка завершена.

Четыре варианта установки

Платформу ставят не целиком, а одним из четырёх наборов. Названия надо знать дословно — и вот почему это не придирка: в версии 1.5 их переименовали, а старые имена (paas-full, distro-full и подобные) остались жить в чужих статьях. Перепутать легко.

ВариантЧто этоКогда ваш случай
isp-fullвся платформа на Talosсвоё железо, нужно всё сразу
isp-full-genericто же, но на чужом Kubernetesкластер уже есть: k3s, kubeadm, RKE2
isp-hostedплатформенные сервисы без сети, хранилища и виртуализацииповерх управляемого Kubernetes, где сеть и диски дал провайдер
defaultтолько источники пакетов, ничего не включенособираете платформу сами, компонент за компонентом

Запомнить проще через одну фразу: isp-full — всё на Talos, -generic — то же на других дистрибутивах, -hosted — только платформа, инфраструктура снизу чужая, default — с нуля и вручную.

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

Вариант задаёт состав по умолчанию, а тонкая настройка идёт пакетами (package). Каждый компонент платформы — пакет с именем вида cozystack.<компонент>, и посмотреть их состояние можно одной командой:

kubectl get package

Подправить набор дают два ключа в Platform Package: bundles.enabledPackages добавляет пакеты сверх варианта, bundles.disabledPackages — убирает. Оговорка, которую спрашивают: отключать пакеты можно только до установки. С работающей платформы компонент так не снимется — убирать придётся руками через Helm.

Из чего она состоит

Компонентов много, но на экзамене спрашивают, кто за что отвечает, а не полный список. Держите в голове такую карту:

ЗадачаКомпонент
Виртуальные машиныKubeVirt
Управляющий слой тенантских кластеровKamaji
Дисковое хранилищеLINSTOR / DRBD
Объектное хранилище (S3)SeaweedFS
Сеть подовCilium
Сеть тенантов, VPCKube-OVN
Внешние адресаMetalLB
МетрикиVictoriaMetrics
ЖурналыVictoriaLogs
ГрафикиGrafana
Доставка конфигурацииFluxCD
Вход по учётным записямKeycloak

Строку про Kamaji стоит запомнить отдельно: он поднимает управляющий слой тенантских кластеров подами прямо в управляющем кластере — отдельных машин под мастера тенанту не надо.

Обратите внимание, чего в списке нет: Prometheus и Loki. Их часто подставляют в варианты ответа как ловушку — метрики и журналы здесь собирают VictoriaMetrics и VictoriaLogs.

Что нужно от железа

Цифры спрашивают дословно, так что минимальный профиль придётся выучить как есть: три узла, на каждом 8 ядер, 24 ГБ памяти и два диска — 50 ГБ системный и 256 ГБ под данные. Два диска здесь не прихоть: второй отдаётся под LINSTOR. Меньше трёх узлов не даёт отказоустойчивости ни хранилищу, ни управляющему слою.

Сеть нормирована не слабее: все узлы в одном сегменте L2, задержка между ними — меньше 10 мс по времени обращения (RTT).

Если узлы сами виртуальные — стенд в vSphere или Proxmox, — включите вложенную виртуализацию и проброс флагов процессора. На железе это не нужно. Домашний стенд по этому минимуму — законный способ пройти весь getting-started целиком.

Платформа собрана. Дальше её надо между кем-то поделить — этим и займётся следующий урок.

Что спросят на экзамене

  • Порядок слоёв снизу вверх: Talos → Kubernetes → Cozystack.
  • Что Talos управляется через API и не имеет SSH, а корень доступен только на чтение.
  • Что платформа расширяет Kubernetes своими типами объектов, а не заменяет его.
  • Названия четырёх вариантов установки (bundles) — дословно.
  • Кто за что отвечает: KubeVirt, LINSTOR, SeaweedFS, Cilium, Kube-OVN, MetalLB.
  • Что метрики хранит VictoriaMetrics, а не Prometheus.
  • Что Kamaji держит управляющий слой тенантских кластеров подами в управляющем кластере.
  • Чем управляющий кластер (management cluster) отличается от тенантских кластеров.
  • Что пакеты называются cozystack.<компонент>, список даёт kubectl get package.
  • Ключи bundles.enabledPackages и bundles.disabledPackages, отключение — только до установки.
  • Что Talm — рекомендованный инструмент начальной настройки Talos и сборки кластера.
  • Зачем платформе свой образ Talos: модули ядра DRBD и ZFS.
  • Способы установки Talos: boot-to-talos, ISO, PXE (Matchbox отдаёт образ, dnsmasq — DHCP и TFTP).
  • Что платформу ставит cozy-installer в cozy-system, а настраивает Platform Package.
  • Минимум железа: 3 узла, 8 ядер, 24 ГБ, диски 50 и 256 ГБ, один сегмент L2, задержка до 10 мс.
  • Что готовность установки проверяют по состоянию релизов FluxCD.