Preguntas más frecuentes sobre la generación de perfiles de GPU para Azure Kubernetes Service (AKS) (versión preliminar)

Obtenga respuestas a las preguntas más frecuentes sobre la supervisión de integraciones y el almacenamiento de perfiles para la generación de perfiles de GPU en Azure Kubernetes Service (AKS). Antes de empezar, configure la generación de perfiles de GPU.

Integraciones de monitorización

¿Cómo puedo conectar mi propia instancia de Prometheus a Inspektor Gadget?

Si ejecutas tu propia instancia de Prometheus en lugar del servicio administrado de Azure Monitor para Prometheus, configúrala para recopilar métricas de los pods de Inspektor Gadget.

Inspektor Gadget expone sus métricas en el siguiente punto de conexión:

Setting Value
Namespace gadget
Puerto 2224
Ruta /metrics

Añade una tarea de recopilación a tu configuración de Prometheus para detectar y recopilar datos de los pods:

Tip

Para las implementaciones de Prometheus Operator, cree un PodMonitor con el espacio de nombres equivalente, el selector de etiquetas, el puerto y la ruta de métricas correspondientes.

scrape_configs:
  - job_name: "inspektor-gadget"
    kubernetes_sd_configs:
      - role: pod
        namespaces:
          names:
            - gadget
    relabel_configs:
      # Only keep pods with the k8s-app=gadget label.
      - source_labels: [__meta_kubernetes_pod_label_k8s_app]
        action: keep
        regex: gadget

      # Set the metrics path.
      - target_label: __metrics_path__
        replacement: /metrics

      # Set the metrics port.
      - source_labels: [__address__]
        action: replace
        regex: ([^:]+)(?::\d+)?
        replacement: $1:2224
        target_label: __address__

Compruebe la conexión en la interfaz de usuario de Prometheus en Estado>Objetivos. La inspektor-gadget tarea debe mostrar su destino como UP.

¿Cómo se visualizan las métricas de Inspektor Gadget en mi propia instancia de Grafana?

Asegúrese de que la instancia de Prometheus esté conectada a Grafana como origen de datos. A continuación, importe el panel Inspektor Gadget desde la siguiente definición JSON:

https://raw.githubusercontent.com/inspektor-gadget/grafana-dashboards/refs/heads/main/dashboards/gpu-observability/AdvancedGPUObservability.json

Almacenamiento de perfiles

¿Cómo uso Azure Blob Storage como back-end de Pyroscope?

De forma predeterminada, la implementación de Pyroscope en el artículo configuración de generación de perfiles de GPU almacena perfiles en el sistema de archivos local. Los datos de generación de perfiles se pierden si se vuelve a crear el pod. Para conservar perfiles, configure Pyroscope para usar Azure Blob Storage con Id. de carga de trabajo de Microsoft Entra.

Exporte las variables necesarias:

export RESOURCE_GROUP="<your-resource-group>"
export AKS_CLUSTER="<your-aks-cluster-name>"
export LOCATION="<your-aks-cluster-location>"
export BLOB_STORAGE_NAME="<your-storage-account-name>"

export BLOB_STORAGE_CONTAINER="pyroscope-blob-storage"
export PYROSCOPE_IDENTITY="pyroscope-id"
export PYROSCOPE_SERVICE_ACCOUNT="pyroscope-sa"
export PYROSCOPE_FEDERATED_CREDS="pyroscope-federated-creds"

Creación de una cuenta de almacenamiento y un contenedor

az storage account create \
  --name "$BLOB_STORAGE_NAME" \
  --resource-group "$RESOURCE_GROUP" \
  --location "$LOCATION" \
  --sku Standard_ZRS \
  --kind StorageV2 \
  --min-tls-version TLS1_2 \
  --allow-blob-public-access false \
  --output none

az storage container create \
  --name "$BLOB_STORAGE_CONTAINER" \
  --account-name "$BLOB_STORAGE_NAME" \
  --auth-mode login \
  --output none

Creación de una identidad administrada y concesión de acceso a la cuenta de almacenamiento

az identity create \
  --name "$PYROSCOPE_IDENTITY" \
  --resource-group "$RESOURCE_GROUP" \
  --location "$LOCATION" \
  --output none

