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


Учебное пособие: Деплой приложений с использованием GitOps и Flux версии 2

В этом руководстве описывается, как использовать GitOps в кластере Kubernetes. GitOps с Flux версии 2 включен как расширение кластера в кластерах Kubernetes с поддержкой Azure Arc или кластерах Службы Azure Kubernetes (AKS). microsoft.flux После установки расширения для кластера вы можете создать один или несколько fluxConfigurations ресурсов, которые синхронизируют источники вашего Git-репозитория с кластером и приводят кластер в желаемое состояние. С помощью GitOps вы можете использовать репозиторий Git в качестве источника истины для конфигурации кластера и развертывания приложений.

В этом руководстве мы используем пример конфигурации GitOps с двумя kustomizations, чтобы увидеть, как одна kustomization может иметь зависимость от другой. При необходимости можно добавить дополнительные параметры kustomizations и зависимостей в зависимости от вашего сценария.

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

Подсказка

Хотя источник в этом руководстве является репозиторием Git, Flux также предоставляет поддержку других распространенных источников файлов, таких как репозитории Helm, Контейнеры и Хранилище BLOB-объектов Azure.

Вы также можете создавать конфигурации Flux с помощью Bicep, шаблонов ARM или поставщика Terraform AzAPI. Дополнительные сведения см. в статье Microsoft.KubernetesConfiguration fluxConfigurations.

Попробуйте использовать новое расширение Microsoft GitOps ArgoCD. Argo CD — это популярное средство GitOps с открытым исходным кодом, которое предоставляет другой набор функций и возможностей по сравнению с Flux версии 2.

Предпосылки

Чтобы развернуть приложения с использованием GitOps с Flux v2, вам потребуется:

Кластеры Kubernetes с поддержкой Azure Arc

Кластеры Службы Azure Kubernetes

  • Кластер AKS на основе MSI, который введён в эксплуатацию.

    Внимание

    Убедитесь, что кластер AKS создан с помощью MSI (а не SPN), так как расширение microsoft.flux не работает с кластерами AKS на основе учетных записей службы. Для новых кластеров AKS, созданных с помощью az aks create, кластер по умолчанию основан на MSI. Чтобы преобразовать SPN-кластеры в MSI, выполните команду az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity. Для получения дополнительной информации см. статью об использовании управляемой идентичности в AKS.

  • Разрешения на чтение и запись для типа ресурса Microsoft.ContainerService/managedClusters.

Общие для обоих типов кластеров

  • Разрешения на чтение и запись для этих типов ресурсов:

    • Microsoft.KubernetesConfiguration/extensions
    • Microsoft.KubernetesConfiguration/fluxConfigurations
  • Azure CLI 2.15 или более поздней версии. Установите Azure CLI или используйте следующие команды для обновления до последней версии:

    az version
    az upgrade
    
  • Клиент командной строки Kubernetes, kubectl. Если вы используете Azure Cloud Shell, kubectl уже установлен.

    Установите kubectl локально с помощью az aks install-cli команды:

    az aks install-cli
    
  • Регистрация следующих поставщиков ресурсов Azure:

    az provider register --namespace Microsoft.Kubernetes
    az provider register --namespace Microsoft.ContainerService
    az provider register --namespace Microsoft.KubernetesConfiguration
    

    Регистрация — это асинхронный процесс, который должен завершиться в течение 10 минут. Чтобы отслеживать процесс регистрации, используйте следующую команду:

    az provider show -n Microsoft.KubernetesConfiguration -o table
    
    Namespace                          RegistrationPolicy    RegistrationState
    ---------------------------------  --------------------  -------------------
    Microsoft.KubernetesConfiguration  RegistrationRequired  Registered
    

Поддержка версий и регионов

В настоящее время GitOps поддерживается во всех регионах, поддерживаемых Kubernetes с поддержкой Azure Arc. В настоящее время GitOps доступна в некоторых регионах, поддерживаемых AKS. Служба GitOps добавляет новые поддерживаемые регионы на регулярной основе.

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

