Compartir a través de


Supervisión del estado y la actividad de GitOps (Flux v2)

Para supervisar el estado y la actividad relacionados con GitOps con Flux v2 en los clústeres de Kubernetes habilitados para Azure Arc o los clústeres de Azure Kubernetes Service (AKS), tiene varias opciones:

En este tema se describen algunas de las formas en que puede supervisar la actividad y el estado de Flux.

Supervisión de las configuraciones de Flux en Azure Portal

Después de crear configuraciones de Flux en el clúster, puede ver la información de estado en Azure Portal; para ello, vaya a un clúster y seleccione GitOps.

Visualización de detalles sobre el cumplimiento y los objetos del clúster

El estado de Cumplimiento muestra si el estado actual del clúster coincide con el estado deseado. Valores posibles:

  • Compatible: el estado del clúster coincide con el estado deseado.
  • Pendiente: se detectó un estado deseado actualizado, pero ese estado aún no se ha reconciliado en el clúster.
  • No compatible: el estado actual no coincide con el estado deseado.

Recorte de pantalla del cumplimiento del clúster y otros valores en Azure Portal.

Para ayudar a depurar problemas de conciliación de un clúster, seleccione Objetos de configuración. Aquí puede ver los registros de cada uno de los objetos de configuración que Crea Flux para cada configuración de Flux. Seleccione un nombre de objeto para ver sus registros.

Recorte de pantalla que muestra condiciones detalladas para un objeto de configuración.

Para ver los objetos de Kubernetes que se crearon como resultado de las configuraciones de Flux que se aplican, seleccione Cargas de trabajo en la sección Recursos de Kubernetes del menú del servicio del clúster. Aquí puede ver todos los detalles de los recursos creados en el clúster.

De forma predeterminada, puede filtrar por espacio de nombres y nombre de servicio. También puede agregar cualquier filtro de etiqueta que pueda usar en las aplicaciones para ayudar a reducir la búsqueda.

Ver el estado y los detalles de la configuración de Flux

Para cada configuración de Flux, la columna Estado indica si el objeto de configuración flux se creó correctamente en el clúster.

Seleccione cualquier configuración de Flux para ver su página de Información general, incluida la siguiente información:

  • Identificador de confirmación de origen para la última sincronización
  • Marca de tiempo de la actualización de origen más reciente
  • Marca de tiempo de la actualización de estado (que indica cuándo se obtuvieron las estadísticas más recientes)
  • Dirección URL y rama del repositorio
  • Vínculos para ver diferentes personalizaciones

Recorte de pantalla de la página Información general de una configuración de Flux en Azure Portal.

Uso de paneles para supervisar el estado y la actividad de GitOps

Proporcionamos paneles que le ayudarán a supervisar el estado, el cumplimiento, el consumo de recursos y la actividad de conciliación para GitOps con Flux v2. Estos paneles JSON se pueden importar a Grafana para ayudarle a ver y analizar los datos en tiempo real. También puede configurar alertas para esta información.

Para importar y usar estos paneles, necesita:

Supervisión del estado de implementación y cumplimiento

Siga estos pasos para importar paneles que le permiten supervisar la implementación y el estado de la extensión de Flux entre clústeres y el estado de cumplimiento de la configuración de Flux en esos clústeres.

Nota:

En estos pasos se describe el proceso para importar el panel a Azure Managed Grafana. También puede importar este panel a cualquier instancia de Grafana. Con esta opción, se debe usar una entidad de servicio. No se admite la identidad administrada para la conexión de datos fuera de Azure Managed Grafana.

  1. Cree una instancia de Azure Managed Grafana mediante Azure Portal o la CLI de Azure. Asegúrese de que puede acceder a Grafana seleccionando su punto de conexión en la página de Información general. Necesita al menos permisos de nivel de Editor de Grafana para ver y editar paneles. Para comprobar el acceso, vaya a Control de acceso (IAM) en la instancia de Grafana.

  2. Si usa una identidad administrada para la instancia de Azure Managed Grafana, siga estos pasos para asignarle el rol de lector de supervisión en la suscripción donde creó la instancia de Azure Managed Grafana:

    1. En Azure Portal, vaya a la suscripción que desea agregar.
    2. Seleccione Access Control (IAM) .
    3. Seleccione Agregar asignación de roles.
    4. Seleccione el rol Lector de supervisión y, a continuación, seleccione Siguiente.
    5. En la pestaña Miembros, seleccione Identidad administraday, después, elija Seleccionar miembros.
    6. En la lista Identidad administrada, seleccione la suscripción, luego seleccione Azure Managed Grafana y el nombre de su instancia de Azure Managed Grafana.
    7. Seleccione Revisar y asignar.

    Si usa una entidad de servicio, conceda el rol Lector de supervisión a la entidad de servicio que usará para la conexión del origen de datos. Siga estos mismos pasos, pero seleccione Usuario, grupo o entidad de servicio en la pestaña Miembros y, a continuación, seleccione la entidad de servicio. (Si no usa Azure Managed Grafana, debe usar una entidad de servicio para el acceso a la conexión de datos).

  3. Cree la conexión del origen de datos de Azure Monitor en la instancia de Azure Managed Grafana. Esta conexión permite al panel acceder a los datos de Azure Resource Graph.

  4. Descargue el panel GitOps Flux - Implementaciones de aplicaciones.

  5. Siga los pasos para importar el panel JSON a Grafana.