IDENTITY_CLIENT_ID=$(az identity show \
  --name "$PYROSCOPE_IDENTITY" \
  --resource-group "$RESOURCE_GROUP" \
  --query 'clientId' \
  --output tsv)

SUBSCRIPTION_ID=$(az account show --query id --output tsv)

# Restrict the role assignment scope to the storage account.
STORAGE_SCOPE="/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RESOURCE_GROUP}/providers/Microsoft.Storage/storageAccounts/${BLOB_STORAGE_NAME}"

az role assignment create \
  --assignee "$IDENTITY_CLIENT_ID" \
  --role "Storage Blob Data Contributor" \
  --scope "$STORAGE_SCOPE" \
  --output none

Habilite la identidad de carga de trabajo y cree credenciales federadas

az aks update \
  --name "$AKS_CLUSTER" \
  --resource-group "$RESOURCE_GROUP" \
  --enable-oidc-issuer \
  --enable-workload-identity \
  --output none

OIDC_ISSUER=$(az aks show \
  --name "$AKS_CLUSTER" \
  --resource-group "$RESOURCE_GROUP" \
  --query 'oidcIssuerProfile.issuerUrl' \
  --output tsv)

az identity federated-credential create \
  --name "$PYROSCOPE_FEDERATED_CREDS" \
  --identity-name "$PYROSCOPE_IDENTITY" \
  --resource-group "$RESOURCE_GROUP" \
  --issuer "$OIDC_ISSUER" \
  --subject "system:serviceaccount:gadget:${PYROSCOPE_SERVICE_ACCOUNT}" \
  --audiences "api://AzureADTokenExchange" \
  --output none

Important

El nombre de la cuenta de servicio en el sujeto de las credenciales federadas debe coincidir con el nombre de la cuenta de servicio utilizada por la versión de Helm de Pyroscope. De lo contrario, Pyroscope no se puede autenticar en Azure Blob Storage.

Implementación de Pyroscope con el back-end de Azure Blob Storage

En lugar del comando de Helm en Habilitar visualización de perfiles con Pyroscope, ejecute el siguiente comando. Esta configuración usa Azure Blob Storage, crea la cuenta de servicio y habilita la identidad de carga de trabajo en el pod Pyroscope.

helm install pyroscope -n gadget \
  oci://ghcr.io/grafana/helm-charts/pyroscope \
  --version 1.15.0 \
  --set pyroscope.image.repository=grafana/pyroscope \
  --set-string pyroscope.image.tag=1.15.0 \
  --set pyroscope.replicaCount=1 \
  --set pyroscope.structuredConfig.self_profiling.disable_push=true \
  --set pyroscope.structuredConfig.storage.backend=azure \
  --set-string pyroscope.structuredConfig.storage.azure.account_name="$BLOB_STORAGE_NAME" \
  --set-string pyroscope.structuredConfig.storage.azure.container_name="$BLOB_STORAGE_CONTAINER" \
  --set pyroscope.serviceAccount.create=true \
  --set-string pyroscope.serviceAccount.name="$PYROSCOPE_SERVICE_ACCOUNT" \
  --set-string pyroscope.serviceAccount.annotations."azure\.workload\.identity/client-id"="$IDENTITY_CLIENT_ID" \
  --set-string pyroscope.podLabels."azure\.workload\.identity/use"=true \
  --set pyroscope.service.type=LoadBalancer \
  --set pyroscope.service.port=4040 \
  --set-string pyroscope.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-internal"=true \
  --set-string pyroscope.service.annotations."service\.beta\.kubernetes\.io/azure-pls-create"=true \
  --set-string pyroscope.service.annotations."service\.beta\.kubernetes\.io/azure-pls-name"=pyroscope-pls \
  --set-string pyroscope.service.annotations."service\.beta\.kubernetes\.io/azure-pls-proxy-protocol"=false \
  --set-string pyroscope.service.annotations."service\.beta\.kubernetes\.io/azure-pls-visibility"='*' \
  --set alloy.enabled=false \
  --set minio.enabled=false

Comprueba que el pod se está ejecutando:

kubectl get pods -n gadget pyroscope-0

Continúe con Conectar pyroscopio a Azure Managed Grafana.

Note

Las claves de valor de Helm pueden cambiar entre las versiones del gráfico. Para confirmar las claves disponibles para la versión, ejecute helm show values oci://ghcr.io/grafana/helm-charts/pyroscope --version 1.15.0.