Требования к сети

Для работы агентов GitOps требуется исходящее TCP-подключение (исходящий трафик) к источнику репозитория через порт 22 (SSH) или 443 (HTTPS). Агенты также требуют доступа к следующим исходящим URL-адресам:

Конечная точка (DNS) Описание
https://management.azure.com Требуется для взаимодействия агента со службой конфигурации Kubernetes.
https://<region>.dp.kubernetesconfiguration.azure.com Конечная точка плоскости данных, через которую агент будет отправлять сведения о состоянии и извлекать сведения о конфигурации. Зависит от <region> (поддерживаемых регионов, упомянутых ранее).
https://login.microsoftonline.com Требуется для извлечения и обновления токенов Azure Resource Manager.
https://mcr.microsoft.com Требуется контроллерам Flux для извлечения образов контейнеров.

Включение расширений CLI

Установите последние пакеты расширений k8s-configuration и k8s-extension для CLI.

az extension add -n k8s-configuration
az extension add -n k8s-extension

Чтобы обновить эти пакеты до последних версий:

az extension update -n k8s-configuration
az extension update -n k8s-extension

Чтобы просмотреть список всех установленных расширений Azure CLI и их версий, выполните следующую команду:

az extension list -o table

Experimental   ExtensionType   Name                   Path                                                       Preview   Version
-------------  --------------  -----------------      -----------------------------------------------------      --------  --------
False          whl             connectedk8s           C:\Users\somename\.azure\cliextensions\connectedk8s         False     1.2.7
False          whl             k8s-configuration      C:\Users\somename\.azure\cliextensions\k8s-configuration    False     1.5.0
False          whl             k8s-extension          C:\Users\somename\.azure\cliextensions\k8s-extension        False     1.1.0

Подсказка

Сведения об устранении ошибок см. в разделе GitOps (Flux версии 2) в разделе "Устранение неполадок с расширением для кластеров Kubernetes с поддержкой Azure Arc".

Применение конфигурации Flux

k8s-configuration Используйте расширение Azure CLI или портал Azure, чтобы включить GitOps в кластере Kubernetes с поддержкой AKS или Arc. Для демонстрации используйте общедоступный репозиторий gitops-flux2-kustomize-helm-mt .

Внимание

Демонстрационный репозиторий предназначен для упрощения использования этого руководства и иллюстрации ключевых принципов. Для поддержания актуальности, репозиторий иногда может получать изменения, нарушающие совместимость, при обновлениях версии. Эти изменения не влияют на новое использование этого руководства, только предыдущие приложения. Дополнительные сведения см. в заявлении об отказе от критических изменений.

В следующем примере команда используется az k8s-configuration flux create для применения конфигурации Flux к кластеру с помощью следующих значений и параметров:

  • Группа ресурсов, содержащая кластер flux-demo-rg.
  • Имя кластера Azure Arc flux-demo-arc.
  • Тип кластера — Azure Arc (-t connectedClusters), но этот пример также работает с AKS (-t managedClusters).
  • Имя конфигурации Flux — cluster-config.
  • Пространство имен для установки конфигурации cluster-config.
  • URL-адрес общедоступного репозитория https://github.com/Azure/gitops-flux2-kustomize-helm-mtGit.
  • Ветвь репозитория Git — main.
  • Область действия конфигурации cluster. Эта область предоставляет операторам разрешения на внесение изменений в кластер. Чтобы использовать область namespace с этим руководством, ознакомьтесь с необходимыми изменениями.
  • Два настройки указаны с именами infra и apps. Каждый из них связан с путем к файлу в репозитории.
  • Зависимость apps кастомизации от infra кастомизации. (Кастомизация infra должна завершиться до apps запуска кастомизации.)
  • Задайте prune=true для обоих настроек. Этот параметр гарантирует, что объекты, развернутые Flux в кластере, очищаются, если они удалены из репозитория, или если удаляются конфигурация Flux или кастомизации.
az k8s-configuration flux create -g flux-demo-rg \
-c flux-demo-arc \
-n cluster-config \
--namespace cluster-config \
-t connectedClusters \
--scope cluster \
-u https://github.com/Azure/gitops-flux2-kustomize-helm-mt \
--branch main  \
--kustomization name=infra path=./infrastructure prune=true \
--kustomization name=apps path=./apps/staging prune=true dependsOn=\["infra"\]

Расширение microsoft.flux устанавливается в кластере (если оно еще не было установлено в предыдущем развертывании GitOps).

Подсказка

Команда az k8s-configuration flux create развертывает microsoft.flux расширение в кластере и создает конфигурацию. В некоторых сценариях может потребоваться создать экземпляр расширения flux отдельно перед созданием ресурсов конфигурации. Для этого используйте az k8s-extension create команду для создания экземпляра расширения в кластере.

При первой установке конфигурации flux начальное состояние соответствия может быть Pending или Non-compliant потому, что сверка по-прежнему продолжается. Через минуту запросите конфигурацию еще раз, чтобы увидеть окончательное состояние соответствия.

az k8s-configuration flux show -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters

Чтобы убедиться, что развертывание выполнено успешно, выполните следующую команду:

az k8s-configuration flux show -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters

При успешном развертывании создаются следующие пространства имен:

  • flux-system: содержит контроллеры расширений Flux.
  • cluster-config: содержит объекты конфигурации Flux.
  • nginx, podinfo, redis: пространства имён, содержащие рабочие нагрузки, указанные в манифестах репозитория Git.

Чтобы подтвердить пространства имен, выполните следующую команду:

kubectl get namespaces

Пространство имен flux-system включает расширения объектов Flux:

  • Контроллеры Azure Flux: fluxconfig-agentfluxconfig-controller
  • Контроллеры Flux OSS: source-controller, kustomize-controller, helm-controller, notification-controller

Агент Flux и модули pod контроллера должны находиться в состоянии выполнения. Подтвердите это с помощью следующей команды:

kubectl get pods -n flux-system

NAME                                      READY   STATUS    RESTARTS   AGE
fluxconfig-agent-9554ffb65-jqm8g          2/2     Running   0          21m
fluxconfig-controller-9d99c54c8-nztg8     2/2     Running   0          21m
helm-controller-59cc74dbc5-77772          1/1     Running   0          21m
kustomize-controller-5fb7d7b9d5-cjdhx     1/1     Running   0          21m
notification-controller-7d45678bc-fvlvr   1/1     Running   0          21m
source-controller-df7dc97cd-4drh2         1/1     Running   0          21m

Пространство имен cluster-config содержит объекты конфигурации Flux.

kubectl get crds

NAME                                                   CREATED AT
alerts.notification.toolkit.fluxcd.io                  2022-04-06T17:15:48Z
arccertificates.clusterconfig.azure.com                2022-03-28T21:45:19Z
azureclusteridentityrequests.clusterconfig.azure.com   2022-03-28T21:45:19Z
azureextensionidentities.clusterconfig.azure.com       2022-03-28T21:45:19Z
buckets.source.toolkit.fluxcd.io                       2022-04-06T17:15:48Z
connectedclusters.arc.azure.com                        2022-03-28T21:45:19Z
customlocationsettings.clusterconfig.azure.com         2022-03-28T21:45:19Z
extensionconfigs.clusterconfig.azure.com               2022-03-28T21:45:19Z
fluxconfigs.clusterconfig.azure.com                    2022-04-06T17:15:48Z
gitconfigs.clusterconfig.azure.com                     2022-03-28T21:45:19Z
gitrepositories.source.toolkit.fluxcd.io               2022-04-06T17:15:48Z
helmcharts.source.toolkit.fluxcd.io                    2022-04-06T17:15:48Z
helmreleases.helm.toolkit.fluxcd.io                    2022-04-06T17:15:48Z
helmrepositories.source.toolkit.fluxcd.io              2022-04-06T17:15:48Z
imagepolicies.image.toolkit.fluxcd.io                  2022-04-06T17:15:48Z
imagerepositories.image.toolkit.fluxcd.io              2022-04-06T17:15:48Z
imageupdateautomations.image.toolkit.fluxcd.io         2022-04-06T17:15:48Z
kustomizations.kustomize.toolkit.fluxcd.io             2022-04-06T17:15:48Z
providers.notification.toolkit.fluxcd.io               2022-04-06T17:15:48Z
receivers.notification.toolkit.fluxcd.io               2022-04-06T17:15:48Z
volumesnapshotclasses.snapshot.storage.k8s.io          2022-03-28T21:06:12Z
volumesnapshotcontents.snapshot.storage.k8s.io         2022-03-28T21:06:12Z
volumesnapshots.snapshot.storage.k8s.io                2022-03-28T21:06:12Z
websites.extensions.example.com                        2022-03-30T23:42:32Z

Подтвердите другие сведения о конфигурации с помощью следующих команд.

kubectl get fluxconfigs -A

NAMESPACE        NAME             SCOPE     URL                                                       PROVISION   AGE
cluster-config   cluster-config   cluster   https://github.com/Azure/gitops-flux2-kustomize-helm-mt   Succeeded   44m
kubectl get gitrepositories -A

NAMESPACE        NAME             URL                                                       READY   STATUS                                                            AGE
cluster-config   cluster-config   https://github.com/Azure/gitops-flux2-kustomize-helm-mt   True    Fetched revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   45m
kubectl get helmreleases -A

NAMESPACE        NAME      READY   STATUS                             AGE
cluster-config   nginx     True    Release reconciliation succeeded   66m
cluster-config   podinfo   True    Release reconciliation succeeded   66m
cluster-config   redis     True    Release reconciliation succeeded   66m
kubectl get kustomizations -A


NAMESPACE        NAME                   READY   STATUS                                                            AGE
cluster-config   cluster-config-apps    True    Applied revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   65m
cluster-config   cluster-config-infra   True    Applied revision: main/4f1bdad4d0a54b939a5e3d52c51464f67e474fcf   65m

Рабочие нагрузки развертываются из манифестов в репозитории Git.

kubectl get deploy -n nginx

NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
nginx-ingress-controller                   1/1     1            1           67m
nginx-ingress-controller-default-backend   1/1     1            1           67m

kubectl get deploy -n podinfo

NAME      READY   UP-TO-DATE   AVAILABLE   AGE
podinfo   1/1     1            1           68m

kubectl get all -n redis

NAME                 READY   STATUS    RESTARTS   AGE
pod/redis-master-0   1/1     Running   0          68m

NAME                     TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
service/redis-headless   ClusterIP   None          <none>        6379/TCP   68m
service/redis-master     ClusterIP   10.0.13.182   <none>        6379/TCP   68m

NAME                            READY   AGE
statefulset.apps/redis-master   1/1     68m

Управление развертыванием контроллеров с помощью расширения кластера Flux

В некоторых сценариях может потребоваться изменить, какие контроллеры Flux устанавливаются с расширением кластера Flux.

Контроллеры source, helmи kustomizenotification Flux устанавливаются по умолчанию. Контроллеры image-automation и image-reflector, используемые для обновления репозитория Git при наличии новых образов контейнеров, должны быть включены явным образом.

Для изменения параметров по умолчанию можно использовать k8s-extension команду:

  • --config source-controller.enabled=<true/false> (по умолчанию true)
  • --config helm-controller.enabled=<true/false> (по умолчанию true)
  • --config kustomize-controller.enabled=<true/false> (по умолчанию true)
  • --config notification-controller.enabled=<true/false> (по умолчанию true)
  • --config image-automation-controller.enabled=<true/false> (по умолчанию false)
  • --config image-reflector-controller.enabled=<true/false> (по умолчанию false)

