Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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 в Службе 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. Отображает последние изменения в источнике с помощью архивного файла 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.ioimagepolicies.image.toolkit.fluxcd.ioimagerepositories.image.toolkit.fluxcd.ioimageupdateautomations.image.toolkit.fluxcd.ioalerts.notification.toolkit.fluxcd.ioproviders.notification.toolkit.fluxcd.ioreceivers.notification.toolkit.fluxcd.iobuckets.source.toolkit.fluxcd.iogitrepositories.source.toolkit.fluxcd.iohelmcharts.source.toolkit.fluxcd.iohelmrepositories.source.toolkit.fluxcd.iohelmreleases.helm.toolkit.fluxcd.iofluxconfigs.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.
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/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 нет учетной записи службы nginx.
Чтобы работать с несколькими клиентами, правильный подход заключается в развертывании всех объектов 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>
Дальнейшие шаги
- Используйте наш учебник, чтобы узнать, как включить GitOps в кластерах Kubernetes с поддержкой AKS или Azure Arc.
- Узнайте о рабочем процессе CI/CD с использованием GitOps.