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


Руководство по развертыванию приложений с помощью 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.flux выпустило основную версию 1.0.0. Это включает функцию многотенантности. Если у вас есть конфигурации GitOps Flux версии 2, которые используют предыдущую версию microsoft.flux расширения, можно обновить до последней версии вручную с помощью Azure CLI: az k8s-extension create -g <RESOURCE_GROUP> -c <CLUSTER_NAME> -n flux --extension-type microsoft.flux -t <CLUSTER_TYPE> (используйте -t connectedClusters для кластеров Arc и -t managedClusters для кластеров AKS).

Необходимые компоненты

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

Для кластеров Kubernetes с поддержкой Azure Arc

Для кластеров Служба Azure Kubernetes

  • Кластер AKS на основе MSI, который работает и работает.

    Внимание

    Убедитесь, что кластер AKS создан с помощью MSI (не spN), так как microsoft.flux расширение не будет работать с кластерами AKS на основе субъекта-службы. Для новых кластеров AKS, созданных с az aks createпомощью, кластер по умолчанию основан на MSI. Для уже созданных кластеров на основе имени субъекта-службы, которые необходимо преобразовать в 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 пакеты расширений CLI:k8s-extension

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.
  • Имя кластера flux-demo-arcAzure 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 области с этим руководством см. в необходимых изменениях.
  • Два kustomizations указываются с именами infra и apps. Каждый из них связан с путем в репозитории.
  • Kustomization apps зависит от infra kustomization. (Kustomization infra должно завершиться до apps запуска kustomization.)
  • Задайте prune=true для обоих kustomizations. Этот параметр гарантирует, что объекты, развернутые в кластере Flux, удаляются, если они удалены из репозитория, или если конфигурация Flux или kustomizations удаляются.
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, : podinforedisпространства имен для рабочих нагрузок, описанных в манифестах в репозитории Git.

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

kubectl get namespaces

Пространство flux-system имен содержит объекты расширения Flux:

  • Контроллеры Azure Flux: fluxconfig-agentfluxconfig-controller
  • Контроллеры Flux OSS: source-controller, kustomize-controller, helm-controllernotification-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.enabled false.

В этом примере команда устанавливает 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 требуется ограничение контекста безопасности, отличное отroot, для правильной подготовки модулей pod в кластере. Эти ограничения необходимо добавить в кластер перед развертыванием 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

Контроллер Flux Helm устанавливается в составе microsoft.flux расширения кластера. Он позволяет декларативно управлять выпусками диаграмм Helm с манифестами 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 рамках fluxConfigurations ресурса, можно указать, что настроенный источник должен использоваться в качестве источника диаграмм Helm, добавив clusterconfig.azure.com/use-managed-source: "true" в файл 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 уровней поддержки info и error fluxconfig-controller журналов (но не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

Отмена использования 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".

Настройка заметки в модулях pod расширений Flux

При настройке решения, отличного от Брандмауэр Azure, правила сети и полного доменного имени или приложения требуются для кластера AKS. Начиная с microsoft.flux версии 1.11.1, модули pod контроллера Flux теперь могут задать заметку kubernetes.azure.com/set-kube-service-host-fqdn в спецификациях pod. Это позволяет трафику к доменному имени сервера 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

Удостоверение рабочей нагрузки в кластерах AKS

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

  1. Получите URL-адрес издателя OIDC для кластера.

  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>
    
  4. Установите учетные данные федеративного удостоверения. Например:

    # For source-controller
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${AKS_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 "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:"flux-system":"image-reflector-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 "${AKS_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 AcrPull требуются разрешения.

Удаление конфигурации и расширения 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, так microsoft.flux и объекты расширения 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.

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