Например, чтобы отключить уведомления, можно задать значение notification-controller.enabledfalse.

В этом примере команда устанавливает image-reflector и image-automation контроллеры. Если расширение Flux было создано автоматически при создании конфигурации Flux, имя расширения — flux.

az k8s-extension create -g <cluster_resource_group> -c <cluster_name> -t <connectedClusters or managedClusters or provisionedClusters> --name flux --extension-type microsoft.flux --config image-automation-controller.enabled=true image-reflector-controller.enabled=true

Использование удостоверения Kubelet в качестве метода проверки подлинности для кластеров AKS

Для кластеров AKS один из используемых вариантов проверки подлинности — удостоверение kubelet. По умолчанию AKS создает собственное удостоверение kubelet в управляемой группе ресурсов. Если вы предпочитаете, можно использовать управляемое удостоверение kubelet, созданное заранее. Для этого добавьте параметр --config useKubeletIdentity=true во время установки расширения Flux.

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type managedClusters --name flux --extension-type microsoft.flux --config useKubeletIdentity=true

Руководство по подключению Red Hat OpenShift

Для контроллеров Flux требуется некорневоеограничение контекста безопасности для правильного развертывания подов в кластере. Эти ограничения необходимо добавить в кластер перед развертыванием microsoft.flux расширения.

NS="flux-system"
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:kustomize-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:helm-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:source-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:notification-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:image-automation-controller
oc adm policy add-scc-to-user nonroot system:serviceaccount:$NS:image-reflector-controller

Дополнительные сведения об использовании OpenShift для подключения Flux см. в документации по Flux.

Работа с параметрами

Flux поддерживает множество параметров для включения различных сценариев. Описание всех параметров, поддерживаемых Flux, см. в официальной документации Flux. Flux в Azure пока не поддерживает все параметры. Сообщите нам, отсутствует ли нужный параметр из реализации Azure.

Сведения о доступных параметрах и их использовании см. в поддерживаемых параметрах GitOps (Flux версии 2).

Справочник по локальной проверке подлинности секретов

Чтобы использовать локальную ссылку для проверки подлинности секрета, секрет должен существовать в том же пространстве имен, где fluxConfiguration развертывается. Секрет также должен содержать все параметры проверки подлинности, необходимые для источника.

Сведения о создании секретов для различных fluxConfiguration источников см. в разделе "Локальный секрет" для проверки подлинности с помощью источника.

Управление конфигурацией кластера с помощью контроллера Flux Kustomize

Контроллер Flux Kustomize устанавливается как часть microsoft.flux расширения кластера. Он позволяет декларативному управлению конфигурацией кластера и развертыванием приложений с помощью манифестов Kubernetes, синхронизированных с репозиторием Git. Эти манифесты Kubernetes могут дополнительно включать файл kustomize.yaml .

Дополнительные сведения об использовании см. в следующих ресурсах:

Управление выпусками диаграмм Helm с помощью контроллера Flux Helm

Контроллер Helm Flux устанавливается в составе расширения кластера microsoft.flux. Он позволяет декларативно управлять релизами Helm charts с помощью манифестов Kubernetes, которые вы поддерживаете в репозитории Git.

Дополнительные сведения об использовании см. в следующих ресурсах:

Подсказка

Из-за того, как Helm обрабатывает файлы индексов, обработка диаграмм Helm является дорогой операцией и может иметь высокий объем памяти. В результате согласование большого количества диаграмм Helm одновременно может привести к резким увеличениям использования памяти и OOMKilled ошибкам. По умолчанию контроллер устанавливает ограничение памяти на 1Gi и запросы памяти на 64Mi. Чтобы увеличить это ограничение и запросы из-за большого количества больших сверок диаграмм Helm, выполните следующую команду после установки расширения microsoft.flux:

az k8s-extension update -g <resource-group> -c <cluster-name> -n flux -t connectedClusters --config source-controller.resources.limits.memory=2Gi source-controller.resources.requests.memory=300Mi

Использование источника GitRepository для диаграмм Helm

Если диаграммы Helm хранятся в источнике, который настроен в качестве ресурса GitRepository, вы можете указать, что этот источник нужно использовать для диаграмм Helm, добавив fluxConfigurations в ваш файл HelmRelease.yaml, как показано в следующем примере:

---
apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: somename
  namespace: somenamespace
  annotations:
    clusterconfig.azure.com/use-managed-source: "true"
spec:
  ...

При использовании этой аннотации развернутый HelmRelease обновлён с учётом ссылки на настроенный источник. В настоящее время поддерживается только GitRepository источник.

Обнаружение смещения Helm

Обнаружение дрейфа для выпусков Helm не включено по умолчанию. Начиная с microsoft.flux версии 1.7.5, можно включить обнаружение смещения Helm, выполнив следующую команду:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --name flux --cluster-type <cluster-type> --config helm-controller.detectDrift=true 

Строгая замена переменных после сборки.

Строгая подстановка переменных после сборки доступна начиная с microsoft.flux версии 1.13.1.

Чтобы создать расширение Flux с поддержкой строгой политики подстановки, выполните следующую команду:

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --extension-type microsoft.flux --config kustomize-controller.strict-substitution-mode=true

Чтобы обновить существующее расширение Flux, чтобы включить строгую политику подстановки, выполните следующую команду:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.strict-substitution-mode=true

Вертикальное масштабирование

Поддержка вертикального масштабирования доступна начиная с microsoft.flux версии 1.12.0. В настоящее время поддерживаются только определенные параметры, описанные в документации по вертикальному масштабированию Flux. Другие параметры могут применяться вручную к кластеру.

Чтобы увеличить ограничения ресурсов на контроллерах за пределами текущих ограничений, выполните следующую команду, изменив конкретный тип ресурса и значение по мере необходимости:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.resources.limits.memory=2Gi kustomize-controller.resources.limits.cpu=2000m

Чтобы увеличить количество выверок, которые могут выполняться параллельно, выполните следующую команду:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.concurrent=6 kustomize-controller.requeue-dependency=50s

Чтобы включить сборку в памяти, выполните следующую команду:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config kustomize-controller.enable-in-memory-build=true

Часы Helm OOM

Начиная с microsoft.flux версии 1.7.5], вы можете включить часы Helm OOM. Дополнительные сведения см. в разделе «Включение Helm для обнаружения OOM».

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

Чтобы включить часы OOM, выполните следующую команду:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --name flux --cluster-type <cluster-type> --config helm-controller.outOfMemoryWatch.enabled=true helm-controller.outOfMemoryWatch.memoryThreshold=70 helm-controller.outOfMemoryWatch.interval=700ms

Если значения memoryThreshold не заданы и outOfMemoryWatchпорог памяти по умолчанию имеет значение 95 %, с интервалом, при котором для проверки использования памяти задано значение 500 мс.

Настраиваемые параметры уровня журнала

По умолчанию log-level для контроллеров Flux задано значение info. Начиная с microsoft.flux версии 1.8.3, эти параметры по умолчанию можно изменить с помощью k8s-extension команды следующим образом:

--config helm-controller.log-level=<info/error/debug>
--config source-controller.log-level=<info/error/debug>
--config kustomize-controller.log-level=<info/error/debug>
--config notification-controller.log-level=<info/error/debug>
--config image-automation-controller.log-level=<info/error/debug>
--config image-reflector-controller.log-level=<info/error/debug>

Допустимые значения: debug, info или error. Например, чтобы изменить log-level на source-controller и kustomize-controller, используйте следующую команду:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config source-controller.log-level=error kustomize-controller.log-level=error

Начиная с microsoft.flux версии 1.9.1, fluxconfig-agent и fluxconfig-controller поддерживают уровни журналов info и error (но не debug). Чтобы изменить эти параметры, используйте k8s-extension команду:

