Руководство по развертыванию приложений с помощью GitOps с помощью Argo CD

В этом руководстве описывается использование GitOps с Argo CD в кластерах Kubernetes с поддержкой Azure Arc или кластерах Службы Azure Kubernetes (AKS). GitOps с Argo CD включен как расширение кластера , которое позволяет использовать репозиторий Git в качестве источника истины для конфигурации кластера и развертывания приложений. Argo CD также поддерживает другие распространенные источники файлов, такие как Helm и Open Container Initiative (OCI).

Замечание

Начиная с версии 1.0.0-preview расширение Argo CD использует диаграмму Helm сообщества. Это критическое изменение по мере изменения ключей конфигурации. Если вы установили предыдущую версию (0.0.x) расширения, удалите расширение и переустановите последнюю версию с обновленными ключами конфигурации.

Это важно

GitOps с Argo CD в настоящее время находится в предварительной версии. Смотрите Дополнительные условия использования для предварительных версий Microsoft Azure, которые содержат юридические положения, применимые к функциям Azure, находящимся в бета-версии, предварительной версии или еще не представленным для всеобщего пользования.

Предпосылки

Для развертывания приложений с помощью GitOps требуется кластер Kubernetes с поддержкой Azure Arc или кластер AKS.

Кластеры Kubernetes с поддержкой Azure Arc

Кластеры Службы Azure Kubernetes

  • Кластер AKS на основе MSI, который введён в эксплуатацию.

    Это важно

    Кластер AKS должен быть создан с использованием управляемого удостоверения службы (MSI), а не служебного принципала (SPN), чтобы это расширение могло работать. Для новых кластеров AKS, созданных с помощью az aks create, кластер по умолчанию основан на MSI. Чтобы преобразовать SPN-кластеры в MSI, выполните команду az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity. Дополнительные сведения см. в разделе Об использовании управляемого удостоверения в AKS.

  • Разрешения на чтение и запись для типа ресурса Microsoft.ContainerService/managedClusters.

Общие для обоих типов кластеров

  • Разрешения на чтение и запись для этих типов ресурсов:

    • Microsoft.KubernetesConfiguration/extensions
  • Azure CLI 2.15 или более поздней версии. Установите Azure CLI или используйте следующие команды для обновления до последней версии:

    az version
    az upgrade
    
  • Клиент командной строки Kubernetes, kubectl. kubectl уже установлен, если вы используете Azure Cloud Shell.

    Установите kubectl локально с помощью az aks install-cli команды:

    az aks install-cli
    
  • Регистрация следующих поставщиков ресурсов Azure:

    az provider register --namespace Microsoft.Kubernetes
    az provider register --namespace Microsoft.ContainerService
    az provider register --namespace Microsoft.KubernetesConfiguration
    

    Регистрация — это асинхронный процесс, который должен завершиться в течение 10 минут. Чтобы отслеживать процесс регистрации, используйте следующую команду:

    az provider show -n Microsoft.KubernetesConfiguration -o table
    
    Namespace                          RegistrationPolicy    RegistrationState
    ---------------------------------  --------------------  -------------------
    Microsoft.KubernetesConfiguration  RegistrationRequired  Registered
    

Подсказка

Хотя источник в этом руководстве является репозиторием Git, Argo CD поддерживает другие распространенные источники файлов, такие как Helm и Open Container Initiative (OCI).

Поддержка версий и регионов

В настоящее время GitOps поддерживается в общедоступных регионах.

Требования к сети

Для работы агентов GitOps требуется исходящее TCP-подключение (исходящий трафик) к источнику репозитория через порт 22 (SSH) или 443 (HTTPS). Агенты также требуют доступа к следующим исходящим URL-адресам:

Конечная точка (DNS) Описание
https://management.azure.com Требуется для взаимодействия агента со службой конфигурации Kubernetes.
https://<region>.dp.kubernetesconfiguration.azure.com Конечная точка плоскости данных, через которую агент будет отправлять сведения о состоянии и извлекать сведения о конфигурации. Зависит от <region> (поддерживаемых регионов, упомянутых ранее).
https://login.microsoftonline.com Требуется для получения и обновления токенов Azure Resource Manager.
https://mcr.microsoft.com Требуется для загрузки образов контейнеров для контроллеров.

Включение расширений CLI

Установите последние пакеты расширений k8s-configuration и k8s-extension для CLI.

