Nelm
Облако и инфраструктураRUВыкат Helm-чартов, переписанный там, где Helm слаб: вместо трёхстороннего слияния — Server-Side Apply, вместо «манифесты применились, значит успех» — граф операций и ожидание фактической готовности, плюс серверный предпросмотр в духе terraform plan. Чарты и релизы при этом остаются обычными — переписывать и переносить их не нужно.
Флант
автор
Go
язык
Apache-2.0
лицензия
★ 1108
GitHub звёзд
Установка
Частая ошибка — ставить его скриптом установки 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 не работает.