В составе Kubernetes-платформы Deckhouse появился новый модуль delivery, в основе которого — утилита с открытым исходным кодом Argo CD. Модуль автоматизирует процессы непрерывной доставки, развертывания и обновления пользовательских приложений в кластере. Также, благодаря доработке «ванильной» версии Argo CD, delivery повышает удобство доставки ПО в закрытые контуры при помощи werf.
Argo CD «из коробки»
Argo CD — GitOps-утилита для непрерывной доставки (continuous delivery) приложений в Kubernetes; проект CNCF в статусе graduated. Argo CD позволяет настраивать доставку декларативно и использует Git как единый «источник правды». Утилита следит за изменениями в Git-репозитории: как только появляется новая конфигурация приложения, Argo CD приводит приложение к описанному в конфигурации состоянию. Помимо Git, Argo CD также умеет использовать другие источники, например репозиторий для Helm-чартов.
Argo CD входит в состав платформы Deckhouse «из коробки». До появления модуля delivery пользователям платформы, которые работали с Argo CD, приходилось самостоятельно устанавливать и обновлять утилиту. Теперь всё это делает Deckhouse. Тем самым экономятся время и трудозатраты инженеров, которые поддерживают Kubernetes-кластеры.
Для управления Argo CD в связке с Deckhouse, помимо CLI, можно использовать веб-интерфейс утилиты:
В UI можно наблюдать за развернутыми приложениями, их ресурсами, состоянием, различными событиями, а также получать логи.
CI/CD для закрытых контуров
Argo CD Image Updater — компонент, который позволяет автоматически обновлять приложение при выходе новой версии. Разработчики «Фланта» доработали компонент так, чтобы добавить поддержку OCI-репозиториев. Благодаря этой доработке Argo CD Image Updater следит не только за обновлением образов приложений, но и за обновлением всего Helm-чарта (конфигурации), выложенного в container registry. То есть Argo CD Image Updater обновляет не только образы, но и манифесты.
Helm-чарты и образы можно выкладывать в container registry как отдельные артефакты. Однако чтобы упростить процесс, можно объединить чарт и образ в один артефакт — бандл, реализованный с помощью werf. В этом случае не нужно думать о том, что конфигурация и приложения обновляются разными циклами. Также упрощается проверка артефактов на уязвимости и другие угрозы. werf-бандл особенно полезен для закрытых окружений с повышенными требованиями к безопасности процесса доставки ПО.
Container registry можно использовать и для первичного деплоя приложения, и для автообновлений по pull-модели. Argo CD Image Updater сканирует OCI-репозиторий с заданным интервалом. Как только в container registry появляется новая версия ПО в виде бандла, Argo CD скачивает его и обновляет приложение в кластере.
Для деплоя ПО из OCI-репозитория нужно создать три объекта:
Secret для доступа к registry в формате dockerconfigjson.
Application с конфигурацией приложения.
WerfSource, в котором содержится информация о container registry и ссылка на Secret для доступа.
Пример объектов:
---
apiVersion: deckhouse.io/v1alpha1
kind: WerfSource
metadata:
name: example
spec:
imageRepo: cr.example.io/myproject # репозиторий бандлов и образов
pullSecretName: example-registry # Secret с доступом
---
apiVersion: v1
kind: Secret
metadata:
namespace: d8-delivery # namespace модуля
name: example-registry
type: kubernetes.io/dockerconfigjson # поддерживается только этот тип Secret'ов
data:
.dockerconfigjson: ...
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
annotations:
argocd-image-updater.argoproj.io/chart-version: ~ 0.0
name: myapp
namespace: d8-delivery # namespace модуля
spec:
destination:
namespace: myapp
server: https://kubernetes.default.svc
project: default
source:
chart: mychart # бандл -- cr.example.com/myproject/mychart
helm: {}
repoURL: cr.example.com/myproject # репозиторий Argo CD из WerfBundle
targetRevision: 1.0.0
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
При этом WerfSource — необязательный объект: OCI-репозиторий можно добавить стандартными для Argo CD способами, а также настроить registry в Image Updater самостоятельно, через ConfigMap. Такой вариант подойдет тем, кто хотел бы использовать привычный подход в работе с Argo CD.
Публиковать новые версии ПО в container registry можно вручную или с помощью любого CI/CD-решения, включая werf (подробнее о возможностях, которые дает интеграция werf и Argo CD, — в нашей статье).
Планы по развитию модуля
В будущем в Deckhouse появятся:
Интеграции с популярными CI-системами для сборки и развертывания приложений.
Средство для хранения кода.
Возможность работы с динамическими секретами.
Подробная документация по деплою приложений в Deckhouse.
Из функций Argo CD в модуль планируется добавить поддержку Argo Rollouts, метрик и дашбордов.
P.S.
Модуль доступен только в Enterprise-версии Deckhouse.
Для знакомства с платформой рекомендуем раздел «Быстрый старт». Полезные ссылки на ресурсы проекта:
Telegram-канал с анонсами и новостями проекта;
официальный Twitter-аккаунт на английском.
Читайте также в нашем блоге: