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


Развёртывание приложений с помощью 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

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. Отображает последние изменения в источнике с помощью архивного файла 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, контейнер или хранилище BLOB-объектов Azure) и целевой объект синхронизации в источнике для каждого 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.

Замечание

Если вы использовали 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 flux list --cluster-name <cluster name> --cluster-type <connectedClusters or managedClusters> --resource-group <resource group name>
az k8s-configuration flux 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.

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