Status en activiteit van GitOps (Flux v2) bewaken

Als u de status en activiteit met betrekking tot GitOps wilt bewaken met Flux v2 in uw Kubernetes-clusters met Azure Arc of AKS-clusters (Azure Kubernetes Service), hebt u verschillende opties:

  • Gebruik Azure Portal om Flux-configuraties en -resources op afzonderlijke clusters te bewaken.
  • Gebruik een Grafana-dashboard om de implementatie- en nalevingsstatus te bewaken.
  • Gebruik de dashboards Flux Control Plane en Flux Cluster Stats om het verbruik en afstemming van resources te bewaken.
  • Schakel Prometheus-scraping uit clusters in en maak uw eigen dashboards met behulp van de gegevens in de Azure Monitor-werkruimte.
  • Waarschuwingen maken in Azure Monitor met behulp van de gegevens die beschikbaar zijn via Prometheus-scraping.

In dit onderwerp worden enkele manieren beschreven waarop u uw Flux-activiteit en -status kunt bewaken.

Flux-configuraties bewaken in Azure Portal

Nadat u Flux-configuraties in uw cluster hebt gemaakt, kunt u statusinformatie bekijken in Azure Portal door naar een cluster te navigeren en GitOps te selecteren.

Details over clustercompatibiliteit en -objecten weergeven

De nalevingsstatus geeft aan of de huidige status van het cluster overeenkomt met de gewenste status. Mogelijke waarden:

  • Compatibel: de status van het cluster komt overeen met de gewenste status.
  • In behandeling: Er is een bijgewerkte gewenste status gedetecteerd, maar die status is nog niet afgestemd op het cluster.
  • Niet compatibel: de huidige status komt niet overeen met de gewenste status.

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

Als u problemen met afstemming voor een cluster wilt oplossen, selecteert u Configuratieobjecten. Hier kunt u logboeken bekijken van elk van de configuratieobjecten die Flux maakt voor elke Flux-configuratie. Selecteer een objectnaam om de logboeken ervan weer te geven.

Screenshot showing detailed conditions for a configuration object.

Als u de Kubernetes-objecten wilt weergeven die zijn gemaakt als gevolg van de toegepaste Flux-configuraties, selecteert u Workloads in de sectie Kubernetes-resources van het linkernavigatiedeelvenster van het cluster. Hier kunt u alle details bekijken van alle resources die zijn gemaakt op het cluster.

Standaard kunt u filteren op naamruimte en servicenaam. U kunt ook elk labelfilter toevoegen dat u mogelijk in uw toepassingen gebruikt om de zoekopdracht te verfijnen.

Configuratiestatus en details van Flux weergeven

Voor elke Flux-configuratie geeft de kolom Status aan of het Flux-configuratieobject is gemaakt op het cluster.

Selecteer een Flux-configuratie om de overzichtspagina te bekijken, inclusief de volgende informatie:

  • Id van brondoorvoering voor de laatste synchronisatie
  • Tijdstempel van de meest recente bronupdate
  • Tijdstempel van statusupdate (die aangeeft wanneer de meest recente statistieken zijn verkregen)
  • URL en vertakking van opslagplaats
  • Koppelingen om verschillende kustomisaties weer te geven

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

Dashboards gebruiken om de GitOps-status en -activiteit te bewaken

We bieden dashboards waarmee u de status, naleving, resourceverbruik en afstemmingsactiviteit voor GitOps kunt bewaken met Flux v2. Deze JSON-dashboards kunnen worden geïmporteerd in Grafana, zodat u uw gegevens in realtime kunt bekijken en analyseren. U kunt ook waarschuwingen voor deze informatie instellen.

Als u deze dashboards wilt importeren en gebruiken, hebt u het volgende nodig:

  • Een of meer bestaande Kubernetes-clusters met Arc of AKS-clusters.
  • De extensie microsoft.flux die op de clusters is geïnstalleerd.
  • Ten minste één Flux-configuratie die op de clusters is gemaakt.

Implementatie- en nalevingsstatus bewaken

Volg deze stappen om dashboards te importeren waarmee u de implementatie en status van flux-extensies in clusters en de nalevingsstatus van de Flux-configuratie op deze clusters kunt bewaken.

Notitie