az extension add -n k8s-configuration
az extension add -n k8s-extension

Чтобы обновить эти пакеты до последних версий:

az extension update -n k8s-configuration
az extension update -n k8s-extension

Чтобы просмотреть список всех установленных расширений Azure CLI и их версий, выполните следующую команду:

az extension list -o table

Experimental   ExtensionType   Name                   Path                                                       Preview   Version
-------------  --------------  -----------------      -----------------------------------------------------      --------  --------
False          whl             connectedk8s           C:\Users\somename\.azure\cliextensions\connectedk8s         False     1.10.7
False          whl             k8s-configuration      C:\Users\somename\.azure\cliextensions\k8s-configuration    False     2.2.0
False          whl             k8s-extension          C:\Users\somename\.azure\cliextensions\k8s-extension        False     1.6.4

Создание расширения GitOps (Argo CD) (простая установка)

Установка GitOps Argo CD поддерживает многотенантность в режиме высокой доступности и поддерживает идентификацию рабочих нагрузок.

Это важно

Режим HA является конфигурацией по умолчанию и требует наличия четырех узлов в кластере для установки. Команда ниже добавляет --config "redis-ha.enabled=false" для установки расширения на одном узле.

Эта команда создает простую конфигурацию, устанавливая компоненты Argo CD в новое argocd пространство имен с доступом на уровне кластера. Доступ на уровне кластера позволяет обнаруживать определения приложений Argo CD в любом пространстве имен, указанном в конфигурации configmap Argo CD в кластере. Например: namespace1,namespace2

az k8s-extension create --resource-group <resource-group> \
  --cluster-name <cluster-name> \
  --cluster-type managedClusters \
  --name argocd \
  --extension-type Microsoft.ArgoCD \
  --config "redis-ha.enabled=false" \
  --config "configs.params.application\.namespaces=namespace1,namespace2"

Эта команда установки создает новое пространство имен <namespace> и устанавливает компоненты Argo CD в <namespace>. Определения приложений Argo CD в этой конфигурации работают только в <namespace> пространстве имен.

Замечание

Дополнительные параметры конфигурации, такие как ограничения ресурсов, см. в разделе values.yaml. Используйте эти конфигурации в команде Azure CLI при настройке расширения.

Создание расширения GitOps (Argo CD) с идентификацией рабочей нагрузки

Альтернативный метод установки, рекомендуемый для использования в рабочей среде, — идентификация рабочей нагрузки. Этот метод использует идентификаторы Microsoft Entra ID для аутентификации при доступе к ресурсам Azure, поэтому вам не нужно управлять секретами и учетными данными в репозитории Git. В этой установке используется аутентификация с использованием идентификатора рабочей нагрузки, доступная в OSS-версии Argo CD 3.0.0-rc2 и более поздних версиях.

Это важно

Режим HA является конфигурацией по умолчанию и требует наличия четырех узлов в кластере для установки. Используется 'redis-ha.enabled': false для установки расширения на одном узле.

Чтобы создать расширение с идентификацией рабочей нагрузки, сначала замените следующие переменные вашими значениями в этом шаблоне Bicep.

var clusterName = '<aks-or-arc-cluster-name>'

var workloadIdentityClientId = 'replace-me##-##-###-###'
var ssoApplicationClientId = 'replace-me##-##-###-###'

var url = 'https://<public-ip-for-argocd-ui>/'
var oidcConfig = '''
name: Azure
issuer: https://login.microsoftonline.com/<your-tenant-id>/v2.0
clientID: <same-value-as-ssoApplicationClientId>
azure:
  useWorkloadIdentity: true
requestedIDTokenClaims:
  groups:
    essential: true
requestedScopes:
  - openid
  - profile
  - email
'''

var defaultPolicy = 'role:readonly'
var policy = '''
p, role:org-admin, applications, *, */*, allow
p, role:org-admin, clusters, get, *, allow
p, role:org-admin, repositories, get, *, allow
p, role:org-admin, repositories, create, *, allow
p, role:org-admin, repositories, update, *, allow
p, role:org-admin, repositories, delete, *, allow
g, replace-me##-argocd-ui-entra-group-admin-id, role:org-admin
'''

resource cluster 'Microsoft.ContainerService/managedClusters@2024-10-01' existing = {
  name: clusterName
}

