Развертывания приложений с помощью GitOps (Flux версии 2) для AKS и Kubernetes с поддержкой Azure Arc
Azure предоставляет возможность автоматического развертывания приложений с помощью GitOps, которая работает с кластерами Kubernetes с поддержкой Служба Azure Kubernetes (AKS) и Azure Arc. Основные преимущества, предоставляемые путем внедрения GitOps для развертывания приложений в кластерах Kubernetes, включают:
- Постоянная видимость состояния приложений, работающих в кластерах.
- Разделение проблем между командами разработки приложений и группами инфраструктуры. Командам приложений не нужно работать с развертываниями Kubernetes. Команды разработчиков платформы обычно создают модель самообслуживания для команд приложений, позволяя им запускать развертывания с более высокой уверенностью.
- Возможность повторного создания кластеров с тем же требуемым состоянием в случае сбоя или горизонтального масштабирования.
С помощью GitOps вы объявляете требуемое состояние кластеров Kubernetes в файлах в репозиториях Git. Репозитории Git могут содержать следующие файлы:
- Манифесты с форматированием YAML, описывающие ресурсы Kubernetes (такие как пространства имен, секреты , развертывания и другие)
- Диаграммы Helm для развертывания приложений
- Файлы Kustomize для описания изменений в среде
Так как эти файлы хранятся в репозитории 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 (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.
GitOps с приватным каналом
Если вы добавили поддержку приватного канала к кластеру 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.- Если вам нужно время обновить манифесты, вы можете отказаться от многотенантности. Однако вам по-прежнему нужно обновить версию Kubernetes.
Обновление манифестов для многотенантности
Предположим, что вы развернете 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.
Следующие шаги
- Используйте наш учебник, чтобы узнать , как включить GitOps в кластерах Kubernetes с поддержкой AKS или Azure Arc.
- Сведения о рабочем процессе CI/CD с помощью GitOps.