Поделиться через


Развёртывание приложений с помощью GitOps (Flux v2) для AKS и Kubernetes с поддержкой Azure Arc

Azure предоставляет возможность автоматического развертывания приложений с помощью GitOps, которая работает с кластерами Kubernetes в Службе Azure Kubernetes (AKS) и кластерами Kubernetes с поддержкой Azure Arc. Основные преимущества, предоставляемые путем внедрения GitOps для развертывания приложений в кластерах Kubernetes, включают:

  • Постоянная видимость состояния приложений, работающих в кластерах.
  • Разделение проблем между командами разработки приложений и группами инфраструктуры. Командам приложений не нужно иметь опыт работы с развертываниями Kubernetes. Команды разработчиков платформы обычно создают модель самообслуживания для команд приложений, позволяя им запускать развертывания с более высокой уверенностью.
  • Возможность воссоздания кластеров с тем же требуемым состоянием в случае сбоя или для масштабирования.
  • Возможность развертывания приложений в масштабе с помощью политики Azure.

При использовании GitOps вы объявляете требуемое состояние кластеров Kubernetes в файлах в репозиториях Git. Репозитории Git могут содержать следующие файлы:

Так как эти файлы хранятся в репозитории Git, они имеют версию, и изменения между версиями легко отслеживаются. Контроллеры Kubernetes выполняются в кластерах и постоянно согласовывают состояние кластера с требуемым состоянием, объявленным в репозитории Git. Эти операторы извлекает файлы из репозиториев Git и применяет требуемое состояние к кластерам. Операторы также постоянно гарантируют, что кластер остается в требуемом состоянии.

GitOps в Kubernetes с поддержкой Azure Arc или Службе Azure Kubernetes использует Flux, популярный набор средств с открытым кодом. Flux поддерживает распространенные источники файлов (репозитории Git и Helm, контейнеры, хранилище BLOB-объектов Azure) и типы шаблонов (YAML, Helm и Kustomize). Flux также поддерживает многотенантность и управление зависимостями развертывания, помимо других функций.

Flux развертывается непосредственно в кластере, и контрольная плоскость каждого кластера логически отделена. Это делает его масштаб хорошо масштабируемым до сотен и тысяч кластеров. Flux обеспечивает ясное развертывание приложений по модели pull-based в GitOps. Доступ к кластерам не требуется исходному репозиторию или любому другому кластеру.

Это важно

Для развертываний Flux в Службе Azure Kubernetes (AKS), AKS Edge Essentials или AKS, включенных Azure Arc в Локальной среде Azure, не взимается плата. Для других дистрибутивов Kubernetes, подключенных через Kubernetes с поддержкой Azure Arc, не взимается плата за развертывания Flux на первых шести виртуальных ЦП в подписке. Затем взимается плата на основе количества виртуальных ЦП на кластер. Дополнительные сведения см. в ценах на Azure Arc.

Расширение кластера Flux

GitOps включён в кластер Kubernetes с поддержкой Azure Arc или в кластер AKS в качестве ресурса Microsoft.KubernetesConfiguration/extensions/microsoft.fluxрасширения кластера. Для создания одного или нескольких microsoft.flux необходимо предварительно установить расширение fluxConfigurations в кластере. Расширение устанавливается автоматически при создании первого Microsoft.KubernetesConfiguration/fluxConfigurations в кластере или его можно установить вручную с помощью портала, azure CLI (az k8s-extension create --extensionType=microsoft.flux), шаблона ARM или REST API.

Контроллеры

