Мониторинг состояния и активности GitOps (Flux версии 2)

Чтобы отслеживать состояние и активность, связанные с GitOps с Flux версии 2 в кластерах Kubernetes с поддержкой Azure Arc или кластерах Служба Azure Kubernetes (AKS), у вас есть несколько вариантов:

В этом разделе описаны некоторые способы мониторинга активности и состояния Flux.

Мониторинг конфигураций Flux в портал Azure

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

Просмотр сведений о соответствии кластерам и объектах

Состояние соответствия показывает, соответствует ли текущее состояние кластера требуемому состоянию. Возможные значения:

  • Соответствует требованиям: состояние кластера соответствует требуемому состоянию.
  • Ожидается: обнаружено обновленное требуемое состояние, но это состояние еще не согласовано в кластере.
  • Не соответствует требованиям: текущее состояние не соответствует требуемому состоянию.

Screenshot of cluster compliance and other values in the Azure portal.

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

Screenshot showing detailed conditions for a configuration object.

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

По умолчанию можно фильтровать по пространству имен и имени службы. Вы также можете добавить любой фильтр меток, который вы можете использовать в приложениях, чтобы сузить поиск.

Просмотр состояния конфигурации Flux и сведений

Для каждой конфигурации Flux столбец State указывает, успешно ли создан объект конфигурации Flux в кластере.

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

  • Исходный ИД фиксации для последней синхронизации
  • Метка времени последнего обновления источника
  • Метка времени обновления состояния (указывающая, когда была получена последняя статистика)
  • URL-адрес репозитория и ветвь
  • Ссылки на просмотр различных kustomizations

Screenshot of the Overview page of a Flux configuration in the Azure portal.

Мониторинг состояния и активности GitOps с помощью панелей мониторинга

Мы предоставляем панели мониторинга для мониторинга состояния, соответствия требованиям, потребления ресурсов и выверки для GitOps с flux версии 2. Эти панели мониторинга JSON можно импортировать в Grafana, чтобы вы могли просматривать и анализировать данные в режиме реального времени. Вы также можете настроить оповещения для этой информации.

Чтобы импортировать и использовать эти панели мониторинга, вам потребуется:

  • Один или несколько существующих кластеров Kubernetes с поддержкой Arc или кластеров AKS.
  • Расширение microsoft.flux, установленное в кластерах.
  • По крайней мере одна конфигурация Flux, созданная в кластерах.

Мониторинг состояния развертывания и соответствия требованиям

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

Примечание.

В этих шагах описывается процесс импорта панели мониторинга в Управляемый Grafana Azure. Вы также можете импортировать эту панель мониторинга в любой экземпляр Grafana. С помощью этого параметра необходимо использовать субъект-службу; управляемое удостоверение не поддерживается для подключения к данным за пределами Управляемой Grafana Azure.

  1. Создайте экземпляр Azure Managed Grafana с помощью портал Azure или Azure CLI. Убедитесь, что вы можете получить доступ к Grafana, выбрав свою конечную точку на странице обзора. Для просмотра и редактирования панелей мониторинга требуются по крайней мере разрешения на уровне редактора Grafana. Вы можете проверка доступ, перейдя к элементу управления доступом (IAM) в экземпляре Grafana.

  2. Если вы используете управляемое удостоверение для экземпляра Azure Managed Grafana, выполните следующие действия, чтобы назначить ей роль средства чтения мониторинга в подписках:

    1. В портал Azure перейдите к подписке, которую вы хотите добавить.
    2. Выберите Управление доступом (IAM) .
    3. Выберите Добавить назначение ролей.
    4. Выберите роль средства чтения мониторинга, а затем нажмите кнопку "Далее".
    5. На вкладке "Участники" выберите управляемое удостоверение, а затем выберите "Выбрать участников".
    6. В списке управляемых удостоверений выберите подписку, в которой вы создали экземпляр Azure Managed Grafana. Затем выберите Azure Managed Grafana и имя экземпляра Azure Managed Grafana.
    7. Выберите Проверить и назначить.

    Если вы используете субъект-службу, предоставьте роль средства чтения мониторинга субъекту-службе, который будет использоваться для подключения к источнику данных. Выполните эти же действия, но выберите "Пользователь", "Группа" или "Субъект-служба " на вкладке "Участники ", а затем выберите субъект-службу. (Если вы не используете Управляемый Grafana Azure, необходимо использовать субъект-службу для доступа к подключению к данным.)

  3. Создайте подключение к источнику данных Azure Monitor в экземпляре Azure Managed Grafana. Это подключение позволяет панели мониторинга получать доступ к данным Azure Resource Graph.

  4. Скачайте панель мониторинга развертывания приложений GitOps Flux.

  5. Выполните действия, чтобы импортировать панель мониторинга JSON в Grafana.

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

