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

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

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

С помощью 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 обеспечивает чистое развертывание приложений на основе извлечения GitOps. Доступ к кластерам не требуется исходному репозиторию или любому другому кластеру.

Расширение кластера 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.

Controllers

По умолчанию 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 repos и учетных записей хранения BLOB-объектов Azure. Поверхность последних изменений в источнике через файл архива 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.

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

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

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

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

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

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

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

Примечание.

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

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

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

Поддерживаемые версии

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

Примечание.

Если вы использовали Flux версии 1, рекомендуется перейти на Flux версии 2 как можно скорее.

Поддержка ресурсов конфигурации кластера flux версии 1, созданных до 1 января 2024 г., завершится 24 мая 2025 г. Начиная с 1 января 2024 г. вы не сможете создавать новые ресурсы конфигурации кластера Flux версии 1.

Если вы добавили поддержку приватного канала к кластеру 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.

Примечание.

Для функции многотенантности необходимо знать, содержат ли манифесты любой межпространственный источникref для 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/v2beta1
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 учетной nginx записи службы.

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

apiVersion: helm.toolkit.fluxcd.io/v2beta1
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>

Миграция из Flux версии 1

Если вы по-прежнему используете Flux версии 1, рекомендуется перейти на Flux версии 2 как можно скорее.

Чтобы перейти на использование Flux версии 2 в тех же кластерах, где вы использовали Flux версии 1, необходимо сначала удалить все Flux версии 1 sourceControlConfigurations из кластеров. Так как Flux версии 2 имеет принципиально другую архитектуру, microsoft.flux расширение кластера не будет устанавливаться, если в кластере есть ресурсы Flux версии 1 sourceControlConfigurations . Процесс удаления конфигураций Flux версии 1 и развертывания конфигураций Flux версии 2 не должен занять более 30 минут.

Удаление Flux версии 1 sourceControlConfigurations не останавливает любые приложения, работающие в кластерах. Однако в период удаления конфигурации Flux версии 1 и расширения Flux версии 2 еще не полностью развернуто:

  • Если в репозитории Git хранятся новые изменения в манифестах приложения, эти изменения не извлекаются во время миграции, а версия приложения, развернутая в кластере, будет устаревшей.
  • Если в состоянии кластера есть непреднамеренные изменения и он отклоняется от требуемого состояния, указанного в исходном репозитории Git, кластер не сможет самостоятельно исцелиться.

Перед переносом рабочей среды рекомендуется протестировать сценарий миграции в среде разработки.

Просмотр и удаление конфигураций Flux версии 1

Используйте следующие команды Azure CLI для поиска и удаления существующих sourceControlConfigurations в кластере:

az k8s-configuration list --cluster-name <cluster name> --cluster-type <connectedClusters or managedClusters> --resource-group <resource group name>
az k8s-configuration delete --name <configuration name> --cluster-name <cluster name> --cluster-type <connectedClusters or managedClusters> --resource-group <resource group name>

Вы также можете найти и удалить существующие конфигурации GitOps для кластера в портал Azure. Для этого перейдите к кластеру, в котором была создана конфигурация, и выберите GitOps в левой области. Выберите конфигурацию, а затем нажмите кнопку "Удалить".

Развертывание конфигураций Flux версии 2

Используйте портал Azure или Azure CLI для применения конфигураций Flux версии 2 к кластерам.

Сведения о выходе flux версии 1

Проект с открытым исходным кодом Flux версии 1 был архивирован, и разработка функций остановлена на неопределенный срок.

Flux версии 2 был запущен в качестве обновленного проекта Flux с открытым исходным кодом. Она имеет новую архитектуру и поддерживает больше вариантов использования GitOps. Корпорация Майкрософт запустила версию расширения с помощью Flux версии 2 в мае 2022 года. С тех пор клиентам рекомендуется перейти на Flux версии 2 в течение трех лет, так как поддержка использования Flux версии 1 планируется завершиться в мае 2025 года.

Основные новые функции, представленные в расширении GitOps для Flux версии 2:

  • Flux v1 — это монолитный оператор do-it-all. Flux версии 2 разделяет функциональные возможности на специализированные контроллеры (исходный контроллер, контроллер Kustomize, контроллер Helm и контроллер уведомлений).
  • Поддерживает синхронизацию с несколькими репозиториями источника.
  • Поддерживает многотенантность, например применение каждого исходного репозитория с собственным набором разрешений.
  • Предоставляет оперативную аналитику с помощью проверок работоспособности, событий и оповещений.
  • Поддерживает ветви Git, закрепление фиксаций и тегов и следующие диапазоны тегов SemVer.
  • Конфигурация учетных данных для ресурса GitRepository: закрытый ключ SSH, имя пользователя HTTP/S, пароль или токен и открытые ключи OpenPGP.

Следующие шаги