Необходимость разработки ещё одного менеджера конфигураций для 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.
Источник: http://www.opennet.ru/opennews/art.shtml?num=61223