Screenshot of the Flux Application Deployments Dashboard.

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

Screenshot showing the Flux Extension Deployments Status table in the Application Deployments dashboard.

В таблице состояния соответствия конфигурации Flux перечислены все конфигурации Flux, созданные в кластерах, а также их состояние соответствия. Чтобы просмотреть журналы состояния и ошибок для объектов конфигурации, таких как выпуски Helm и kustomizations, выберите ссылку "Не соответствует требованиям " в столбце ComplianceState .

Screenshot showing the Flux Configuration Compliance Status table in the Application Deployments dashboard.

Количество развертываний расширений Flux по диаграмме состояния показывает количество кластеров на основе их состояния подготовки.

Screenshot of the Flux Extension Deployments by Status pie chart in the Application Deployments dashboard.

На диаграмме "Количество конфигураций Flux по состоянию соответствия требованиям" отображается количество конфигураций Flux на основе их состояния соответствия в отношении исходного репозитория.

Screenshot of the Flux Configuration by Compliance Status chart on the Application Deployments dashboard.

Фильтрация данных панели мониторинга для отслеживания развертываний приложений

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

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

Создание оповещений о сбоях расширения и конфигурации

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

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

  1. В меню навигации слева на панели мониторинга выберите "Оповещения".

  2. Щелкните Правила генерации оповещений.

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

  4. В имени правила добавьте описательное имя. Это имя отображается в списке правил генерации оповещений, и оно будет использоваться в качестве alertname метки для каждого экземпляра оповещения, созданного из этого правила.

  5. В разделе "Задать условие запроса и оповещения":

    • Выберите источник данных. Здесь можно использовать тот же источник данных, который используется для панели мониторинга.

    • Для службы выберите Azure Resource Graph.

    • Выберите подписки из раскрывающегося списка.

    • Введите нужный запрос. Например, для сбоев подготовки или обновления расширений можно ввести следующий запрос:

      kubernetesconfigurationresources
      | where type == "microsoft.kubernetesconfiguration/extensions"
      | extend provisioningState = tostring(properties.ProvisioningState)
      | where provisioningState == "Failed"
      | summarize count() by provisioningState
      

      Или для сбоев состояния соответствия можно ввести следующий запрос:

      kubernetesconfigurationresources
      | where type == "microsoft.kubernetesconfiguration/fluxconfigurations"
      | extend complianceState=tostring(properties.complianceState)
      | where complianceState == "Non-Compliant"
      | summarize count() by complianceState
      
    • В поле "Пороговое значение" выберите тип ввода и задайте пороговое значение 0 для получения оповещений, даже если только одно расширение завершается сбоем в кластере. Пометьте это как условие генерации оповещений.

    Screenshot showing the alert creation process.

  6. Укажите интервал оценки оповещений:

    • Для условия выберите запрос или выражение, чтобы активировать правило генерации оповещений.
    • Для каждой оценки введите частоту оценки в виде нескольких 10 секунд.
    • Чтобы оценить значение, укажите, сколько времени условие должно быть true до создания оповещения.
    • В разделе "Настройка данных и обработка ошибок" укажите, что должно происходить, когда правило генерации оповещений не возвращает данные или возвращает ошибку.
    • Чтобы проверка результаты выполнения запроса, выберите "Предварительный просмотр".
  7. Добавьте расположение хранилища, группу правил и все дополнительные метаданные, которые необходимо связать с правилом.

    • Для папки выберите папку, в которой должно храниться правило.
    • Для группы укажите предопределенную группу.
    • При желании добавьте описание и сводку для настройки сообщений оповещений.
    • При необходимости добавьте URL-адрес Runbook, панель, панель мониторинга и идентификаторы оповещений.
  8. При желании добавьте все пользовательские метки. Затем выберите Сохранить.

Вы также можете настроить точки контактов и настроить политики уведомлений для оповещений.

Мониторинг потребления ресурсов и сверок

