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