По умолчанию microsoft.flux расширение устанавливает контроллеры Flux (Source, Kustomize, Helm, Notification) и определение пользовательского ресурса FluxConfig (CRD), fluxconfig-agent и fluxconfig-controller. Вы также можете установить Flux image-automation и image-reflector контроллеры, которые предоставляют функциональные возможности для обновления и получения образов Docker.

  • Контроллер источника Flux: просматривает пользовательские source.toolkit.fluxcd.io ресурсы. Обрабатывает синхронизацию между репозиториями Git, репозиториями Helm, контейнерами и хранилищем BLOB-объектов Azure. Обеспечивает авторизацию для частных репозиториев Git, Helm и учетных записей Azure Blob Storage. Отображает последние изменения в источнике с помощью архивного файла tar.

  • Контроллер Flux Kustomize: просматривает настраиваемые kustomization.toolkit.fluxcd.io ресурсы. Применяет Kustomize или исходные файлы YAML на кластер.

  • Контроллер Flux Helm: просматривает настраиваемые helm.toolkit.fluxcd.io ресурсы. Извлекает связанную диаграмму из источника репозитория Helm, управляемого контроллером источника. Создает настраиваемый ресурс HelmChart и применяет к кластеру HelmRelease с заданной версией, именем и значениями, определенными клиентом.

  • Контроллер уведомлений Flux: просматривает настраиваемые notification.toolkit.fluxcd.io ресурсы. Получает уведомления от всех контроллеров Flux. Отправляет уведомления в определяемые пользователем конечные точки веб-перехватчика.

  • Определения пользовательских ресурсов Flux:

    • kustomizations.kustomize.toolkit.fluxcd.io
    • imagepolicies.image.toolkit.fluxcd.io
    • imagerepositories.image.toolkit.fluxcd.io
    • imageupdateautomations.image.toolkit.fluxcd.io
    • alerts.notification.toolkit.fluxcd.io
    • providers.notification.toolkit.fluxcd.io
    • receivers.notification.toolkit.fluxcd.io
    • buckets.source.toolkit.fluxcd.io
    • gitrepositories.source.toolkit.fluxcd.io
    • helmcharts.source.toolkit.fluxcd.io
    • helmrepositories.source.toolkit.fluxcd.io
    • helmreleases.helm.toolkit.fluxcd.io
    • fluxconfigs.clusterconfig.azure.com
  • FluxConfig CRD: настраиваемое определение ресурсов для fluxconfigs.clusterconfig.azure.com пользовательских ресурсов, определяющих FluxConfig объекты Kubernetes.

  • fluxconfig-agent: мониторит Azure на предмет новых или обновленных ресурсов fluxConfigurations, и запускает соответствующую конфигурацию Flux в кластере. Он также отправляет изменения состояния Flux в кластере обратно в Azure для каждого fluxConfigurations ресурса.

  • fluxconfig-controller: просматривает настраиваемые fluxconfigs.clusterconfig.azure.com ресурсы и реагирует на изменения с новой или обновленной конфигурацией оборудования GitOps в кластере.

Замечание

Расширение microsoft.flux установлено в пространстве имен flux-system и имеет кластерный охват. Вы не можете установить это расширение в области пространства имен.

Конфигурации Flux

Схема, показывающая установку конфигурации Flux в кластере Kubernetes с поддержкой Azure Arc или AKS.

Чтобы скачать схемы архитектуры в высоком разрешении, перейдите на страницу Jumpstart Gems.

Создайте ресурсы конфигурации Flux (Microsoft.KubernetesConfiguration/fluxConfigurations) для включения управления GitOps кластером из ваших репозиториев Git, источников Bucket или объектов BLOB Azure. При создании fluxConfigurations ресурса значения, которые вы предоставляете для параметров, таких как целевой репозиторий Git, используются для создания и настройки объектов Kubernetes, которые позволяют процессу GitOps в этом кластере. Чтобы обеспечить безопасность данных, служба конфигурации кластера сохраняет данные ресурсов fluxConfigurations, зашифрованные в состоянии покоя, в базе данных Azure Cosmos DB.

Агенты fluxconfig-agent и fluxconfig-controller, установленные с помощью расширения microsoft.flux, управляют процессом конфигурации GitOps.

fluxconfig-agent отвечает за следующие задачи:

  • Опрос службы уровня данных конфигурации Kubernetes для новых или обновленных fluxConfigurations ресурсов.
  • Создает или обновляет FluxConfig пользовательские ресурсы в кластере, используя информацию о конфигурации.
  • Отслеживает FluxConfig настраиваемые ресурсы и отправляет изменения состояния обратно к связанным ресурсам Azure fluxConfiguration.

