Häufig gestellte Fragen zur GPU-Profilerstellung für Azure Kubernetes Service (AKS) (Vorschau)

Erhalten Sie Antworten auf häufig gestellte Fragen zur Überwachung von Integrationen und Profilspeicher für GPU-Profilerstellung auf Azure Kubernetes Service (AKS). Bevor Sie beginnen, richten Sie die GPU-Profilerstellung ein.

Überwachen von Integrationen

Wie verbinde ich meine eigene Prometheus-Instanz mit dem Inspektor Gadget?

Wenn Sie Ihre eigene Prometheus-Instanz anstelle des verwalteten Azure Monitor-Diensts für Prometheus ausführen, konfigurieren Sie sie so, dass Metriken von den Inspektor Gadget-Pods erfasst werden.

Inspektor Gadget macht seine Metriken am folgenden Endpunkt verfügbar:

Setting Wert
Namespace gadget
Hafen 2224
Pfad /metrics

Fügen Sie Ihrer Prometheus-Konfiguration einen Scrape-Job hinzu, um die Pods zu erkennen und zu scrapen:

Tip

Erstellen Sie für Bereitstellungen mit dem Prometheus Operator ein PodMonitor mit dem entsprechenden Namespace, Port und Metrikpfad sowie der entsprechenden Bezeichnungsauswahl.

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__

Überprüfen Sie die Verbindung in Ihrer Prometheus-Benutzeroberfläche unter "Statusziele>". Der inspektor-gadget Job sollte als Ziel UP anzeigen.

Wie visualisiere ich Inspektor Gadget-Metriken in meiner eigenen Grafana-Instanz?

Stellen Sie sicher, dass Ihre Prometheus-Instanz als Datenquelle mit Grafana verbunden ist. Importieren Sie dann das Inspektor Gadget-Dashboard aus der folgenden JSON-Definition:

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

Profilspeicherung

Wie verwende ich Azure Blob Storage als Pyroscope-Back-End?

Standardmäßig speichert die Pyroscope-Bereitstellung im Artikel zur Einrichtung des GPU-Profilings Profile im lokalen Dateisystem. Die Profiling-Daten gehen verloren, wenn der Pod neu erstellt wird. Um Profile beizubehalten, konfigurieren Sie Pyroscope so, dass Azure Blob Storage mit Microsoft Entra Workload ID verwendet werden.

Exportieren Sie die erforderlichen Variablen:

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"

Erstellen des Speicherkontos und Containers

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

Erstellen einer verwalteten Identität und Gewähren des Zugriffs auf das Speicherkonto

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

Aktivieren Sie die Workloadidentität, und erstellen Sie Verbundanmeldeinformationen

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

Der Dienstkontoname im Subjekt der Verbundanmeldeinformationen muss mit dem Dienstkontonamen übereinstimmen, der vom Pyroscope-Helm-Release verwendet wird. Andernfalls kann Sich Pyroscope nicht bei Azure Blob Storage authentifizieren.

Bereitstellen von Pyroscope mit dem Azure Blob Storage-Back-End

Statt des Helm-Befehls in Aktivieren der Profilvisualisierung mit Pyroscope führen Sie den folgenden Befehl aus. Diese Konfiguration verwendet Azure Blob Storage, erstellt das Dienstkonto und ermöglicht die Workload-Identität auf dem Pyroscope-Pod.

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

Überprüfen Sie, ob der Pod läuft:

kubectl get pods -n gadget pyroscope-0

Fahren Sie mit Pyroscope mit Azure Managed Grafana verbinden fort.

Note

Helm-Wertschlüssel können sich zwischen Chart-Versionen ändern. Führen Sie die folgenden Schritte aus helm show values oci://ghcr.io/grafana/helm-charts/pyroscope --version 1.15.0, um die verfügbaren Schlüssel für Ihre Version zu bestätigen.