Вышла werf 2.0: новый движок развёртывания Nelm и 300+ релизов за четыре года

Четыре года мы развивали и улучшали werf 1.2, но теперь наконец-то выпустили стабильную werf 2.0. Причина простая — последовательно накопилось множество улучшений (300+ релизов!), а кроме того, мы доработали новый движок развёртывания Nelm, и в werf 2.0 это единственный движок. Старый движок удалён. Nelm обратно совместим с Helm 3, поэтому никаких особых изменений в чартах не потребуется — они будут развёртываться так же, как и раньше.

786cf2898e777aa651425b97c63dda03.png

В некоторых случаях у 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, мы в список не включали):

  1. Сборка Dockerfile«ов в werf с использованием Buildah под Linux, Windows и macOS.

  2. Послойное кэширование в registry для Dockerfile. 

  3. Поддержка сборки образов под произвольные платформы и сразу под множество платформ из коробки.

  4. Режим разработки (--dev), который позволяет не думать о гитерминизме и промежуточных коммитах при отладке и разработке. 

  5. Новая директива для образов dependencies в werf.yaml (начиная с версии 1.2.60).

  6. Команда werf bundle render, которая рендерит манифесты бандла для их дальнейшего деплоя другим ПО или отладки.

  7. Команда werf kube-run — как werf run, но вместо локального контейнера запускает под в K8s-кластере.

  8. Отслеживание статуса и сбор событий для всех типов ресурсов, а не только Deployment/STS/DS/Job.

  9. Возможность перед выкатом ресурса релиза дождаться готовности внешнего (вне релиза) Kubernetes-ресурса.

  10. Переход на новый менеджер обновлений trdl (тоже наша разработка и тоже Open Source).

Официальные ресурсы werf

Велкам: ставьте звёзды, приносите issue и коммиты!

Читайте также в нашем блоге

  1. werf v1.2 — стабильный релиз Open Source-утилиты для доставки приложений в Kubernetes 

  2. В сообществе пользователей утилиты для сборки и деплоя werf — уже 1000 участников

  3. 8 лет werf — утилите для построения CI/CD с любой CI-системой: главные события и полезные материалы 

  4. 10 лет жизни и опыта компании «Флант» в одном посте

  5. 15 лет «Фланта»: переход от сервисной компании к продуктовой, покупка внешнего продукта, вера в Open Source 

Полезные ссылки для работы с werf

  1. Первые шаги с werf: собираем и деплоим простое приложение в Kubernetes

  2. Автоматизируем сборку и деплой приложения в GitLab CI/CD: подробное руководство с примерами

  3. Гайды по Kubernetes с werf на разных фреймворках и языках программирования (Go, Node.js, Spring, Rails, Laravel, Django)

  4. Сайт и документация werf

  5. Встречи с сообществом пользователей werf

  6. Разворачиваем приложение в кластере Kubernetes под управлением Deckhouse c помощью werf

  7. Задаём порядок деплоя ресурсов в Kubernetes с помощью werf/Helm

  8. Запуск одноразовых задач и отладка образов прямо в Kubernetes-кластере с помощью werf

  9. Новые возможности werf: CI/CD на основе werf и Argo CD

  10. Запуск werf в GitLab CI/CD без Docker-сервера

© Habrahabr.ru