resource extension 'Microsoft.KubernetesConfiguration/extensions@2023-05-01' = {
  name: 'argocd'
  scope: cluster
  properties: {
    extensionType: 'Microsoft.ArgoCD'
    configurationSettings: {
      'redis-ha.enabled': 'true'
      'azure.workloadIdentity.enabled': 'true'
      'azure.workloadIdentity.clientId': workloadIdentityClientId
      'azure.workloadIdentity.entraSSOClientId': ssoApplicationClientId
      'configs.cm.oidc\\.config': oidcConfig
      'configs.cm.url': url
      'configs.rbac.policy\\.default': defaultPolicy
      'configs.rbac.policy\\.csv': policy
      'configs.params.application\\.namespaces': 'default, argocd'
   }
  }
}

Создайте шаблон Bicep с помощью следующей команды:

az deployment group create --resource-group <resource-group> --template-file <bicep-file>

Замечание

Дополнительные параметры конфигурации, такие как ограничения ресурсов, см. в разделе values.yaml. Используйте эти конфигурации в шаблоне Bicep при настройке расширения.

Параметры

clusterName — это имя кластера Kubernetes с поддержкой AKS или Arc.

workloadIdentityClientId — это идентификатор клиента управляемого удостоверения, назначаемого пользователем, используемого компонентами Argo CD для удостоверения рабочей нагрузки.

ssoApplicationClientId — это идентификатор приложения (клиента) для регистрации приложения Microsoft Entra, используемого для аутентификации единого входа OIDC в пользовательском интерфейсе Argo CD. Дополнительные сведения об общей настройке и конфигурации ssoApplicationClientIdсм. в разделе Аутентификация регистрации приложений Microsoft Entra ID с помощью OIDC.

url — это общедоступный IP-адрес пользовательского интерфейса Argo CD. В кластере нет общедоступного IP-адреса или доменного имени, если только у кластера уже есть предоставленный клиентом ингресс контроллер. Если это так, вам нужно добавить правило Ingress в веб-интерфейсе Argo CD после развертывания. Для возможности входящего трафика требуется надстройка маршрутизации приложений и поддерживается только для кластеров AKS.

oidcConfig — замените <your-tenant-id> идентификатором клиента идентификатора Microsoft Entra. Замените <same-value-as-ssoApplicationClientId-above> значением того же значения, что ssoApplicationClientId.

policy переменная — это argocd-rbac-cm configmap параметры Argo CD. g, replace-me##-argocd-ui-entra-group-admin-id — это идентификатор группы Microsoft Entra, предоставляющий администратору доступ к пользовательскому интерфейсу Argo CD. Идентификатор группы Microsoft Entra можно найти на портале Azure в разделе Microsoft Entra ID > Группы >имя_вашей_группы> Свойства. Вместо идентификатора группы Microsoft Entra можно использовать идентификатор пользователя Microsoft Entra. Идентификатор пользователя Microsoft Entra можно найти на портале Azure в разделе Microsoft Entra ID > Users >your-user-name> Properties.

Создание учетных данных идентификации рабочих нагрузок

Чтобы настроить новые учетные данные идентификации рабочей нагрузки, выполните следующие действия.

  1. Получите URL-адрес издателя OIDC для кластера AKS или кластера Kubernetes с поддержкой Arc.

  2. Создайте управляемое удостоверение и запишите его идентификатор клиента и идентификатор арендатора.

  3. Создайте учетные данные федеративной идентичности для кластера AKS или кластера Kubernetes с поддержкой Arc. Рассмотрим пример.

    # For source-controller
    az identity federated-credential create \
      --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} \
      --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" \
      --resource-group "${RESOURCE_GROUP}" \
      --issuer "${OIDC_ISSUER}" \
      --subject
    
  4. Не забудьте предоставить надлежащие разрешения для идентичности рабочей нагрузки для ресурса, который требуется для извлечения с помощью argocd или контроллера image-reflector, или argocd-repo-server. Например, если вы используете Реестр контейнеров Azure, убедитесь, что применяется либо Container Registry Repository Reader (для реестров с поддержкой ABAC), либо AcrPull (для реестров без поддержки ABAC).

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

Чтобы использовать частный реестр ACR или репозитории ACR, следуйте инструкциям в официальной документации по Argo CD для подключения к частным реестрам ACR. Назначение меток pod, Создание федеративных учетных данных и Добавление аннотации к учетной записи службы были завершены расширением с развертыванием Bicep и могут быть пропущены.

Миграция с Argo CD OSS в управляемое расширение Argo CD