fluxconfig-controller отвечает за следующие задачи:

  • Следит за обновлениями состояния настраиваемых ресурсов Flux, созданных управляемым fluxConfigurations.
  • Создает пару закрытого и открытого ключей, которая существует на протяжении всего времени существования fluxConfigurations. Этот ключ используется для проверки подлинности, если URL-адрес основан на SSH, и если пользователь не предоставляет собственный закрытый ключ во время создания конфигурации.
  • Создает настраиваемый секрет аутентификации на основе предоставленных пользователем данных закрытого ключа, http basic-auth, известных хостов или отсутствия аутентификации.
  • Настраивает управление доступом на основе ролей (предоставленная учетная запись службы, созданная или назначенная привязка ролей, созданная или назначенная роль).
  • Создает GitRepository или Bucket пользовательский ресурс и Kustomization пользовательские ресурсы из сведений в пользовательском ресурсе FluxConfig.

Каждый ресурс fluxConfigurations в Azure связан с одним пользовательским ресурсом Flux GitRepository или Bucket и с одним или несколькими пользовательскими ресурсами Kustomization в кластере Kubernetes. При создании fluxConfigurations ресурса укажите URL-адрес источника (репозиторий Git, bucket или хранилище Azure Blob) и целевой адрес синхронизации в источнике для каждого Kustomization. Можно настроить зависимости между Kustomization пользовательскими ресурсами для управления последовательности развертывания. Вы также можете создать несколько ресурсов в пространстве имен fluxConfigurations в одном кластере для разных приложений и команд разработчиков.

Замечание

fluxconfig-agent отслеживает новые или обновленные ресурсы fluxConfiguration в Azure. Агенту требуется подключение к Azure для применения требуемого состояния к кластеру. Если агент не может подключиться к Azure, изменения в кластере будут ожидать, пока агент не сможет подключиться. Если кластер отключен от Azure в течение более 48 часов, запрос к кластеру истекает, а изменения необходимо повторно применить в Azure.

Конфиденциальные данные клиента, такие как закрытый ключ и пароль, хранятся менее 48 часов в службе конфигурации Kubernetes. Если вы обновляете любое из этих значений в Azure, убедитесь, что кластеры подключаются к Azure в течение 48 часов.

Вы можете отслеживать состояние конфигурации Flux и соответствие на портале Azure или использовать панели мониторинга для мониторинга состояния, соответствия, потребления ресурсов и выверки действий. Дополнительные сведения см. в разделе Мониторинг статуса и активности GitOps (Flux версии 2).

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

Поддерживается последняя версия расширения Flux v2 (microsoft.flux) и две предыдущие версии (N-2). Используйте последнюю версию расширения. Начиная с microsoft.flux версии 1.7.0, поддерживаются кластеры на основе ARM64.

Если вы добавили поддержку приватной ссылки к кластеру Kubernetes с поддержкой Azure Arc, microsoft.flux расширение работает из коробки с обратной связью в Azure. Для подключений к репозиторию Git, репозиторию Helm или другим конечным точкам, необходимым для развертывания манифестов Kubernetes, необходимо либо подготовить эти конечные точки за брандмауэром, либо перечислить их в брандмауэре, чтобы контроллер источника Flux смог успешно связаться с ними.

Место расположения данных

Служба Azure GitOps (Управление конфигурацией Azure Kubernetes) хранит и обрабатывает данные клиентов. По умолчанию данные клиента реплицируются в парный регион. Для регионов Сингапур, Восточная Азия и Южная Бразилия все данные клиента хранятся и обрабатываются в регионе.

Применение конфигураций Flux на большом масштабе

Так как Azure Resource Manager управляет конфигурациями, вы можете автоматизировать создание одной и той же конфигурации во всех службах Azure Kubernetes и ресурсах Kubernetes с поддержкой Azure Arc с помощью политики Azure в пределах подписки или группы ресурсов. Это принудительное применение обеспечивает согласованное применение определенных конфигураций для всех групп кластеров.

Дополнительные сведения см. в статье "Развертывание приложений в масштабе с помощью конфигураций Flux версии 2 и политики Azure".

Параметры

Сведения о всех параметрах, поддерживаемых Flux версии 2 в Azure, см. в az k8s-configuration документации. Реализация Azure в настоящее время не поддерживает все параметры, поддерживаемые Flux.

Сведения о доступных параметрах и их использовании см. в поддерживаемых параметрах GitOps (Flux версии 2).

Мультитенантность