Выполните следующие действия, чтобы импортировать панели мониторинга, позволяющие отслеживать потребление ресурсов Flux, выверки, запросы API и состояние примирителя.

  1. Выполните действия, чтобы создать рабочую область Azure Monitor.

  2. Создайте экземпляр Azure Managed Grafana с помощью портал Azure или Azure CLI.

  3. Включите коллекцию метрик Prometheus в кластерах AKS и (или) кластерах Kubernetes с поддержкой Arc, которые необходимо отслеживать.

  4. Настройте агент Azure Monitor, чтобы сломать метрики Управляемого Flux Azure, создав конфигурацию:

    kind: ConfigMap
    apiVersion: v1
    data:
      schema-version:
          #string.used by agent to parse config. supported versions are {v1}. Configs with other schema versions will be rejected by the agent.
        v1
      config-version:
        #string.used by customer to keep track of this config file's version in their source control/repository (max allowed 10 chars, other chars will be truncated)
        ver1
      default-scrape-settings-enabled: |-
        kubelet = true
        coredns = false
        cadvisor = true
        kubeproxy = false
        apiserver = false
        kubestate = true
        nodeexporter = true
        windowsexporter = false
        windowskubeproxy = false
        kappiebasic = true
        prometheuscollectorhealth = false
      # Regex for which namespaces to scrape through pod annotation based scraping.
      # This is none by default. Use '.*' to scrape all namespaces of annotated pods.
      pod-annotation-based-scraping: |-
        podannotationnamespaceregex = "flux-system"
      default-targets-scrape-interval-settings: |-
        kubelet = "30s"
        coredns = "30s"
        cadvisor = "30s"
        kubeproxy = "30s"
        apiserver = "30s"
        kubestate = "30s"
        nodeexporter = "30s"
        windowsexporter = "30s"
        windowskubeproxy = "30s"
        kappiebasic = "30s"
        prometheuscollectorhealth = "30s"
        podannotations = "30s"
    metadata:
      name: ama-metrics-settings-configmap
      namespace: kube-system
    
  5. Скачайте панели мониторинга уровня управления Flux и Flux Cluster Stats.

  6. Свяжите рабочую область Managed Prometheus с экземпляром Managed Grafana. Операция займет всего несколько минут.

  7. Выполните действия, чтобы импортировать эти панели мониторинга JSON в Grafana.

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

На панели мониторинга уровня управления Flux отображаются сведения о потреблении ресурсов состояния, выверках на уровне кластера и запросах API Kubernetes.

Screenshot of the Flux Control Plane dashboard.

На панели мониторинга "Статистика кластера Flux" отображаются сведения о количестве примирителей, а также о состоянии и продолжительности выполнения каждого примирителя.

Screenshot of the Flux Cluster Stats dashboard.

Создание оповещений о проблемах потребления ресурсов и выверки

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

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

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

param azureMonitorWorkspaceName string
param alertReceiverEmailAddress string

param kustomizationLookbackPeriodInMinutes int = 5
param helmReleaseLookbackPeriodInMinutes int = 5
param gitRepositoryLookbackPeriodInMinutes int = 5
param bucketLookbackPeriodInMinutes int = 5
param helmRepoLookbackPeriodInMinutes int = 5
param timeToResolveAlerts string = 'PT10M'
param location string = resourceGroup().location

resource azureMonitorWorkspace 'Microsoft.Monitor/accounts@2023-04-03' = {
  name: azureMonitorWorkspaceName
  location: location
}

resource fluxRuleActionGroup 'Microsoft.Insights/actionGroups@2023-01-01' = {
  name: 'fluxRuleActionGroup'
  location: 'global'
  properties: {
    enabled: true
    groupShortName: 'fluxGroup'
    emailReceivers: [
      {
        name: 'emailReceiver'
        emailAddress: alertReceiverEmailAddress
      }
    ]
  }
}

resource fluxRuleGroup 'Microsoft.AlertsManagement/prometheusRuleGroups@2023-03-01' = {
  name: 'fluxRuleGroup'
  location: location
  properties: {
    description: 'Flux Prometheus Rule Group'
    scopes: [
      azureMonitorWorkspace.id
    ]
    enabled: true
    interval: 'PT1M'
    rules: [
      {
        alert: 'KustomizationNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="Kustomization"}) > 0'
        for: 'PT${kustomizationLookbackPeriodInMinutes}M'
        labels: {
          description: 'Kustomization reconciliation failing for last ${kustomizationLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'Kustomization reconciliation failing for last ${kustomizationLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
      {
        alert: 'HelmReleaseNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="HelmRelease"}) > 0'
        for: 'PT${helmReleaseLookbackPeriodInMinutes}M'
        labels: {
          description: 'HelmRelease reconciliation failing for last ${helmReleaseLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'HelmRelease reconciliation failing for last ${helmReleaseLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
      {
        alert: 'GitRepositoryNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="GitRepository"}) > 0'
        for: 'PT${gitRepositoryLookbackPeriodInMinutes}M'
        labels: {
          description: 'GitRepository reconciliation failing for last ${gitRepositoryLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'GitRepository reconciliation failing for last ${gitRepositoryLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
      {
        alert: 'BucketNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="Bucket"}) > 0'
        for: 'PT${bucketLookbackPeriodInMinutes}M'
        labels: {
          description: 'Bucket reconciliation failing for last ${bucketLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'Bucket reconciliation failing for last ${bucketLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
      {
        alert: 'HelmRepositoryNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="HelmRepository"}) > 0'
        for: 'PT${helmRepoLookbackPeriodInMinutes}M'
        labels: {
          description: 'HelmRepository reconciliation failing for last ${helmRepoLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'HelmRepository reconciliation failing for last ${helmRepoLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
    ]
  }
}

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