В составе 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, можно использовать веб-интерфейс утилиты:

Веб-интерфейс Argo CD
Веб-интерфейс Argo CD

В 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.

Для знакомства с платформой рекомендуем раздел «Быстрый старт». Полезные ссылки на ресурсы проекта:

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

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


  1. pepemon
    00.00.0000 00:00
    +1

    Очень круто! Подскажите, вашу версию argocd-image-updater с изменениями из chart-updater PR можно откуда-нибудь утащить сразу в виде готового артефакта? :)


    1. WellsBart Автор
      00.00.0000 00:00
      +1

      Спасибо!
      Да, есть образ (собранный из форка).