Nelm

Облако и инфраструктураRU

Выкат Helm-чартов, переписанный там, где Helm слаб: вместо трёхстороннего слияния — Server-Side Apply, вместо «манифесты применились, значит успех» — граф операций и ожидание фактической готовности, плюс серверный предпросмотр в духе terraform plan. Чарты и релизы при этом остаются обычными — переписывать и переносить их не нужно.

Флант

автор

Go

язык

Apache-2.0

лицензия

★ 1108

GitHub звёзд

Установка

# у Nelm СВОЙ репозиторий подписей — не werf
NELM_VER=$(curl -fsSL https://tuf.nelm.sh/targets/channels/1/stable)
curl -fsSL "https://tuf.nelm.sh/targets/releases/${NELM_VER}/linux-amd64/bin/nelm" -o nelm
chmod +x nelm && sudo mv nelm /usr/local/bin/
nelm version
# или из пакетов
brew install nelm

Частая ошибка — ставить его скриптом установки werf: инструменты родственные, и команда выглядит правдоподобно. Она не работает: в том скрипте Nelm не упоминается ни разу, он ставит только werf. Рекомендованный вендором путь — менеджер обновлений trdl с репозиторием tuf.nelm.sh, у которого своя корневая версия и свой отпечаток.

Переход обратим

Это первое, что спрашивают, и ответ приятный: чарты переделывать не нужно. Nelm построен на кодовой базе Helm и совместим с обычными чартами, включая тёмные углы вроде функции поиска ресурсов в кластере.

Сведения о релизах хранятся в тех же самых Helm Releases. Значит, один и тот же релиз можно выкатывать то одним инструментом, то другим, и переносить состояние никуда не надо. Отличаются только раскладка команд и флаги — в документации есть готовая таблица соответствия.

Что именно сделано лучше

Предпросмотр. Отдельная команда показывает дифф на основе серверной примерки: это то, что реально сделает сервер API, а не результат сравнения на клиенте. План можно сохранить в файл, отревьюить и применить именно его — тогда выкатится ровно проверенное.

Порядок. Вместо хуков строится граф операций: вес можно задать обычному ресурсу, а не только хуку, можно объявить зависимость одного ресурса от другого и даже подождать внешний ресурс, который создаст сторонний оператор.

Обратная связь. Раз в несколько секунд печатается таблица состояний с ошибками, рядом льются логи контейнеров и события. Готовность определяется всерьёз: у стандартных ресурсов свои трекеры, у популярных пользовательских — написанные правила, у незнакомых — разбор поля состояния.

И две мелочи, которые на практике решают больше всего. Значения предыдущего релиза никогда не подмешиваются молча — применяется ровно то, что передали. А описания пользовательских типов применяются не только при первой установке, но и при обновлениях, и умеют именно обновляться.

Чего ожидать не стоит

Плагины Helm не поддерживаются, и поддержку не планируют — мешает устройство их интерфейса. Вместо этого самое востребованное встраивают внутрь: так уже сделаны предпросмотр релиза и работа с шифрованными значениями, для которых раньше брали сторонние плагины.

Жёсткое требование к кластеру: нужен включённый Server-Side Apply. По умолчанию он есть начиная с Kubernetes 1.16, в 1.14 и 1.15 включается руками, а на 1.13 и старше инструмент не работает вовсе.

И расхождение версий, о котором стоит знать: канал стабильных выпусков отдаёт 1.25.3, тогда как на GitHub уже есть теги посвежее — но помеченные предварительными. Ориентироваться стоит на канал.

Частые вопросы

Придётся ли переделывать чарты при переходе с Helm?

Нет. Nelm совместим с обычными чартами Helm и выкатывает их без изменений, включая такие возможности, как поиск ресурсов в кластере. Переход сводится к замене команд в CI — в документации есть готовая таблица соответствия.

Можно ли выкатывать один и тот же релиз то Helm, то Nelm?

Да. Сведения о релизах хранятся в обычных Helm Releases, поэтому инструменты можно чередовать, и переносить состояние никуда не требуется.

Чем предпросмотр отличается от привычного diff-плагина?

Он строится на серверной примерке, то есть показывает то, что действительно сделает сервер API, а не результат сравнения на клиенте. Сверх этого план можно сохранить в файл, отревьюить и применить именно его — так выкатывается ровно проверенный набор изменений.

Работают ли плагины Helm?

Нет, и поддержку не планируют — мешает устройство интерфейса плагинов. Вместо этого самое востребованное реализуют внутри: так уже сделаны предпросмотр релиза и работа с шифрованными значениями.

Какие требования к версии Kubernetes?

Нужен включённый Server-Side Apply. По умолчанию он есть начиная с Kubernetes 1.16; в версиях 1.14 и 1.15 его можно включить вручную, а на 1.13 и старше Nelm не работает.

Теги

флантhelmkubernetesдеплойроссийские сервисы
github.com ↗← Все CLI инструментыРоссийские AI-агенты