Четыре года мы развивали и улучшали 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, связанные с развёртыванием, вроде этого.

В процессе доработки находятся ещё несколько фичей, например возможность задавать прямые зависимости между ресурсами вместо использования хуков, весов и 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‑сервера

Комментарии (8)


  1. jidckii
    17.05.2024 12:10
    +1

    Лайк, подписка) Ещё бы документацию немного понятнее)


    1. TimurTukaev Автор
      17.05.2024 12:10

      Один раз уже переработали — стало гораздо лучше. Думаю, со временем еще раз придется) Сейчас собираем кейсы и т.п., чтобы лучше понять потребности в плане доки и понимания концепций верфи) Но всегда велкам в чат — там подскажут по тому, что в доке непонятно


    1. ilya-lesikov
      17.05.2024 12:10
      +1

      А какую документацию читаете, русскоязычную или англоязычную? Или и та, и та непонятна?


      1. jidckii
        17.05.2024 12:10

        Да вроде как +- одинаковые. Как по мне она плохо структурированна и неполная. Есть вещи которых просто нет, и узнать можно только в чате ТГ. Например про всякие переменные которые меняют поведение, сейчас точно не вспомню кейсы все.


  1. ggruno
    17.05.2024 12:10
    +1

    Если сделаете что хуки удаляются при удалении чарта без доп хуков

    То перейду на werf))


    1. ilya-lesikov
      17.05.2024 12:10
      +1

      В ближайших планах более тонкая настройка жизненного цикла ресурсов. Мы сведём под капотом хуки, CRD и обычные ресурсы в одну сущность, просто с разными настройками по умолчанию. Т. е. для обычных ресурсов можно будет использовать любые возможности хуков и наоборот. А удаление не-хуков при helm uninstall это как раз просто одна из возможностей не-хуков, это надо будет сделать доступным и для хуков.


  1. Kahelman
    17.05.2024 12:10

    Коллеги, вы сами-то прочитали что в первом. Абзаце написали? В и слова не понятно. Нельзя же так читателей мучить


    1. TimurTukaev Автор
      17.05.2024 12:10
      +1

      Ну, материал больше для пользователей werf был написан, кто уже в теме, в контексте. Поэтому так — иначе пришлось бы еще огромную простыню дописывать, чтобы пояснить всё. Более последовательные объяснения про Nelm будут скоро в отдельной статье. Про саму werf тоже в обозримом будущем кейсы всякие доделаем и публиканем, обзоры и т.п.