In deze stappen wordt het proces beschreven voor het importeren van het dashboard in Azure Managed Grafana. U kunt dit dashboard ook importeren in een Grafana-exemplaar. Met deze optie moet een service-principal worden gebruikt; beheerde identiteit wordt niet ondersteund voor gegevensverbindingen buiten Azure Managed Grafana.

  1. Maak een Azure Managed Grafana-exemplaar met behulp van Azure Portal of Azure CLI. Zorg ervoor dat u toegang hebt tot Grafana door het eindpunt te selecteren op de pagina Overzicht. U hebt ten minste machtigingen op grafana-editorniveau nodig om dashboards weer te geven en te bewerken. U kunt uw toegang controleren door naar Toegangsbeheer (IAM) te gaan op het Grafana-exemplaar.

  2. Als u een beheerde identiteit gebruikt voor het Azure Managed Grafana-exemplaar, volgt u deze stappen om de rol Bewakingslezer toe te wijzen aan het abonnement(en):

    1. Navigeer in Azure Portal naar het abonnement dat u wilt toevoegen.
    2. Klik op Toegangsbeheer (IAM) .
    3. Selecteer Roltoewijzing toevoegen.
    4. Selecteer de rol Bewakingslezer en selecteer vervolgens Volgende.
    5. Selecteer beheerde identiteit op het tabblad Leden en kies Leden selecteren.
    6. Selecteer in de lijst met beheerde identiteiten het abonnement waarin u uw Azure Managed Grafana-exemplaar hebt gemaakt. Selecteer vervolgens Azure Managed Grafana en de naam van uw Azure Managed Grafana-exemplaar.
    7. Selecteer Beoordelen en toewijzen.

    Als u een service-principal gebruikt, verleent u de rol Bewakingslezer aan de service-principal die u gaat gebruiken voor uw gegevensbronverbinding. Volg dezelfde stappen, maar selecteer Gebruiker, groep of service-principal op het tabblad Leden en selecteer vervolgens uw service-principal. (Als u azure Managed Grafana niet gebruikt, moet u een service-principal gebruiken voor toegang tot gegevensverbindingen.)

  3. Maak de Azure Monitor-gegevensbronverbinding in uw Azure Managed Grafana-exemplaar. Met deze verbinding heeft het dashboard toegang tot Azure Resource Graph-gegevens.

  4. Download het GitOps Flux - Application Deployments-dashboard.

  5. Volg de stappen om het JSON-dashboard te importeren in Grafana.

Nadat u het dashboard hebt geïmporteerd, wordt er informatie weergegeven uit de clusters die u bewaakt, met verschillende deelvensters met details. Voor meer informatie over een item selecteert u de koppeling om naar Azure Portal te gaan, waar u meer informatie kunt vinden over configuraties, fouten en logboeken.

Screenshot of the Flux Application Deployments Dashboard.

De tabel Implementatiestatus van Flux-extensie bevat alle clusters waarin de Flux-extensie wordt geïmplementeerd, samen met de huidige implementatiestatus.

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

De tabel Nalevingsstatus van Flux-configuratie bevat alle Flux-configuraties die zijn gemaakt op de clusters, samen met hun nalevingsstatus. Als u status- en foutlogboeken wilt zien voor configuratieobjecten zoals Helm-releases en kustomisaties, selecteert u de koppeling Niet-compatibel in de kolom ComplianceState .

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

In het diagram Aantal Flux-uitbreidingsimplementaties per status ziet u het aantal clusters op basis van de inrichtingsstatus.

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

In het diagram Aantal Flux-configuraties per nalevingsstatus ziet u het aantal Flux-configuraties op basis van hun nalevingsstatus met betrekking tot de bronopslagplaats.

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

Dashboardgegevens filteren om toepassingsimplementaties bij te houden

U kunt gegevens filteren in het GitOps Flux - Application Deployments-dashboard om de weergegeven informatie te wijzigen. U kunt bijvoorbeeld alleen gegevens weergeven voor bepaalde abonnementen of resourcegroepen, of gegevens beperken tot een bepaald cluster. Hiervoor selecteert u de filteroptie in de vervolgkeuzelijsten op het hoogste niveau of in een kolomkop in de tabellen.

In de tabel Nalevingsstatus van Flux-configuratie kunt u bijvoorbeeld een specifieke doorvoering selecteren in de kolom SourceLastSyncCommit . Hierdoor kunt u de status van een configuratie-implementatie bijhouden voor alle clusters die worden beïnvloed door die doorvoering.

Waarschuwingen maken voor extensie- en configuratiefouten

Nadat u het dashboard hebt geïmporteerd zoals beschreven in de vorige sectie, kunt u waarschuwingen instellen. Deze waarschuwingen melden u wanneer Flux-extensies of Flux-configuraties fouten ondervinden.

