Questions fréquentes relatives au profilage GPU pour Azure Kubernetes Service (AKS) (préversion)

Obtenez des réponses aux questions fréquemment posées sur la surveillance des intégrations et du stockage de profils pour le profilage GPU sur Azure Kubernetes Service (AKS). Avant de commencer, configurez le profilage GPU.

Supervision des intégrations

Comment connecter mon propre instance Prometheus à Inspektor Gadget ?

Si vous exécutez votre propre instance de Prometheus au lieu du service managé Azure Monitor pour Prometheus, configurez-la pour collecter les métriques des pods d’Inspektor Gadget.

Inspektor Gadget expose ses métriques au point de terminaison suivant :

Setting Value
Namespace gadget
Port 2224
Path /metrics

Ajoutez une tâche de collecte à votre configuration Prometheus pour détecter les pods et en collecter les métriques :

Tip

Pour les déploiements avec Prometheus Operator, créez un PodMonitor avec l’espace de noms, le sélecteur d’étiquettes, le port et le chemin des métriques équivalents.

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__

Vérifiez la connexion dans l’interface utilisateur de Prometheus sous Status>. La inspektor-gadget tâche doit afficher sa cible sur UP.

Comment visualiser les métriques Inspektor Gadget dans ma propre instance Grafana ?

Vérifiez que votre instance Prometheus est connectée à Grafana en tant que source de données. Ensuite, importez le tableau de bord Inspektor Gadget à partir de la définition JSON suivante :

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

Stockage de profil

Comment utiliser Stockage Blob Azure comme back-end Pyroscope ?

Par défaut, le déploiement de Pyroscope dans l’article de configuration du profilage GPU stocke les profils sur le système de fichiers local. Les données de profilage sont perdues si le pod est recréé. Pour conserver des profils, configurez Pyroscope pour utiliser Stockage Blob Azure avec ID de charge de travail Microsoft Entra.

Exportez les variables requises :

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"

Créer le compte de stockage et le conteneur

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

Créer une identité managée et accorder l’accès au compte de stockage

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

Activer l’identité de la charge de travail et créer des informations d’identification fédérées

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

Le nom du compte de service dans le sujet de l’identifiant fédéré doit correspondre au nom du compte de service utilisé par le déploiement Helm de Pyroscope. Sinon, Pyroscope ne peut pas s'authentifier auprès de Stockage Blob Azure.

Déployer Pyroscope avec le back-end Stockage Blob Azure

Au lieu de la commande Helm dans Activer la visualisation de profil avec Pyroscope, exécutez la commande suivante. Cette configuration utilise Stockage Blob Azure, crée le compte de service et active l’identité de charge de travail sur le 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

Vérifiez que le pod est en cours d’exécution :

kubectl get pods -n gadget pyroscope-0

Continuez avec Connecter Pyroscope à Azure Managed Grafana.

Note

Les clés de valeur Helm peuvent changer entre les versions du graphique. Pour confirmer les clés disponibles pour votre version, exécutez helm show values oci://ghcr.io/grafana/helm-charts/pyroscope --version 1.15.0.