Разработчики свободной PaaS-платформы Cozystack подготовили проект Talm, призванный упростить конфигурацию bare-metal серверов для Talos Linux, операционной системы для запуска Kubernetes, которая имеет Kubernetes-подобное API и настраивается одним Yaml-манифестом. Несмотря на то что Talm был создан для описания декларативной установки Cozystack, он не привязан конкретно к этой платформе и может использоваться для управления любыми конфигурациями Talos Linux. Проект развивается под лицензией MPL.
Необходимость разработки ещё одного менеджера конфигураций для Talos Linux обусловлена ориентацией на bare-metal серверы. Разработчики стремились создать наиболее простой интерфейс, похожий на Helm и kubectl, хорошо знакомые утилиты администраторам Kubernetes.
Ввиду того, что каждый физический сервер имеет различную конфигурацию (MAC-адреса, интерфейсы и диски), необходимо иметь отдельный конфигурационный файл под каждую ноду. Нужен простой менеджер, который позволял бы генерировать такие файлы конфигурации на основе собранной информации и декларативно обновлять их.
Для этого используется динамическая генерация файлов конфигурации по заданному шаблону. Есть готовые пресеты "generic" и "cozystack". Talm умеет на этапе генерации собирать информацию из Talos API и использовать её для результирующих конфигураций. Эти файлы конфигурации не содержат секретов, а только изменения, что позволяет удобно хранить их в Git и управлять ими декларативно.
В большинстве Talm повторяет структуру Helm, оперируя понятием чарт, в котором описываются шаблоны для генерации конфигурации. Поддерживаются Helm-подобные функции lookup для опроса Talos API напрямую и сбор дополнительных метаданных для генерации файлов конфигурации с использованием "go templates" и библиотеки sprig.
Команда:
talm template -t templates/controlplane.yaml -e 1.2.3.4 -n 1.2.3.4 > nodes/srv1.yaml
Опрашивает ноду "1.2.3.4" по API, генерирует для неё новый файл конфигурации из шаблона, подставляя необходимые данные. Полученный файл конфигурации можно сразу же применить одной лишь командой:
talm apply -f nodes/srv1.yaml
Также в каждом таком файле конфигурации Talm устанавливает свой modeline, в котором запоминает эндпоинты ноды и шаблоны, из которых он был получен, чтобы их было удобно применять и обновлять без указания дополнительных опций. Talm поддерживает все те же команды, что и upstream утилита talosctl, но позволяет передавать им конфигурационный файл ноды, например:
talm dashboard -f nodes/srv1.yaml -f nodes/srv2.yaml -f nodes/srv3.yaml
выведет интерактивный дашборд для всех трёх нод. А команда:
talm get routes -f nodes/srv1.yaml
выведет список роутов на ноде "srv1"
При необходимости файлы конфигурации можно выгрузить с опцией "--full" на отдельный PXE-сервер, что позволяет нодам скачивать их автоматически. Таким образом, Talm сохраняет вариативность bare-metal серверов, обеспечивая удобное управление ими в соответствии с лучшими практиками GitOps.
|