Volg de onderstaande stappen om een waarschuwing te maken. Voorbeeldquery's worden gegeven voor het detecteren van extensie-inrichtings- of extensie-upgradefouten, of voor het detecteren van nalevingsstatusfouten.

  1. Selecteer waarschuwingen in het linkernavigatiemenu van het dashboard.

  2. Selecteer Waarschuwingsregels.

  3. Selecteer + Waarschuwingsregel maken. De pagina nieuwe waarschuwingsregel wordt geopend, waarbij de optie voor beheerde grafana-waarschuwingen standaard is geselecteerd.

  4. Voeg in regelnaam een beschrijvende naam toe. Deze naam wordt weergegeven in de lijst met waarschuwingsregels en wordt gebruikt als label alertname voor elk waarschuwingsexemplaren dat op basis van deze regel wordt gemaakt.

  5. Onder Een query en waarschuwingsvoorwaarde instellen:

    • Een gegevensbron selecteren. Dezelfde gegevensbron die voor het dashboard wordt gebruikt, kan hier worden gebruikt.

    • Selecteer Azure Resource Graph voor Service.

    • Selecteer de abonnementen in de vervolgkeuzelijst.

    • Voer de query in die u wilt gebruiken. Voor het inrichten van extensies of upgradefouten kunt u bijvoorbeeld deze query invoeren:

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

      Of voor mislukte nalevingsstatussen kunt u deze query invoeren:

      kubernetesconfigurationresources
      | where type == "microsoft.kubernetesconfiguration/fluxconfigurations"
      | extend complianceState=tostring(properties.complianceState)
      | where complianceState == "Non-Compliant"
      | summarize count() by complianceState
      
    • Voor het vak Drempelwaarde selecteert u A voor invoertype en stelt u de drempelwaarde in op 0 om waarschuwingen te ontvangen, zelfs als slechts één extensie op het cluster mislukt. Markeer deze als waarschuwingsvoorwaarde.

    Screenshot showing the alert creation process.

  6. Geef het evaluatieinterval voor waarschuwingen op:

    • Selecteer voor Voorwaarde de query of expressie om de waarschuwingsregel te activeren.
    • Voer voor Elke evaluatie de evaluatiefrequentie in als een veelvoud van 10 seconden.
    • Geef voor Evalueren op hoe lang de voorwaarde waar moet zijn voordat de waarschuwing wordt gemaakt.
    • Geef in Configure no data and error handling aan wat er moet gebeuren wanneer de waarschuwingsregel geen gegevens retourneert of een fout retourneert.
    • Als u de resultaten van het uitvoeren van de query wilt controleren, selecteert u Voorbeeld.
  7. Voeg de opslaglocatie, regelgroep en eventuele aanvullende metagegevens toe die u aan de regel wilt koppelen.

    • Selecteer voor Map de map waarin de regel moet worden opgeslagen.
    • Geef voor Groep een vooraf gedefinieerde groep op.
    • Voeg desgewenst een beschrijving en samenvatting toe om waarschuwingsberichten aan te passen.
    • Voeg indien nodig runbook-URL, deelvenster, dashboard en waarschuwings-id's toe.
  8. Voeg desgewenst aangepaste labels toe. Selecteer vervolgens Opslaan.

U kunt ook contactpunten configureren en meldingsbeleid voor uw waarschuwingen configureren.

Resourceverbruik en afstemmingen bewaken

Volg deze stappen om dashboards te importeren waarmee u het verbruik van Flux-resources, afstemmingen, API-aanvragen en de afstemmingsstatus kunt bewaken.

  1. Volg de stappen om een Azure Monitor-werkruimte te maken.

  2. Maak een Azure Managed Grafana-exemplaar met behulp van Azure Portal of Azure CLI.

  3. Schakel prometheus-verzameling metrische gegevens in op de AKS-clusters en/of Kubernetes-clusters met Arc die u wilt bewaken.

  4. Configureer de Azure Monitor-agent om de metrische gegevens van Azure Managed Flux te scrapen door een configmap te maken:

    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. Download de dashboards Flux Control Plane en Flux Cluster Stats .

  6. Koppel de beheerde Prometheus-werkruimte aan het beheerde Grafana-exemplaar. Dit duurt enkele minuten.

  7. Volg de stappen om deze JSON-dashboards te importeren in Grafana.

Nadat u de dashboards hebt geïmporteerd, worden gegevens weergegeven uit de clusters die u bewaakt. Als u alleen informatie voor een bepaald cluster of naamruimte wilt weergeven, gebruikt u de filters boven aan elk dashboard.

Het dashboard Flux Control Plane toont details over het verbruik van statusresources, afstemmingen op clusterniveau en Kubernetes-API-aanvragen.

Screenshot of the Flux Control Plane dashboard.

Het dashboard Flux Cluster Stats toont details over het aantal afstemmingsparameters, samen met de status en uitvoeringsduur van elke afstemmingsroutine.

Screenshot of the Flux Cluster Stats dashboard.

Waarschuwingen maken voor problemen met resourceverbruik en afstemming

Nadat u het dashboard hebt geïmporteerd zoals beschreven in de vorige sectie, kunt u waarschuwingen instellen. Met deze waarschuwingen wordt u op de hoogte gesteld van problemen met resourceverbruik en afstemming die mogelijk aandacht vereisen.

Als u deze waarschuwingen wilt inschakelen, implementeert u een Bicep-sjabloon die vergelijkbaar is met de sjabloon die hier wordt weergegeven. De waarschuwingsregels in deze sjabloon zijn voorbeelden die indien nodig kunnen worden gewijzigd.

Nadat u de Bicep-sjabloon hebt gedownload en uw wijzigingen hebt aangebracht, volgt u deze stappen om de sjabloon te implementeren.

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
          }
        ]
      }
    ]
  }
}

Volgende stappen