Vanliga frågor och svar om GPU-profilering för Azure Kubernetes Service (AKS) (förhandsversion)

Få svar på vanliga frågor om övervakning av integreringar och profillagring för GPU-profilering på Azure Kubernetes Service (AKS). Innan du börjar konfigurerar du GPU-profilering.

Övervaka integreringar

Hur ansluter jag min egen Prometheus-instans till Inspektor Gadget?

Om du kör en egen Prometheus-instans i stället för den Azure Monitor-hanterade tjänsten för Prometheus, konfigurerar du den för att samla in mått från Inspektor Gadget-poddarna.

Inspektor Gadget exponerar sina mått vid följande slutpunkt:

Setting Value
Namespace gadget
Hamn 2224
Path /metrics

Lägg till ett skrapjobb i din Prometheus-konfiguration för att upptäcka och skrapa podarna:

Tip

För Prometheus-operatörsdistributioner skapar du en PodMonitor med motsvarande namnområde, etikettväljare, port och måttsökväg.

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__

Kontrollera anslutningen i ditt Prometheus-användargränssnitt under Statusmål>. Jobbet inspektor-gadget bör visa sitt mål som UP.

Hur visualiserar jag Inspektor Gadget-mått i min egen Grafana-instans?

Kontrollera att Prometheus-instansen är ansluten till Grafana som en datakälla. Importera sedan instrumentpanelen Inspektor Gadget från följande JSON-definition:

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

Profillagring

Hur använder jag Azure Blob Storage som Pyroscope-serverdel?

Som standard lagrar Pyroscope-distributionen i artikeln för GPU-profileringskonfiguration profiler i det lokala filsystemet. Profileringsdata går förlorade om podden återskapas. Om du vill bevara profiler konfigurerar du Pyroscope för att använda Azure Blob Storage med Microsoft Entra Workload ID.

Exportera de variabler som krävs:

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"

Skapa lagringskontot och containern

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

Skapa en hanterad identitet och bevilja åtkomst till lagringskontot

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

Aktivera identitet för arbetsbelastning och skapa federerade autentiseringsuppgifter

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

Namnet på tjänstkontot i det federerade autentiseringsämnet måste matcha namnet på tjänstkontot som används av Pyroscope Helm-versionen. Annars kan Pyroscope inte autentisera sig mot Azure Blob Storage.

Distribuera Pyroscope med Azure Blob Storage som lagringsbackend

Kör följande kommando i stället för Helm-kommandot i Aktivera profilvisualisering med Pyroscope. Den här konfigurationen använder Azure Blob Storage, skapar tjänstkontot och aktiverar arbetsbelastningsidentitet på Pyroscope-podden.

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

Kontrollera att podden körs:

kubectl get pods -n gadget pyroscope-0

Fortsätt med Anslut Pyroscope till Azure Managed Grafana.

Note

Helm-värdenycklar kan ändras mellan diagramversioner. Om du vill bekräfta de tillgängliga nycklarna för din version kör du helm show values oci://ghcr.io/grafana/helm-charts/pyroscope --version 1.15.0.