Мы постоянно улучшаем и актуализируем наши инструкции. Далее обновления, которые вы могли пропустить:
— [ci, docker/k8s] Проработаны сценарии использования кэширования контейнеров.
— [ci, github, docker/k8s] Обновлены сценарии для GitHub Actions — настройка сведена к минимуму.
— [ci, github, k8s] Добавлена инструкция по запуску пайплайнов GitHub Actions в Kubernetes.
— [ci] Актуализированы инструкции по настройке окружения для multiplatform-сборок.
— [local-dev, mac/windows] Добавлена инструкция по локальному запуску сборки с Buildah на macOS и Windows (спойлер: всё работает внутри Docker-контейнера).
— install.sh теперь поддерживает больше дистрибутивов и сценариев.
— Структура страниц быстрого старта теперь плоская — теперь проще искать нужное и делиться прямыми ссылками на конкретные разделы.
Спасибо за вашу обратную связь — она помогает выявлять слепые зоны и делать продукт зрелым и удобным ♥️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤1
👁 Правила для отслеживания ресурсов Argo CD, Flux, Prometheus, cert-manager и других
Библиотека kubedog отвечает за отслеживание Kubernetes-ресурсов во время деплоя в Nelm и werf. В неё можно добавлять дополнительные правила, чтобы трекать кастомные ресурсы любых проектов. Недавно мы добавили правила для Argo CD, Flux, Prometheus, cert-manager, Kyverno и Bitnami Sealed Secrets.
Чуть больше подробностей об этом и информацию о том, как добавить свои правила для всех пользователей (а таким contributions мы очень рады!), — см. в дискуссии на GitHub.
Библиотека kubedog отвечает за отслеживание Kubernetes-ресурсов во время деплоя в Nelm и werf. В неё можно добавлять дополнительные правила, чтобы трекать кастомные ресурсы любых проектов. Недавно мы добавили правила для Argo CD, Flux, Prometheus, cert-manager, Kyverno и Bitnami Sealed Secrets.
Чуть больше подробностей об этом и информацию о том, как добавить свои правила для всех пользователей (а таким contributions мы очень рады!), — см. в дискуссии на GitHub.
👍9
Теперь werf позволяет явно указывать доступы при работе с внешними git-репозиториями — через переменные окружения, файлы или прямое значение. По аналогии со сборочными секретами.
Это избавляет от необходимости использовать хаки с
git config, шаблонизацию URL или SSH, а главное — не влияет на пересборку и не требует какий-либо дополнительных действий в werf-giterminism.yaml.
# werf-includes.yaml
includes:
- git: https://gitlab.company.name/common/helper-utils.git
basicAuth:
username: token
password:
env: GITLAB_TOKEN # или
src: ./token # или
value: <your-password>
commit: fedf144f7424aa217a2eb21640b8e619ba4dd480
add: /.werf
# werf.yaml
# ...
git:
- url: https://gitlab.company.name/common/helper-utils.git
basicAuth:
username: token
password:
env: GITLAB_TOKEN # или
src: ./token # или
value: <your-password>
to: /helper-utils
—
git config --global url."https://<TOKEN>@...".insteadOf "https://..." (не надо так делать).— Шаблоны URL вида
https://{{ env "GITLAB_TOKEN" }}@... (не надо так делать).— Или использовать SSH (хороший вариант).
— Подключение конфигурации `includes`.
— Добавление исходного кода из внешних git-репозиториев.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
Почти 5 месяцев прошло с момента первого GA-релиза Nelm — нашего форка Helm для деплоя в Kubernetes, используемого в werf и доступного как самостоятельная утилита. Всё это время проект не стоял на месте и получил множество новых фич, не говоря уж про исправления багов.
Этот пост на GitHub собрал в себе все наиболее значимые изменения, представленные в недавних релизах Nelm. Они включают в себя 2 новые экспериментальные команды, 7 новых флагов, 2 новые аннотации, новые функции и некоторые другие улучшения.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
— Добавлена поддержка импорта из произвольных образов с помощью директивы
import.from.— Директивы для указания исходных образов унифицированы: предлагается использовать
from и import.from для всех (от fromImage и import.image отказываемся в следующем Major).Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Значительно уменьшена нагрузка на Kubernetes при развертывании (werf 2.47.0+, Nelm 1.12.0+)
Благодаря оптимизации отслеживания ресурсов, а также отображению логов не со всех Pod'ов сразу, а только с одного Pod'а на каждый контроллер, удалось добиться значительного уменьшения нагрузки на Kubernetes при развертывании.
К примеру, на тестовом кластере нагрузка на CPU на мастер-ноде упала в 10 раз при использовании Nelm/werf для развертывания Deckhouse (40 Helm-релизов, многие развертываются параллельно). Выигрыш тем больше, чем крупнее релиз (включая количество Pod'ов).
PS: аннотация
Благодаря оптимизации отслеживания ресурсов, а также отображению логов не со всех Pod'ов сразу, а только с одного Pod'а на каждый контроллер, удалось добиться значительного уменьшения нагрузки на Kubernetes при развертывании.
К примеру, на тестовом кластере нагрузка на CPU на мастер-ноде упала в 10 раз при использовании Nelm/werf для развертывания Deckhouse (40 Helm-релизов, многие развертываются параллельно). Выигрыш тем больше, чем крупнее релиз (включая количество Pod'ов).
PS: аннотация
werf.io/show-logs-only-for-number-of-replicas поможет настроить для каждого контроллера количество Pod'ов, с которых будут собираться логи (теперь по умолчанию — 1 Pod).❤5👍3
Настраиваемый жизненный цикл ресурсов, улучшения для "plan" и другое (werf 2.49.1, nelm 1.13.1)
Добавлены три новые аннотации для настройки того, как ресурсы ведут себя при развертывании:
*
Вдохновлено
*
Вдохновлено
*
Вдохновлено Helm-хуками.
Эти три аннотации фактически позволяют сделать из обычного ресурса Helm-хук и наоборот. Если для вас не критична совместимость вашего чарта с Helm, мы рекомендуем больше не использовать Helm-хуки и веса хуков: вместо этого используйте эти три новые аннотации вместе с
Добавлены новые опции для контроля вывода
Другие обновления
* Большие (и обычно бесполезные) диффы для создающихся/удаляющихся ресурсов теперь по умолчанию скрыты (можно вернуть обратно с
* В вывод добавлено отображение причин, по которым ресурсы будут "blind applied"
Другие изменения:
* При выкате ресурсы начнут отображаться в таблице прогресса в момент их развертывания, а не с самого начала релиза
* Исправлено:
* Исправлено: давний баг с проблемами при выкате Helm-чартов с ресурсами с
Больше про новые аннотации: https://ru.werf.io/docs/v2/usage/deploy/resource_lifecycle.html
Добавлены три новые аннотации для настройки того, как ресурсы ведут себя при развертывании:
*
werf.io/delete-policy: before-creation|succeeded|failedВдохновлено
helm.sh/hook-delete-policy, но работает для любых ресурсов, не только хуков. Позволяет пересоздать ресурс вместо его обновления и/или удалить ресурс после его удачного/неудачного развертывания.*
werf.io/deploy-on: pre-install|install|post-install|pre-upgrade|...Вдохновлено
helm.sh/hook, но работает для любых ресурсов. Позволяет отрендерить ресурс только при конкретном типе развертывания (install, upgrade, ...), и развернуть ресурс в pre, main или post-стадии.*
werf.io/ownership: release|anyoneВдохновлено Helm-хуками.
anyone сделает так, что ресурс не будет удален, если ресурс удален из чарта или если удален релиз, также релизные аннотации не будут применяться/валидироваться.Эти три аннотации фактически позволяют сделать из обычного ресурса Helm-хук и наоборот. Если для вас не критична совместимость вашего чарта с Helm, мы рекомендуем больше не использовать Helm-хуки и веса хуков: вместо этого используйте эти три новые аннотации вместе с
werf.io/weight или werf.io/deploy-dependency. Такой подход гораздо гибче, проще и обеспечит более быстрый выкат, т.к. все ресурсы будут развернуты в одной (main) стадии.Добавлены новые опции для контроля вывода
werf plan и nelm release plan install:--show-insignificant-diffs--show-sensitive-diffs--show-verbose-diffs--show-verbose-crd-diffs--diff-context-linesДругие обновления
plan:* Большие (и обычно бесполезные) диффы для создающихся/удаляющихся ресурсов теперь по умолчанию скрыты (можно вернуть обратно с
--show-verbose-diffs)* В вывод добавлено отображение причин, по которым ресурсы будут "blind applied"
Другие изменения:
* При выкате ресурсы начнут отображаться в таблице прогресса в момент их развертывания, а не с самого начала релиза
* Исправлено:
render не рендерит хуки, если в них не присутствует pre-install или post-install* Исправлено: давний баг с проблемами при выкате Helm-чартов с ресурсами с
helm.sh/hook-delete-policy: succeededБольше про новые аннотации: https://ru.werf.io/docs/v2/usage/deploy/resource_lifecycle.html
ru.werf.io
Жизненный цикл ресурса | Развертывание | Использование | werf
Инструмент консистентной доставки. Используем Git как единый источник истины. Собираем, деплоим в Kubernetes, синхронизируем изменения.
🔥4❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥4🤩1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Причина: при внешней процедуре обновления NS-серверов были применены некорректные DNS-параметры, что привело к временному отсутствию резолвинга.
Развитие: мы неоднократно запрашивали корректировку; после эскалации параметры были обновлены.
Воздействие: около 3 ч 40 мин недоступности.
Комментарий: домен
werf.io не находится в зоне управления команды Флант.Please open Telegram to view this post
VIEW IN TELEGRAM
🤮1
Дайджест изменений в werf v2.47.1-v2.56.2
За последние 4 месяца в werf были добавлены 4 новые команды, 7 аннотаций, 48 CLI-флагов и ряд других улучшений.
В этом сообщении на GitHub мы собрали список недавних изменений 🙌
За последние 4 месяца в werf были добавлены 4 новые команды, 7 аннотаций, 48 CLI-флагов и ряд других улучшений.
В этом сообщении на GitHub мы собрали список недавних изменений 🙌
🔥5
Дайджест по Nelm v1.12.0-v1.19 и зрелость Nelm v1
В дополнение к предыдущему анонсу по werf мы также представляем обзор последних изменений в Nelm. Поскольку проект за это время пережил значительный рефакторинг, добавление 60(!) новых фич и исправление накопившихся проблем, мы считаем Nelm v1 стабильным и «достаточно завершённым».
Поэтому приступаем к работе над Nelm v2 и Nelm-оператором. В то же время отметим продолжающуюся community-инициативу по реализации альтернативы Go-шаблонам в Nelm на базе TypeScript. По этой фиче есть формальный proposal, и все желающие поучаствовать приглашаются к обсуждению и реализации 🙌
В дополнение к предыдущему анонсу по werf мы также представляем обзор последних изменений в Nelm. Поскольку проект за это время пережил значительный рефакторинг, добавление 60(!) новых фич и исправление накопившихся проблем, мы считаем Nelm v1 стабильным и «достаточно завершённым».
Поэтому приступаем к работе над Nelm v2 и Nelm-оператором. В то же время отметим продолжающуюся community-инициативу по реализации альтернативы Go-шаблонам в Nelm на базе TypeScript. По этой фиче есть формальный proposal, и все желающие поучаствовать приглашаются к обсуждению и реализации 🙌
🔥12
Nelm, альтернатива для Helm, созданная в werf, чтобы деплой чартов в Kubernetes стал мощнее и удобнее, получил свою первую 1000 GitHub-звёзд 🎉
Тем временем, мы работаем над новыми фичами для утилиты — следите за обновлениями 😉
Тем временем, мы работаем над новыми фичами для утилиты — следите за обновлениями 😉
🎉23
Проект werf сегодня отмечает своё десятилетие! 😮🥳
По этому случаю мы написали много ретроспективных букв о том, как проект развивался все эти годы, а также собрали немного праздничных цитат от наших пользователей. Погрузиться в историю werf и порадоваться вместе с нами можно в этой статье на Хабре 🙏
По этому случаю мы написали много ретроспективных букв о том, как проект развивался все эти годы, а также собрали немного праздничных цитат от наших пользователей. Погрузиться в историю werf и порадоваться вместе с нами можно в этой статье на Хабре 🙏
Хабр
10 лет werf: путь, который мы прошли вместе
22 января 2016 года в werf был сделан первый коммит, а уже сегодня проекту исполняется 10 лет. В честь юбилея вспомним ключевые даты, события и достижения, похвастаемся отзывами пользователей и...
❤19⚡7
Расширенная локальная валидация ресурсов (werf v2.60.0, nelm v1.21.0)
Мы добавили поддержку расширенной локальной валидации стандартных и кастомных ресурсов на основе JSON Schema. Механизм основан на kubeconform.
Как это работает?
* Валидируем YAML
* Валидируем стандартные ресурсы декодером Kubernetes
* Валидируем стандартные ресурсы JSON-схемами из репозитория https://github.com/yannh/kubernetes-json-schema
* Валидируем кастомные ресурсы JSON-схемами из репозитория https://github.com/datreeio/CRDs-catalog (более 3 тысяч схем для популярных ресурсов)
Всё работает из коробки, настройки не требует. Ложные срабатывания практически исключены. Предположительно, новая валидация покрывает 95%+ встречающихся в реальности ресурсов.
Для изолированных окружений (без доступа к интернету) можно указать локальные JSON-схемы для валидации.
Как включить?
Фича доступна в экспериментальном режиме и включается переменной окружения
Фича доступа в рамках работы следующих команд:
*
*
*
*
*
*
*
*
*
*
Новые флаги для гибкой настройки:
*
*
*
*
*
*
*
P.S. Анонс фичи на GitHub.
Мы добавили поддержку расширенной локальной валидации стандартных и кастомных ресурсов на основе JSON Schema. Механизм основан на kubeconform.
Как это работает?
* Валидируем YAML
* Валидируем стандартные ресурсы декодером Kubernetes
* Валидируем стандартные ресурсы JSON-схемами из репозитория https://github.com/yannh/kubernetes-json-schema
* Валидируем кастомные ресурсы JSON-схемами из репозитория https://github.com/datreeio/CRDs-catalog (более 3 тысяч схем для популярных ресурсов)
Всё работает из коробки, настройки не требует. Ложные срабатывания практически исключены. Предположительно, новая валидация покрывает 95%+ встречающихся в реальности ресурсов.
Для изолированных окружений (без доступа к интернету) можно указать локальные JSON-схемы для валидации.
Как включить?
Фича доступна в экспериментальном режиме и включается переменной окружения
NELM_FEAT_RESOURCE_VALIDATION=true. В следующем мажорном релизе фича будет включена по умолчанию.Фича доступа в рамках работы следующих команд:
*
werf plan*
werf converge*
werf rollback*
werf lint*
werf bundle plan*
werf bundle apply*
nelm release plan install*
nelm release install*
nelm release rollback*
nelm release chart lintНовые флаги для гибкой настройки:
*
--no-resource-validation*
--local-resource-validation*
--resource-validation-kube-version*
--resource-validation-skip*
--resource-validation-schema*
--resource-validation-extra-schema*
--resource-validation-cache-lifetimeP.S. Анонс фичи на GitHub.
❤6
Управление порядком удаления ресурсов (werf v2.60.0, nelm v1.21.0)
В дополнение к аннотации
Пример:
В этом случае Deployment будет удалён только после того, как удалится ValidatingWebhookConfiguration. Пока можно дожидаться только ресурсов внутри релиза; зависимости от внешних ресурсов добавим позже.
Автоматическое определение порядка:
Для многих проблемных ресурсов мы проставляем порядок удаления автоматически. Например, если в релизе планируются к удалению ServiceAccount и использующий его Deployment, то мы сначала удалим Deployment, а потом ServiceAccount. Это работает для Namespace, ClusterRole, Role, ServiceAccount, CRD и других — аннотация не нужна.
Активация фичи:
Функция доступна только при
Подробности по фиче см. в документации:
* Развертывание / Порядок развертывания / Задание порядка удаления (только werf)
* Справочник / Аннотации для деплоя / Delete dependencies
P.S. Анонс фичи на GitHub.
В дополнение к аннотации
werf.io/deploy-dependency-<id>, задающей порядок выката ресурсов, добавлена новая аннотация werf.io/delete-dependency-<id>, задающая порядок удаления.Пример:
kind: ValidatingWebhookConfiguration
metadata:
name: my-webhook
---
kind: Deployment
metadata:
name: my-webhook-deployment
annotations:
werf.io/delete-dependency-webhook: state=absent,kind=ValidatingWebhookConfiguration,name=my-webhook
В этом случае Deployment будет удалён только после того, как удалится ValidatingWebhookConfiguration. Пока можно дожидаться только ресурсов внутри релиза; зависимости от внешних ресурсов добавим позже.
Автоматическое определение порядка:
Для многих проблемных ресурсов мы проставляем порядок удаления автоматически. Например, если в релизе планируются к удалению ServiceAccount и использующий его Deployment, то мы сначала удалим Deployment, а потом ServiceAccount. Это работает для Namespace, ClusterRole, Role, ServiceAccount, CRD и других — аннотация не нужна.
Активация фичи:
Функция доступна только при
export WERF_EXPERIMENT_NEW_DISMISS=1 в werf или export NELM_FEAT_NATIVE_RELEASE_UNINSTALL=true для Nelm. Будет включена по умолчанию в werf v3 и Nelm v2.Подробности по фиче см. в документации:
* Развертывание / Порядок развертывания / Задание порядка удаления (только werf)
* Справочник / Аннотации для деплоя / Delete dependencies
P.S. Анонс фичи на GitHub.
👍8
Деплой по заранее построенному плану (werf v2.62.0, nelm v1.22.0)
Теперь можно сохранять план выката с
Выкат в CI можно разделить на три шага:
1. Построение плана
2. Ревью и ручное или автоматическое одобрение планируемых изменений
3. Выполнение построенного плана
С
Работа с сохранённым планом
Сохранённый план представляет собой JSON-файл, сжатый с помощью gzip. Вы в любой момент можете просмотреть список запланированных этим планом изменений, используя команды:
-
-
Если при создании плана указан параметр
Новые команды и флаги:
-
-
-
-
-
P.S. Анонс фичи на GitHub.
Теперь можно сохранять план выката с
werf plan --save-plan и деплоить этот план с помощью werf converge --use-plan. Вдохновлено и работает аналогично выполнению terraform plan -out и terraform apply.Выкат в CI можно разделить на три шага:
1. Построение плана
2. Ревью и ручное или автоматическое одобрение планируемых изменений
3. Выполнение построенного плана
С
--use-plan для выката будет использован именно тот план, который был построен с werf plan. А если --use-plan не использовался, то план будет пересобран дважды — один раз при werf plan, второй раз при werf converge — и может отличаться.Работа с сохранённым планом
Сохранённый план представляет собой JSON-файл, сжатый с помощью gzip. Вы в любой момент можете просмотреть список запланированных этим планом изменений, используя команды:
-
werf plan --show-plan <путь до сохраненного плана>-
nelm release plan show <путь до сохраненного плана>Если при создании плана указан параметр
--secret-key, то сохранённый план будет шифроваться.Новые команды и флаги:
-
werf plan: --save-plan, --show-plan -
werf converge: --use plan -
nelm release plan install: --save-plan -
nelm release install: --use plan -
nelm release plan showP.S. Анонс фичи на GitHub.
🔥11
Добавлена возможность сохранить результат сборки в файл-отчёт и подложить его в любую команду, полностью исключив сборочный конвейер.
🔹Контекст
В типовом сценарии werf converge делает всё сам: собирает образы и деплоит. При разделении сборки и деплоя на отдельные шаги предлагается использовать опцию
--require-built-images — werf вычисляет теги по состоянию Git, проверяет их наличие в container registry и гарантирует, что деплоится именно то, что соответствует текущему коммиту. Это часть гитерминизма werf: *what you Git is what you get*. Это рекомендуемый флоу и для большинства пользователей этого достаточно.Если же вы хотите полностью исключить сборочный конвейер из задания — не вычислять теги, не обращаться к container registry для проверки, не зависеть от сборочного окружения — теперь это тоже возможно.
⚙️Новая опция --use-build-report
С
--use-build-report werf не запускает сборочный конвейер — теги и дайджесты образов берутся из файла как есть.
# Шаг 1: собираем образы и сохраняем build report
werf build --save-build-report
# Шаг 2: выкат, используя готовый build report — без запуска сборки
werf converge --use-build-report
По умолчанию build report читается и записывается по пути
.werf-build-report.json. Если нужен другой — укажите с помощью --build-report-path:
werf build --save-build-report --build-report-path=build-report.json
werf converge --use-build-report --build-report-path=build-report.json
> Подложить отчёт можно в любую команду, которой требуются образы.
* Отчёт по сборке
* Сценарии использования
Please open Telegram to view this post
VIEW IN TELEGRAM
ru.werf.io
Сборочный процесс | Сборка | Использование | werf
Инструмент консистентной доставки. Используем Git как единый источник истины. Собираем, деплоим в Kubernetes, синхронизируем изменения.
🔥6❤1
🚀 Расширенная информация о собранных образах (werf 2.65.0)
⚙️ Вернули
Информация об окружении и собранных образах werf теперь снова доступна в
Использование
⚙️ Собранные образы теперь можно пробросить в любой чарт
Во вновь добавленном
… и стало:
Были добавлены все возможные комбинации для передачи информации об образах в сторонние чарты. Теперь неважно, какой формат указания образа используется в стороннем чарте: формат всегда найдется в
🔒Добавлена информация о digest’ах образов
Теперь можно ссылаться на образ по его digest’у, а не только по тегу. Это критично для сценариев, где тег может быть перезаписан (например,
Больше информации — в документации.
P.S. Анонс фичи на GitHub.
⚙️ Вернули
$.Values.global.werfИнформация об окружении и собранных образах werf теперь снова доступна в
$.Values.global.werf. Использовать эти values в сабчартах проще, т. к. для их проброса не нужны export-values: любые глобальные values сразу доступны во всех чартах.Использование
$.Values.werf более не рекомендуется, но их поддержка остается — переписывать чарты не нужно.⚙️ Собранные образы теперь можно пробросить в любой чарт
Во вновь добавленном
$.Values.global.werf информация о собранных образах представлена гораздо более подробно, чем в $.Values.werf. Сравните сами, было:werf:
image:
backend: example.org/apps/myapp:a243949...816
tag:
backend: a243949...816
repo: apps/myapp
… и стало:
global:
werf:
images:
backend:
registry: example.org # адрес container registry
namespace: apps # namespace репозитория
name: myapp # короткое имя образа
tag: a243949...816 # тег
digest: sha256:ece15c4a... # дайджест образа
tag_digest: "a243949...816@sha256:ece15c4a..."
image: example.org/apps/myapp # registry + repository
repository: apps/myapp # namespace + name
ref: "example.org/apps/myapp:tag@sha256:..." # полная ссылка с дайджестом
ref_tag: "example.org/apps/myapp:tag" # полная ссылка с тегом
repository_ref: "apps/myapp:tag@sha256:..." # repository + tag + digest
repository_tag: "apps/myapp:tag" # repository + tag
name_ref: "myapp:tag@sha256:..." # name + tag + digest
name_tag: "myapp:tag" # name + tag
Были добавлены все возможные комбинации для передачи информации об образах в сторонние чарты. Теперь неважно, какой формат указания образа используется в стороннем чарте: формат всегда найдется в
$.Values.global.werf, после чего вы можете передать сборочную информацию через export-values, не форкая сам чарт. Например:# .helm/Chart.yaml:
dependencies:
- name: postgres-operator
export-values:
- parent: global.werf.images.pg.registry
child: image.registry
- parent: global.werf.images.pg.repository
child: image.repository
- parent: global.werf.images.pg.tag
child: image.tag
🔒Добавлена информация о digest’ах образов
Теперь можно ссылаться на образ по его digest’у, а не только по тегу. Это критично для сценариев, где тег может быть перезаписан (например,
latest или stable), и гарантирует, что Kubernetes будет использовать именно тот образ, который успешно прошел все тесты на этапе CI/CD. Digest и прочие форматы его включающие доступны в $.Values.global.werf.images.<name>.Больше информации — в документации.
P.S. Анонс фичи на GitHub.
❤7
🚀 TypeScript как альтернатива Helm-шаблонам (werf 2.68.0 / Nelm 1.24.0)
⚙️ О Helm-шаблонах
Helm-шаблонов часто достаточно для организации развертывания. Но при развертывании большого количества приложений параметризация и шаблонизация в чартах может выходить из под контроля. Чарты становится трудно писать, поддерживать, расширять и отлаживать, возникают проблемы с производительностью.
Принципиально улучшить Helm-шаблонизацию нельзя в силу технических причин. Но можно дать альтернативу для сложных сценариев.
⚙️ TypeScript как альтернатива
TypeScript широко используется для решения схожих задач в Pulumi, cdk8s, AWS CDK. Поэтому в дополнение к Helm-шаблонам мы добавили возможность использовать TypeScript для рендеринга манифестов.
Что даёт TypeScript для рендеринга манифестов в werf/Nelm:
- Отличная поддержка в IDE/редакторах: автоматическое дополнение, навигация по коду, статический анализ, рефакторинг, отладчик.
- Стандартный синтаксис: полноценные функции, типизация и прочее.
- Обширное сообщество: библиотеки, тулинг, обучающие материалы.
- Оригинальный TypeScript: никаких надстроек, разрабатывать чарт можно даже без werf/Nelm.
- Безопасно: TS исполняется в песочнице Deno, без доступа к сети, файловой системе, переменным окружения и т. п.
- Быстро: TS/JS-зависимости минифицируются и зашиваются в чарт при публикации, для исполнения TS нужен только бинарь Deno, который скачивается и кэшируется автоматически, TS исполняется с Deno Runtime крайне быстро.
- Работает из коробки: для развертывания чарта с TS нужен только werf/Nelm, никаких системных зависимостей.
- Поддерживается развертывание в изолированных окружениях.
🔧 Как попробовать
Включите поддержку TypeScript:
Для инициализации TypeScript в существующем чарте выполните:
… или:
Сгенерированный этими командами Deployment — см. по ссылке на GitHub внизу.
Для развертывания просто запустите:
… или:
Больше информации:
- Документация
- Анонс фичи на GitHub
⚙️ О Helm-шаблонах
Helm-шаблонов часто достаточно для организации развертывания. Но при развертывании большого количества приложений параметризация и шаблонизация в чартах может выходить из под контроля. Чарты становится трудно писать, поддерживать, расширять и отлаживать, возникают проблемы с производительностью.
Принципиально улучшить Helm-шаблонизацию нельзя в силу технических причин. Но можно дать альтернативу для сложных сценариев.
⚙️ TypeScript как альтернатива
TypeScript широко используется для решения схожих задач в Pulumi, cdk8s, AWS CDK. Поэтому в дополнение к Helm-шаблонам мы добавили возможность использовать TypeScript для рендеринга манифестов.
Что даёт TypeScript для рендеринга манифестов в werf/Nelm:
- Отличная поддержка в IDE/редакторах: автоматическое дополнение, навигация по коду, статический анализ, рефакторинг, отладчик.
- Стандартный синтаксис: полноценные функции, типизация и прочее.
- Обширное сообщество: библиотеки, тулинг, обучающие материалы.
- Оригинальный TypeScript: никаких надстроек, разрабатывать чарт можно даже без werf/Nelm.
- Безопасно: TS исполняется в песочнице Deno, без доступа к сети, файловой системе, переменным окружения и т. п.
- Быстро: TS/JS-зависимости минифицируются и зашиваются в чарт при публикации, для исполнения TS нужен только бинарь Deno, который скачивается и кэшируется автоматически, TS исполняется с Deno Runtime крайне быстро.
- Работает из коробки: для развертывания чарта с TS нужен только werf/Nelm, никаких системных зависимостей.
- Поддерживается развертывание в изолированных окружениях.
🔧 Как попробовать
Включите поддержку TypeScript:
export NELM_FEAT_TYPESCRIPT=true
Для инициализации TypeScript в существующем чарте выполните:
werf chart ts init
… или:
nelm chart ts init ./mychart
Сгенерированный этими командами Deployment — см. по ссылке на GitHub внизу.
Для развертывания просто запустите:
werf converge
… или:
nelm release install -n myns -r myrelease ./mychart
Больше информации:
- Документация
- Анонс фичи на GitHub
🔥6🤯2