Вышла werf 2.0: новый движок развёртывания Nelm и 300+ релизов за четыре года
Четыре года мы развивали и улучшали werf 1.2, но теперь наконец-то выпустили стабильную werf 2.0. Причина простая — последовательно накопилось множество улучшений (300+ релизов!), а кроме того, мы доработали новый движок развёртывания Nelm, и в werf 2.0 это единственный движок. Старый движок удалён. Nelm обратно совместим с Helm 3, поэтому никаких особых изменений в чартах не потребуется — они будут развёртываться так же, как и раньше.
В некоторых случаях у Nelm отличается поведение: например, у него более строгая валидация чартов, поэтому, хотя Nelm и доступен в werf 1.2, по умолчанию мы его включили только в werf 2.0.
Если вам непонятно, что это за werf такая, скорее открывайте спойлер :)
werf — это Open Source-утилита для организации CI/CD, начиная со сборки образов контейнеров и заканчивая их развёртыванием в Kubernetes. Для сборки и развёртывания с werf достаточно иметь Git-репозиторий, в котором будут Helm-чарт, простенький файл werf.yaml и Dockerfile.
Имея такой Git-репозиторий на руках, запускайте команду werf converge, она соберёт образы, опубликует их в container registry и развернёт Helm-чарт в ваш Kubernetes-кластер. Для организации непрерывной доставки с werf вы можете использовать любимую CI-систему — например, есть готовые интеграции для GitLab CI/CD и GitHub Actions.
Чтобы это стало возможным, werf использует известные технологии, такие как Docker и Helm (или теперь уже Nelm) для реализации важных функций. Но werf намного больше, чем просто обёртка. Например, для сборки у нас есть собственный сборщик на основе Buildah от Red Hat. Если сравнивать с обычным Docker, то в werf доступны такие дополнительные фичи, как распределённое кэширование «из коробки», автоматическое тегирование на основе содержимого образов, умная очистка container registry на основе специальных Git-политик и ещё ряд других полезностей.
Приятное дополнение: werf — это проект CNCF Sandbox, пару лет назад мы передали права на неё в CNCF, чтобы гарантировать пользователям, что утилита всегда будет Open Source и бесплатной. За последний месяц мы насчитали 10 000 активных проектов, использующих werf (обычно один werf-проект — это один Git-репозиторий). У нас почти 4000 звезд на GitHub и 8 лет весьма активной разработки.
Когда-то в 2018 году мы сделали «для себя» внутренний инструмент dapp. Потом он превратился в werf, а werf в свою очередь уже попала в CNCF Sandbox, выросла и окрепла.
Что такое Nelm и какое будущее его ждет
Nelm — это фактически наша частичная реимплементация Helm 4, которого мы, к сожалению, так и не дождались. Сначала мы пытались заносить изменения в апстрим Helm, но его разработка сильно замедлилась, PR«ы и коммиты годами висели без ответов, а баги и отсутствующая функциональность мешали развивать werf так, как нам хотелось.
Сам по себе Helm — это два основных компонента: подсистема работы с чартами и подсистема развёртывания ресурсов. Подсистему развёртывания мы, по сути, и переписали с нуля —, но с сохранением обратной совместимости. Подсистему работы с чартами мы тоже доработали и продолжаем дорабатывать. При этом возможность деплоить с werf Helm-чарты без изменений в них остаётся нашей стратегической задачей и с переходом на Nelm в качестве движка развертывания.
Прямо сейчас Nelm можно попробовать только в составе werf. В будущем же он станет отдельной утилитой с удобным API и возможностью интеграции в другие решения для CI/CD. Но звёздочки на GitHub ему можно ставить уже сегодня.
Вот что Nelm привносит в werf:
3-Way Merge заменён на Server-Side Apply, который является гораздо более надёжным механизмом обновления ресурсов в кластере.
Команда werf plan покажет изменения, которые произойдут в кластере во время следующего развёртывания.
Эффективно распараллелены операции над ресурсами (включая отслеживание) при развёртывании.
Доработано развёртывание CRDs.
Значительно улучшено и переработано отслеживание ресурсов.
Исправлены многочисленные баги и проблемы Helm, связанные с развёртыванием, вроде этого — https://github.com/helm/helm/issues/6969.
В процессе доработки находятся ещё несколько фичей, например возможность задавать прямые зависимости между ресурсами вместо использования хуков, весов и init-контейнеров и использование обычными ресурсами всех специальных возможностей хуков, вроде helm.sh/hook: pre-install
или helm.sh/hook: before-hook-creation, hook-succeeded
. Как только отшлифуем, анонсируем их отдельно.
Подробнее про Nelm можно будет почитать в нашей статье для Хабра, посвящённой нашему новому движку развёртывания. Она уже готовится и скоро будет опубликована. Следите за анонсами в Telegram-канале werf.
Что такое werf 2.0 и как ее попробовать
werf 2.0 практически полностью совместима с werf 1.2, а список обратно несовместимых изменений (он совсем крошечный) можно посмотреть в нашей доке. Мы рекомендуем переходить на версию 2.0 как можно скорее — причём эта миграция пройдёт куда проще, чем с 1.1 на 1.2. При этом werf 1.2 переходит в режим обслуживания.
Ещё одно большое изменение касается нумерации версий — с werf 2.0 мы будем следовать семантическому версионированию и планируем выпускать мажорную версию примерно раз в год. Это позволит упростить и ускорить разработку, не рискуя обратной совместимостью в минорных или патч-версиях. Взамен обещаем более тщательно следить за обратной совместимостью в минорных и патч-обновлениях.
Попробовать werf 2.0:
source $(trdl use werf 2 stable)
Напоминаем, что у нас есть несколько каналов обновлений:
Alpha. Быстро доставляет новые возможности, однако может быть нестабильным.
Beta. Для более широкого тестирования новых возможностей с целью обнаружения проблем.
Early-Access. Достаточно безопасен для использования в некритичных окружениях и для локальной разработки, позволяет раньше получать новые возможности.
Stable. Безопасен и рекомендуется для широкого использования в любых окружениях как вариант по умолчанию.
Rock-Solid. Наиболее стабильный канал, рекомендован для критичных окружений со строгими требованиями SLA.
Долгий путь от werf 1.2 к werf 2.0
А теперь вернёмся к тем самым »300+ релизам», упомянутым выше, — в werf за последние годы действительно накопилось немало новых фичей и изменений. Перечислим самые важные (здесь будут только фичи самой werf, то, что принёс Nelm, мы в список не включали):
Сборка Dockerfile«ов в werf с использованием Buildah под Linux, Windows и macOS.
Послойное кэширование в registry для Dockerfile.
Поддержка сборки образов под произвольные платформы и сразу под множество платформ из коробки.
Режим разработки (
--dev)
, который позволяет не думать о гитерминизме и промежуточных коммитах при отладке и разработке.Новая директива для образов dependencies в
werf.yaml
(начиная с версии 1.2.60).Команда
werf bundle render
, которая рендерит манифесты бандла для их дальнейшего деплоя другим ПО или отладки.Команда
werf kube-run
— как werf run, но вместо локального контейнера запускает под в K8s-кластере.Отслеживание статуса и сбор событий для всех типов ресурсов, а не только Deployment/STS/DS/Job.
Возможность перед выкатом ресурса релиза дождаться готовности внешнего (вне релиза) Kubernetes-ресурса.
Переход на новый менеджер обновлений trdl (тоже наша разработка и тоже Open Source).
Официальные ресурсы werf
Велкам: ставьте звёзды, приносите issue и коммиты!
Читайте также в нашем блоге
werf v1.2 — стабильный релиз Open Source-утилиты для доставки приложений в Kubernetes
В сообществе пользователей утилиты для сборки и деплоя werf — уже 1000 участников
8 лет werf — утилите для построения CI/CD с любой CI-системой: главные события и полезные материалы
10 лет жизни и опыта компании «Флант» в одном посте
15 лет «Фланта»: переход от сервисной компании к продуктовой, покупка внешнего продукта, вера в Open Source
Полезные ссылки для работы с werf
Первые шаги с werf: собираем и деплоим простое приложение в Kubernetes
Автоматизируем сборку и деплой приложения в GitLab CI/CD: подробное руководство с примерами
Гайды по Kubernetes с werf на разных фреймворках и языках программирования (Go, Node.js, Spring, Rails, Laravel, Django)
Сайт и документация werf
Встречи с сообществом пользователей werf
Разворачиваем приложение в кластере Kubernetes под управлением Deckhouse c помощью werf
Задаём порядок деплоя ресурсов в Kubernetes с помощью werf/Helm
Запуск одноразовых задач и отладка образов прямо в Kubernetes-кластере с помощью werf
Новые возможности werf: CI/CD на основе werf и Argo CD
Запуск werf в GitLab CI/CD без Docker-сервера