--config fluxconfig-agent.log-level=<info/error>
--config fluxconfig-controller.log-level=<info/error>

Например, следующая команда изменяется log-level на error:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config fluxconfig-agent.log-level=error fluxconfig-controller.log-level=error

Настройка аннотаций на подах расширений Flux

При настройке решения, отличного от брандмауэра Azure, сетевые правила и правила для FQDN/приложений требуются для кластера AKS. Начиная с microsoft.flux версии 1.11.1, контроллер Flux теперь может задавать аннотацию kubernetes.azure.com/set-kube-service-host-fqdn в спецификациях своих подов. Эта аннотация позволяет направлять трафик к доменному имени сервера API, даже если присутствует сетевой экран уровня 7, что упрощает процесс развертывания во время установки расширения. Чтобы настроить эту заметку при использовании расширения Flux, используйте следующие команды.

# Create flux extension with annotation

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --extension-type microsoft.flux --config setKubeServiceHostFqdn=true
    
# Update flux extension with annotation

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name flux --config setKubeServiceHostFqdn=true

Идентификация рабочей нагрузки в кластерах Kubernetes с поддержкой Arc и кластерах AKS

Конфигурации Flux можно создавать в кластерах с включенной идентификацией рабочей нагрузки. Конфигурации Flux в кластерах AKS с включенным удостоверением рабочей нагрузки поддерживаются начиная с microsoft.flux версии 1.8.0 и в кластерах с поддержкой Azure Arc с включенным удостоверением рабочей нагрузки , начиная с microsoft.flux версии 1.15.1.

Чтобы создать конфигурации Flux в кластерах, где включено удостоверение личности для рабочих нагрузок, модифицируйте расширение, как показано в следующих шагах.

  1. Получите URL-адрес издателя OIDC для кластера AKS или кластера Kubernetes с поддержкой Arc.

  2. Создайте управляемое удостоверение и запишите его идентификатор клиента и идентификатор клиента-арендатора.

  3. Создайте расширение flux в кластере с помощью следующей команды:

    az k8s-extension create --resource-group <resource_group_name> --cluster-name <aks_cluster_name> --cluster-type managedClusters --name flux --extension-type microsoft.flux --config workloadIdentity.enable=true workloadIdentity.azureClientId=<user_assigned_client_id> workloadIdentity.azureTenantId=<tenant_id>
    
  4. Создайте учетные данные федеративного удостоверения для кластера AKS или кластера Kubernetes с поддержкой Arc. Например:

    # For source-controller
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"source-controller" --audience api://AzureADTokenExchange
    
    # For image-reflector controller if you plan to enable it during extension creation, it is not deployed by default
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"image-reflector-controller" --audience api://AzureADTokenExchange
    
    # For image-automation controller if you plan to enable it during extension creation, it is not deployed by default
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"image-automation-controller" --audience api://AzureADTokenExchange
    
    # For kustomize-controller
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"kustomize-controller" --audience api://AzureADTokenExchange
    
  5. Убедитесь, что настраиваемый ресурс, который должен использовать удостоверение рабочей нагрузки, устанавливает значение .spec.provider в azure в манифесте. Например:

    apiVersion: source.toolkit.fluxcd.io/v1beta2
    kind: HelmRepository
    metadata:
      name: acrrepo
    spec:
      interval: 10m0s
      type: <helm_repository_type>
      url: <helm_repository_link>
      provider: azure
    
  6. Не забудьте предоставить соответствующие разрешения для удостоверения рабочей нагрузки для ресурса, который требуется извлечь из исходного контроллера или контроллера отражателя изображений. Например, если используется реестр контейнеров Azure, убедитесь, что были применены Container Registry Repository Reader (для реестров с поддержкой ABAC) или AcrPull (для реестров, не поддерживающих ABAC).

Использование идентификации рабочей нагрузки в Azure DevOps