Después de importar el panel, muestra información de los clústeres que está supervisando, con varios paneles que proporcionan detalles. Para más información sobre un elemento, seleccione el vínculo para visitar Azure Portal, donde puede encontrar información sobre configuraciones, errores y registros.

Recorte de pantalla del panel de implementaciones de aplicaciones de Flux.

En la tabla Estado de implementación de la extensión Flux se enumeran todos los clústeres en los que se implementa la extensión Flux, junto con el estado de implementación actual.

Recorte de pantalla que muestra la tabla Estado de implementaciones de extensiones de Flux en el panel Implementaciones de aplicaciones.

En la tabla Estado de cumplimiento de configuración de Flux se enumeran todas las configuraciones de Flux creadas en los clústeres, junto con su estado de cumplimiento. Para ver los registros de estado y errores de objetos de configuración, como versiones de Helm y personalizaciones, seleccione el vínculo No compatible de la columna ComplianceState.

Recorte de pantalla que muestra la tabla Estado de cumplimiento de configuración de Flux en el panel Implementaciones de aplicaciones.

El gráfico Recuento de implementaciones de extensiones de Flux por estado muestra el recuento de clústeres, en función de su estado de aprovisionamiento.

Recorte de pantalla del gráfico circular Implementaciones de extensiones de Flux por estado en el panel Implementaciones de aplicaciones.

El gráfico Recuento de configuraciones de Flux por estado de cumplimiento muestra el recuento de configuraciones de Flux, en función de su estado de cumplimiento con respecto al repositorio de origen.

Recorte de pantalla del gráfico Configuración de Flux por estado de cumplimiento en el panel Implementaciones de aplicaciones.

Filtrar los datos del panel para realizar un seguimiento de las implementaciones de aplicaciones

Puede filtrar los datos en el panel de GitOps Flux - Implementaciones de aplicación para cambiar la información que se muestra. Por ejemplo, puede mostrar datos solo para determinadas suscripciones o grupos de recursos, o limitar los datos a un clúster determinado. Para ello, seleccione la opción de filtro en las listas desplegables de nivel superior o en cualquier encabezado de columna de las tablas.

Por ejemplo, en la tabla Estado de cumplimiento de configuración de Flux, puede seleccionar una confirmación específica en la columna SourceLastSyncCommit. Al hacerlo, puede realizar un seguimiento del estado de una implementación de configuración en todos los clústeres afectados por esa confirmación.

Creación de alertas para errores de extensión y configuración

Después de importar el panel como se describe en la sección anterior, puede configurar alertas. Estas alertas le notifican cuando las extensiones de Flux o las configuraciones de Flux experimentan errores.

