Profilowanie procesora GPU — często zadawane pytania dotyczące Azure Kubernetes Service (AKS) (wersja zapoznawcza)

Uzyskaj odpowiedzi na często zadawane pytania dotyczące monitorowania integracji i magazynu profilów na potrzeby profilowania procesora GPU w Azure Kubernetes Service (AKS). Przed rozpoczęciem skonfiguruj profilowanie procesora GPU.

Monitorowanie integracji

Jak podłączyć własną instancję Prometheusa do Inspektor Gadget?

Jeśli uruchamiasz własną instancję Prometheusa zamiast usługi Azure Monitor Managed Service for Prometheus, skonfiguruj ją tak, aby zbierała metryki z podów Inspektor Gadget.

Inspektor Gadżet uwidacznia swoje metryki w następującym punkcie końcowym:

Setting Value
Namespace gadget
Port 2224
Path /metrics

Dodaj zadanie scrapowania do konfiguracji Prometheusa, aby wykrywać pody i pobierać z nich metryki:

Tip

W przypadku wdrożeń operatora Prometheus utwórz obiekt PodMonitor z równoważną przestrzenią nazw, selektorem etykiet, portem i ścieżką metryk.

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__

Sprawdź połączenie w interfejsie użytkownika Prometheus w sekcji Status>. Zadanie inspektor-gadget powinno wyświetlać cel jako UP.

Jak mogę wizualizować metryki Inspektor Gadget w mojej własnej instancji Grafany?

Upewnij się, że instancja Prometheusa jest połączona z Grafaną jako źródło danych. Następnie zaimportuj panel Inspektor Gadget na podstawie następującej definicji JSON:

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

Magazyn profilów

Jak używać Azure Blob Storage jako zaplecza Pyroskopu?

Domyślnie wdrożenie Pyroscope opisane w artykule o konfiguracji profilowania GPU przechowuje profile w lokalnym systemie plików. W przypadku ponownego utworzenia zasobnika dane profilowania zostaną utracone. Aby utrwalać profile, skonfiguruj narzędzie Pyroscope do używania Azure Blob Storage z Tożsamość obciążeń Microsoft Entra.

Wyeksportuj wymagane zmienne:

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"

Tworzenie konta magazynu i kontenera

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

Tworzenie tożsamości zarządzanej i udzielanie dostępu do konta magazynowania

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

Włącz tożsamość obciążenia roboczego i utwórz poświadczenia federacyjne

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

Nazwa konta usługi w temacie poświadczeń federacyjnych musi być zgodna z nazwą konta usługi używaną przez wydanie programu Helm Pyroscope. W przeciwnym razie Pyroscope nie może uwierzytelnić się w Azure Blob Storage.

Wdrażanie piroskopu przy użyciu zaplecza Azure Blob Storage

Zamiast polecenia Helm w sekcji Włącz wizualizację profili za pomocą Pyroscope, uruchom następujące polecenie. Ta konfiguracja korzysta z usługi Azure Blob Storage, tworzy konto usługi i włącza tożsamość obciążeń dla poda 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

Sprawdź, czy zasobnik jest uruchomiony:

kubectl get pods -n gadget pyroscope-0

Kontynuuj, wybierając Połącz Pyroscope z Azure Managed Grafana.

Uwaga / Notatka

Klucze wartości programu Helm mogą zmieniać się między wersjami wykresu. Aby potwierdzić dostępne klucze dla używanej wersji, uruchom polecenie helm show values oci://ghcr.io/grafana/helm-charts/pyroscope --version 1.15.0.