Выполните следующие действия, чтобы перейти от самостоятельной установки Argo CD в расширение Argo CD, управляемого Azure.

Путь миграции

Используйте следующую последовательность, чтобы избежать конфликтов контроллера и снизить риск миграции.

  1. Просмотрите текущую конфигурацию и список ресурсов Argo CD:

    • Приложения
    • Наборы приложений
    • AppProjects
    • Учетные данные и шаблоны репозитория (repocreds)
    • Секреты кластера
  2. Масштабируйте самостоятельно управляемые контроллеры Argo CD до нуля реплик, чтобы предотвратить одновременную работу двух контроллеров.

  3. Установите расширение Argo CD в кластере с помощью параметров, соответствующих существующему развертыванию.

  4. Функция Приложения в любом пространстве имён позволяет Argo CD управлять ресурсами, расположенными за пределами его основного пространства имён. Если кластер уже использует этот параметр, вам не нужно перемещать ресурсы в новое пространство имен. Вам нужно лишь настроить новое расширение для отслеживания пространств имён существующего приложения.

    Случай A: Если вы уже используете функцию «Приложения в любом пространстве имен»:

    1. Оставьте все ресурсы Application, ApplicationSet и AppProject в их текущих пространствах имен.
    2. Настройте новое управляемое расширение для отслеживания этих внешних пространств имен с помощью параметров расширения.

    Случай Б. При перемещении ресурсов в новое пространство имен расширения:

    • При необходимости перенесите приложения, applicationSets и AppProjects в пространство имен расширения.
  5. Перенесите учетные данные репозитория, секреты кластера и repocreds в пространство имен расширения.

  6. Убедитесь, что приложения синхронизируются и достигают ожидаемого работоспособного состояния.

  7. Удалите старое самостоятельно управляемое развертывание Argo CD после завершения проверки.

Управляемое расширение использует те же API Argo CD и пользовательские определения ресурсов (CRD), чтобы можно было повторно использовать большинство существующих манифестов с минимальными изменениями.

Текущие ограничения

  • Прямые обновления для Argo CD ConfigMaps не поддерживаются.
  • Используйте API конфигурации расширения и настройки, чтобы применить изменения конфигурации Argo CD.

Настройка мониторинга с помощью Azure Managed Prometheus и Управление Azure для Grafana

Вы можете опубликовать метрики Argo CD для Azure Managed Prometheus и визуализировать их в Управление Azure для Grafana.

  1. Включите Azure Managed Prometheus для кластера. См. раздел "Включить мониторинг" для кластеров Azure Kubernetes Service (AKS).

  2. Обновите конфигурацию расширения, чтобы включить сбор метрик и ServiceMonitor.

    var clusterName = '<aks-or-arc-cluster-name>'
    
    resource cluster 'Microsoft.ContainerService/managedClusters@2024-10-01' existing = {
      name: clusterName
    }
    
    resource extension 'Microsoft.KubernetesConfiguration/extensions@2023-05-01' = {
      name: 'argocd'
      scope: cluster
      properties: {
        extensionType: 'Microsoft.ArgoCD'
        configurationSettings: {
          // Keep your existing settings and add these metrics flags.
          'controller.metrics.enabled': 'true'
          'controller.metrics.serviceMonitor.enabled': 'true'
          'server.metrics.enabled': 'true'
          'server.metrics.serviceMonitor.enabled': 'true'
          'repoServer.metrics.enabled': 'true'
          'repoServer.metrics.serviceMonitor.enabled': 'true'
          'applicationSet.metrics.enabled': 'true'
          'applicationSet.metrics.serviceMonitor.enabled': 'true'
          'apiVersionOverrides.monitoring': 'azmonitoring.coreos.com/v1'
        }
      }
    }
    
  3. Импортируйте панель мониторинга Grafana 14584 в экземпляр Управление Azure для Grafana.

  4. Если панели отображают Нет данных, обновите запросы панелей с учётом именования заданий в Azure Managed Prometheus.

  5. В панелях телеметрии контроллера (использование памяти, загрузка ЦП, горутины) измените:

    • От job="argocd-metrics"
    • К job=~"argocd.*-metrics"
  6. На панелях repo-server (Используемая память, Goroutines) измените:

    • От job="argocd-repo-server"
    • Кому job="argocd-repo-server-metrics"
  7. Сохраните панель мониторинга и проверьте прием метрик.