Siga estos pasos para crear una alerta. Se proporcionan consultas de ejemplo para detectar errores de aprovisionamiento de extensiones o de actualización de extensiones, o para detectar errores de estado de cumplimiento.

  1. En el menú de navegación izquierdo del panel, seleccione Alertas.

  2. Selección de Reglas de alerta.

  3. Seleccione + Crear regla de alertas. Se abre la página nueva regla de alertas, con la opción Alertas administradas de Grafana seleccionada de forma predeterminada.

  4. En Nombre de regla, agregue un nombre descriptivo. Este nombre se muestra en la lista de reglas de alertas y se usa como etiqueta de alertname para cada instancia de alerta creada a partir de esta regla.

  5. En Establecer una consulta y una condición de alerta:

    • Seleccionar un origen de datos. Aquí se puede usar el mismo origen de datos que se usa para el panel.

    • En Servicio, seleccione Azure Resource Graph.

    • Seleccione las suscripciones en la lista desplegable.

    • Escriba la consulta que desea usar. Por ejemplo, para errores de aprovisionamiento o actualización de extensiones, puede escribir esta consulta:

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

      O bien, para errores de estado de cumplimiento, puede escribir esta consulta:

      kubernetesconfigurationresources
      | where type == "microsoft.kubernetesconfiguration/fluxconfigurations"
      | extend complianceState=tostring(properties.complianceState)
      | where complianceState == "Non-Compliant"
      | summarize count() by complianceState
      
    • En cuadro Umbral, seleccione A para el tipo de entrada y establezca el umbral en 0 para recibir alertas incluso si solo se produce un error en una extensión en el clúster. Marque esto como la Condición de alerta.

    Recorte de pantalla que muestra el proceso de creación de alerta.

  6. Especifique el intervalo de evaluación de alertas:

    • En Condición, seleccione la consulta o expresión para desencadenar la regla de alerta.
    • En Evaluar cada, escriba la frecuencia de evaluación como múltiplo de 10 segundos.
    • En Evaluar para, especifique cuánto tiempo debe cumplirse la condición antes de crear la alerta.
    • En Configurar ningún dato y control de errores, indique lo que debe ocurrir cuando la regla de alerta no devuelve datos ni devuelve un error.
    • Para comprobar los resultados de la ejecución de la consulta, seleccione Vista previa.
  7. Agregue la ubicación de almacenamiento, el grupo de reglas y cualquier otro metadato que desee asociar a la regla.

    • En Carpeta, seleccione la carpeta donde se debe almacenar la regla.
    • En Grupo, especifique un grupo predefinido.
    • Si lo desea, agregue una descripción y un resumen para personalizar los mensajes de alerta.
    • Agregue los identificadores de dirección URL, panel, panel y alertas de runbook según sea necesario.
  8. Si lo desea, agregue etiquetas personalizadas. Después, seleccione Guardar.

También puede configurar puntos de contacto y directivas de notificación para las alertas.

Supervisión del consumo de recursos y las reconciliaciones

Siga estos pasos para importar paneles que le permiten supervisar el consumo de recursos de Flux, las reconciliaciones, las solicitudes de API y el estado del reconciliador.

  1. Siga los pasos para crear un área de trabajo de Azure Monitor.

  2. Cree una instancia de Azure Managed Grafana mediante Azure Portal o la CLI de Azure.

  3. Habilite la recopilación de métricas de Prometheus en los clústeres de AKS o en los clústeres de Kubernetes habilitados para Arc que quiera supervisar.

  4. Configure el agente de Azure Monitor para extraer las métricas de Azure Managed Flux mediante la creación de un mapa de configuración:

    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. Descargue los paneles Plano de control de Flux y Estadísticas de clúster de Flux.

  6. Vincule el área de trabajo de Prometheus administrado a la instancia de Grafana administrado. Este proceso tarda unos minutos en completarse.

  7. Siga los pasos para importar estos paneles JSON a Grafana.

Después de importar los paneles, muestran información de los clústeres que está supervisando. Para mostrar información solo para un clúster o espacio de nombres determinado, use los filtros cerca de la parte superior de cada panel.

El panel Plano de control de Flux muestra detalles sobre el consumo de recursos de estado, las reconciliaciones en el nivel de clúster y las solicitudes de API de Kubernetes.

Recorte de pantalla del panel Plano de control de Flux.

El panel Estadísticas de clúster de Flux muestra detalles sobre el número de reconciliadores, junto con el estado y la duración de ejecución de cada reconciliador.

Recorte de pantalla del panel Estadísticas de clúster de Flux.

Creación de alertas para problemas de conciliación y consumo de recursos

Después de importar el panel como se describe en la sección anterior, puede configurar alertas. Estas alertas le notifican los problemas de conciliación y consumo de recursos que pueden requerir atención.

Para habilitar estas alertas, implemente una plantilla de Bicep similar a la que se muestra aquí. Las reglas de alerta de esta plantilla son ejemplos que se pueden modificar según sea necesario.

Después de descargar la plantilla de Bicep y realizar los cambios, siga estos pasos para implementar la plantilla.

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

Pasos siguientes