В этом разделе описано, как организовать доставку приложений с помощью Argo CD в Deckhouse Kubernetes Platform (DKP).

Argo CD позволяет описывать приложения декларативно и синхронизировать их состояние с содержимым Git-репозитория. Пользователь задаёт источник манифестов, целевой кластер, неймспейс и параметры синхронизации, после чего Argo CD развёртывает приложение и поддерживает его в целевом состоянии.

В DKP экземпляры Argo CD разворачиваются с помощью модуля operator-argo. Работа с Argo CD обычно включает:

  • создание или использование существующего объекта AppProject;
  • подготовку целевого неймспейса для приложения;
  • создание объекта Application, описывающего источник приложения и правила синхронизации;
  • создание приложения через веб-интерфейс Argo CD;
  • создание приложения с помощью CLI-утилиты argocd.

Предварительные условия

Перед началом работы должны быть выполнены следующие условия:

  • администратор кластера включил модуль operator-argo;
  • администратор развернул хотя бы один экземпляр Argo CD;
  • у пользователя есть доступ к нужному экземпляру Argo CD и целевым неймспейсам.

Если экземпляр Argo CD ещё не развёрнут, обратитесь к администратору или воспользуйтесь инструкцией из раздела «Запуск Argo CD».

Проекты AppProject

AppProject — это кастомный ресурс Argo CD, который задаёт логические границы проекта. С его помощью можно определить:

  • какие Git-репозитории разрешено использовать как источник приложений;
  • в какие кластеры и неймспейсы разрешено развёртывать приложения;
  • какие кластерные и namespaced-ресурсы разрешено использовать;
  • какие роли и политики доступа действуют внутри проекта.

Каждый объект Application должен ссылаться на проект через параметр spec.project.

По умолчанию в Argo CD существует проект default. Его можно использовать для первых экспериментов и простых сценариев. Для production-окружений рекомендуется создать отдельные объекты AppProject, чтобы ограничить доступ к репозиториям, кластерам и неймспейсам.

Манифест объекта AppProject default приведён ниже:

apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: default
  namespace: argocd
spec:
  clusterResourceWhitelist:
  - group: '*'
    kind: '*'
  destinations:
  - namespace: '*'
    server: '*'
  sourceRepos:
  - '*'

Подготовка неймспейса

Перед развёртыванием приложения создайте целевой неймспейс и добавьте лейбл argocd.argoproj.io/managed-by, указывающий, какой экземпляр Argo CD управляет ресурсами в этом неймспейсе.

Пример:

apiVersion: v1
kind: Namespace
metadata:
  name: demo
  labels:
    argocd.argoproj.io/managed-by: argocd

В этом примере неймспейс demo будет управляться экземпляром Argo CD, развёрнутым в неймспейсе argocd.

Развёртывание приложения

Приложение в Argo CD можно создать несколькими способами:

  • декларативно — с помощью объекта Application;
  • интерактивно — через веб-интерфейс Argo CD;
  • с помощью CLI-утилиты argocd.

Создание приложения с помощью объекта Application

Для описания приложения используется объект Application. В нём указываются:

Пример объекта Application:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: demo
  namespace: argocd
spec:
  destination:
    namespace: demo
    server: https://kubernetes.default.svc
  project: default
  source:
    path: helm-guestbook
    repoURL: https://github.com/argoproj/argocd-example-apps
    targetRevision: HEAD
  syncPolicy:
    # Включить автоматическую синхронизацию.
    automated:
      # Удалять устаревшие ресурсы.
      prune: true
      # Включить самовосстановление в случае сторонних изменений.
      selfHeal: true

После создания объекта Application Argo CD начнёт отслеживать состояние приложения и синхронизировать его с содержимым репозитория. В результате в неймспейсе demo должны появиться ресурсы, относящиеся к приложению demo:

d8 k -n demo get deployment,svc,pod
NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/demo-helm-guestbook   1/1     1            1           15s

NAME                          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/demo-helm-guestbook   ClusterIP   10.222.177.84   <none>        80/TCP    15s

NAME                                       READY   STATUS    RESTARTS   AGE
pod/demo-helm-guestbook-66d5d69ccd-xfkb7   1/1     Running   0          15s

Создание приложения через веб-интерфейс Argo CD

Приложение можно создать через веб-интерфейс Argo CD. Для этого:

  1. Откройте веб-интерфейс нужного экземпляра Argo CD.
  2. Перейдите в раздел «Applications».
  3. Нажмите «New App».
  4. Укажите имя приложения, проект, репозиторий, ревизию, путь к манифестам или чарту, а также целевой кластер и неймспейс.
  5. При необходимости настройте автоматическую синхронизацию и дополнительные параметры.
  6. Нажмите «Create».

Поля формы в веб-интерфейсе соответствуют основным параметрам объекта Application: проекту, источнику приложения, целевому кластеру, неймспейсу и политике синхронизации.

Создание приложения с помощью CLI-утилиты argocd

CLI-утилита argocd позволяет создавать и сопровождать приложения из командной строки. Бинарный файл argocd можно загрузить из раздела «Documentation» веб-интерфейса Argo CD.

Перед созданием приложения аутентифицируйтесь с помощью команды:

argocd login <ARGOCD_DOMAIN>:443

При использовании аутентификации через SSO добавьте к команде логина флаг --sso.

Пример создания приложения:

argocd app create guestbook \
  --repo https://github.com/argoproj/argocd-example-apps.git \
  --path guestbook \
  --dest-namespace demo \
  --dest-server https://kubernetes.default.svc \
  --directory-recurse \
  --sync-policy automated \
  --self-heal \
  --auto-prune

Как и при создании объекта Application, в команде указываются источник приложения, целевой кластер, неймспейс и политика синхронизации.

Чтобы просмотреть статус развёрнутого приложения, используйте команду argocd app get <APP_NAME>, например:

argocd app get guestbook
Name:               argocd/guestbook
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          demo
URL:                https://argocd.192.168.0.235.sslip.io/applications/guestbook
Source:
- Repo:             https://github.com/argoproj/argocd-example-apps.git
  Target:
  Path:             guestbook
SyncWindow:         Sync Allowed
Sync Policy:        Automated (Prune)
Sync Status:        Synced to  (8088f4c)
Health Status:      Healthy

GROUP  KIND        NAMESPACE  NAME          STATUS  HEALTH   HOOK  MESSAGE
apps   Deployment  demo       guestbook-ui  Synced  Healthy        deployment.apps/guestbook-ui unchanged
       Service     demo       guestbook-ui  Synced  Healthy

Дополнительные ресурсы