Включение Argo CD на портале Azure

Вы можете включить argo CD на портале Azure для просмотра состояния приложения и состояния синхронизации, а также для доступа к пользовательскому интерфейсу Argo CD. Чтобы включить Argo CD на портале Azure, выполните следующие действия.

  1. Перейдите в кластер на портале Azure.

  2. В меню службы в разделе "Параметры" выберите GitOps.

  3. Выберите "Включить Argo CD (предварительная версия)".

  4. В разделе "Основные сведения" :

    1. Задайте пространство имен, в котором запускается Argo CD. По умолчанию пространство имен — это argocd.
    2. При необходимости включите высокий уровень доступности Redis (HA). Для этого параметра требуется не менее 4 узлов в кластере.
    3. При необходимости можно добавить дополнительные пространства имён, которые следует отслеживать.
    4. Только для кластеров AKS включите единый вход (SSO), чтобы пользователи могли войти с помощью Microsoft Entra ID, указав приложение и одну или несколько групп, чтобы разрешить доступ к пользовательскому интерфейсу Argo CD.
    5. При необходимости включите идентификацию рабочей нагрузки, чтобы Argo CD мог безопасно получать доступ к службам Azure без хранения секретов. Для этого установите флажок Enable Workload Identity и укажите управляемый идентификатор и реестр Реестр контейнеров Azure, из которого нужно получать манифесты приложений или артефакты контейнеров.

    Снимок экрана: вкладка

  5. Выберите Далее для продолжения.

  6. Для кластеров AKS, которые включили надстройку маршрутизации приложений, вкладка "Входящий трафик" позволяет создать ресурс входящего трафика для маршрутизации трафика в службу. При необходимости выберите Enable Ingress и введите имя Ingress, сведения о сертификате и доменное имя. Выберите Далее для продолжения.

  7. В разделе "Проверка и развертывание " просмотрите параметры, а затем выберите "Развернуть ", чтобы включить argo CD в кластере.

Доступ к пользовательскому интерфейсу Argo CD

Если для кластера AKS нет существующего контроллера входящего трафика, пользовательский интерфейс Argo CD можно предоставить непосредственно с помощью службы LoadBalancer. Следующая команда предоставляет пользовательский интерфейс Argo CD через порт 80 и 443.

kubectl -n argocd expose service argocd-server --type LoadBalancer --name argocd-server-lb --port 80 --target-port 8080

Чтобы получить доступ к пользовательскому интерфейсу Argo CD на портале Azure, перейдите в кластер. В меню службы в разделе "Параметры" выберите GitOps. Затем выберите ссылку, показанную для пользовательского интерфейса Argo CD.

Снимок экрана: ссылка для доступа к пользовательскому интерфейсу Argo CD на портале Azure.

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

После установки расширения Argo CD можно развернуть приложение с помощью пользовательского интерфейса Argo CD или CLI. В следующем примере используется kubectl apply для развертывания хранилища AKS внутри приложения Argo CD в проекте Argo CD по умолчанию в argocd пространстве имен.

kubectl apply -f - <<EOF
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: aks-store-demo
  namespace: argocd
spec:
  project: default
  source:
      repoURL: https://github.com/Azure-Samples/aks-store-demo.git
      targetRevision: HEAD
      path: kustomize/overlays/dev
  syncPolicy:
      automated: {}
  destination:
      namespace: argocd
      server: https://kubernetes.default.svc
EOF

Демонстрационное приложение магазина AKS устанавливается в пространство имен argocd. Чтобы просмотреть веб-страницу приложения, следуйте этим инструкциям. Обязательно перейдите по IP-адресу, используя http, а не https.

Обновление конфигурации расширения

Конфигурации Argo CD можно обновить после установки и других параметров конфигурации расширения с помощью следующей команды:

az k8s-extension update --resource-group <resource-group> \
  --cluster-name <cluster-name> \
  --cluster-type <cluster-type> \
  --name argocd \
  --config "configs.cm.url='https://<public-ip-for-argocd-ui>/auth/callback'"

Обновите конфигурацию Argo CD через расширение, чтобы параметры не были перезаписаны. Применение шаблона Bicep — это альтернативный метод использования Azure CLI для обновления конфигурации.

Удаление расширения

Чтобы удалить расширение, используйте следующие команды.

az k8s-extension delete -g <resource-group> -c <cluster-name> -n argocd -t managedClusters --yes

Дальнейшие шаги