Flux версии 2 поддерживает многотенантность , начиная с версии 0.26. Эта возможность интегрирована в Flux версии 2 в Azure.

Замечание

Чтобы использовать функцию многотенантности, проверьте, содержат ли ваши манифесты какие-либо sourceRef с перекрёстным пространством имён для HelmRelease, Kustomization, ImagePolicy или других объектов, или если вы используете версию Kubernetes менее 1.20.6. Чтобы подготовиться:

  • Обновление до Kubernetes версии 1.20.6 или более поздней.
  • В манифестах Kubernetes убедитесь, что все sourceRef объекты находятся в том же пространстве имен, что и конфигурация GitOps.

Обновление манифестов для многотенантности

Предположим, что вы развертываете fluxConfiguration в одном из ваших кластеров Kubernetes, в пространстве имен cluster-config с областью кластера. Вы настраиваете источник для синхронизации репозитория https://github.com/fluxcd/flux2-kustomize-helm-example . Это тот же пример репозитория Git, который используется в руководстве по развертыванию приложений с помощью GitOps с Flux версии 2.

После синхронизации репозитория Flux он развертывает ресурсы, описанные в манифестах (YAML-файлах). Два манифеста описывают HelmRelease и HelmRepository объекты.

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: nginx
  namespace: nginx
spec:
  releaseName: nginx-ingress-controller
  chart:
    spec:
      chart: nginx-ingress-controller
      sourceRef:
        kind: HelmRepository
        name: bitnami
        namespace: flux-system
      version: "5.6.14"
  interval: 1h0m0s
  install:
    remediation:
      retries: 3
  # Default values
  # https://github.com/bitnami/charts/blob/master/bitnami/nginx-ingress-controller/values.yaml
  values:
    service:
      type: NodePort
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: HelmRepository
metadata:
  name: bitnami
  namespace: flux-system
spec:
  interval: 30m
  url: https://charts.bitnami.com/bitnami

По умолчанию расширение Flux развертывает fluxConfigurations путем олицетворения учетной записи службы flux-applier, развернутой только в пространстве имен cluster-config. Используя предыдущие манифесты, если включена многотенантность, HelmRelease блокируется. Этот блок происходит потому, что HelmRelease находится в nginx пространстве имен, но ссылается на HelmRepository в flux-system. Кроме того, Flux helm-controller не может применить HelmRelease, так как в пространстве имен нет учетной записи службы flux-applier.

Чтобы работать с несколькими клиентами, разверните все объекты Flux в том же пространстве имен, что и объект fluxConfigurations. Этот подход позволяет избежать проблемы межпространственных ссылок и дает контроллерам Flux возможность получать разрешения для применения объектов. Таким образом, для конфигурации GitOps, созданной в пространстве имен cluster-config, данные примеры манифестов изменяются следующим образом:

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: nginx
  namespace: cluster-config 
spec:
  releaseName: nginx-ingress-controller
  targetNamespace: nginx
  chart:
    spec:
      chart: nginx-ingress-controller
      sourceRef:
        kind: HelmRepository
        name: bitnami
        namespace: cluster-config
      version: "5.6.14"
  interval: 1h0m0s
  install:
    remediation:
      retries: 3
  # Default values
  # https://github.com/bitnami/charts/blob/master/bitnami/nginx-ingress-controller/values.yaml
  values:
    service:
      type: NodePort
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: HelmRepository
metadata:
  name: bitnami
  namespace: cluster-config
spec:
  interval: 30m
  url: https://charts.bitnami.com/bitnami

Отказ от многотенантности

При установке microsoft.flux расширения по умолчанию включена многотенантность. Чтобы отключить многотенантность, исключите это, создав или обновив microsoft.flux расширение в ваших кластерах с помощью --configuration-settings multiTenancy.enforce=false, как показано в следующих примерах команд.

az k8s-extension create --extension-type microsoft.flux --configuration-settings multiTenancy.enforce=false -c CLUSTER_NAME -g RESOURCE_GROUP -n flux -t <managedClusters or connectedClusters>
az k8s-extension update --configuration-settings multiTenancy.enforce=false -c CLUSTER_NAME -g RESOURCE_GROUP -n flux -t <managedClusters or connectedClusters>

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