Чтобы использовать идентификацию рабочей нагрузки с Azure DevOps, активируйте следующие предварительные условия.

  • Убедитесь, что ваша организация Azure DevOps подключена к Microsoft Entra.
  • Убедитесь, что удостоверение рабочей нагрузки правильно настроено в кластере, для этого используйте инструкции для кластеров AKS или кластеров Kubernetes с поддержкой Arc.
  • Создайте управляемое удостоверение и федеративные учетные данные и включите поддержку удостоверений рабочих нагрузок в модулях контроллера flux, как описано ранее в этом разделе.
  • Добавьте управляемое удостоверение в организацию Azure DevOps в качестве пользователя, чтобы гарантировать, что у него есть необходимые разрешения для доступа к репозиторию Azure DevOps. Для подробных шагов см. использование субъектов-служб и управляемых удостоверений в Azure DevOps.

Затем задайте для поставщика конфигурации gitRepository flux значение Azure, чтобы включить проверку подлинности без учетных данных. Это можно настроить с помощью Bicep, шаблонов ARM или Azure CLI. Например, чтобы задать поставщика с помощью Azure CLI, выполните следующую команду:

az k8s-configuration flux update --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type <cluster-type> --name flux --provider "azure"

Отмена использования SSH-RSA в Azure DevOps

Azure DevOps объявила об отмене SSH-RSA в качестве поддерживаемого метода шифрования для подключения к репозиториям Azure с помощью SSH. При использовании ключей SSH для подключения к репозиториям Azure в конфигурациях Flux рекомендуется перейти к более безопасным ключам RSA-SHA2-256 или RSA-SHA2-512.

При согласовании конфигураций Flux может появиться сообщение об ошибке, указывающее, что ssh-rsa не рекомендуется или не поддерживается. В этом случае обновите алгоритм ключа узла, используемый для установления подключений SSH к репозиториям Azure DevOps из Flux source-controller и image-automation-controller (если включен) с помощью az k8s-extension update команды. Например:

az k8s-extension update --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type <cluster-type> --name flux --config source-controller.ssh-host-key-args="--ssh-hostkey-algos=rsa-sha2-512,rsa-sha2-256"

az k8s-extension update --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type <cluster-type> --name flux --config image-automation-controller.ssh-host-key-args="--ssh-hostkey-algos=rsa-sha2-512,rsa-sha2-256"

Дополнительные сведения о прекращении SSH-RSA Azure DevOps см. в Окончание SSH-RSA поддержки Azure Repos.

Удаление конфигурации и расширения Flux

Используйте следующие команды, чтобы удалить конфигурации Flux и, если требуется, само расширение Flux.

Удалите конфигурации Flux

Следующая команда удаляет fluxConfigurations ресурс в Azure и объекты конфигурации Flux в кластере. Поскольку изначально конфигурация Flux была создана с параметром prune=true для kustomization, все объекты, которые были созданы в кластере на основе манифестов в репозитории Git, удаляются при удалении конфигурации Flux. Однако эта команда не удаляет само расширение Flux.

az k8s-configuration flux delete -g flux-demo-rg -c flux-demo-arc -n cluster-config -t connectedClusters --yes

Удаление расширения кластера Flux

При удалении расширения Flux удаляются как ресурс расширения в Azure, так и объекты Flux в кластере.

Внимание

Перед удалением расширения Flux обязательно удалите все конфигурации Flux в кластере. Удаление расширения без первого удаления конфигураций Flux может оставить кластер в нестабильном состоянии.

Если расширение Flux было создано автоматически при создании конфигурации Flux, имя расширения — flux.

az k8s-extension delete -g flux-demo-rg -c flux-demo-arc -n flux -t connectedClusters --yes

Подсказка

Эти команды используют -t connectedClusters, что является подходящим для кластера Kubernetes с поддержкой Azure Arc. Вместо этого используйте -t managedClusters кластер AKS.

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