Perguntas frequentes sobre criação de perfil de GPU para AKS (Serviço de Kubernetes do Azure) (versão prévia)

Obtenha respostas para perguntas frequentes sobre integrações de monitoramento e armazenamento de perfil para criação de perfil de GPU em AKS (Serviço de Kubernetes do Azure). Antes de começar, configure a criação de perfil de GPU.

Integrações de monitoramento

Como faço para conectar minha própria instância do Prometheus ao Inspektor Gadget?

Se você usar sua própria instância do Prometheus em vez do serviço gerenciado do Azure Monitor para Prometheus, configure-a para coletar métricas dos pods do Inspektor Gadget.

O Inspektor Gadget expõe suas métricas no seguinte endpoint:

Setting Valor
Namespace gadget
Porto 2224
Caminho /metrics

Adicione um trabalho de extração à configuração do Prometheus para descobrir e extrair os pods:

Tip

Para implantações do Prometheus Operator, crie um PodMonitor com o namespace equivalente, o seletor de rótulos, a porta e o caminho para métricas.

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__

Verifique a conexão na interface do Prometheus, em Status>. A inspektor-gadget tarefa deve mostrar seu alvo como UP.

Como visualizar as métricas do Inspektor Gadget em minha própria instância do Grafana?

Verifique se a instância do Prometheus está conectada ao Grafana como uma fonte de dados. Em seguida, importe o painel Inspektor Gadget a partir da seguinte definição JSON:

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

Armazenamento do perfil

Como usar Armazenamento de Blobs do Azure como o back-end do Piroscópio?

Por padrão, a implantação do Pyroscope no artigo sobre a configuração da criação de perfil de GPU armazena perfis no sistema de arquivos local. Os dados de profiling serão perdidos se o pod for recriado. Para manter perfis, configure o Pyroscope para usar Armazenamento de Blobs do Azure com ID de carga de trabalho do Microsoft Entra.

Exporte as variáveis necessárias:

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"

Crie a conta de armazenamento e o contêiner

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

Criar uma identidade gerenciada e conceder acesso à conta de armazenamento

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

Habilitar a identidade da carga de trabalho e criar credenciais 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

O nome da conta de serviço no assunto da credencial federada deve corresponder ao nome da conta de serviço usado na versão do Pyroscope Helm. Caso contrário, o Piroscope não poderá se autenticar no Armazenamento de Blobs do Azure.

Implantar o Pyroscope com o backend do Armazenamento de Blobs do Azure

Em vez do comando Helm em Habilitar visualização de perfil com o Pyroscope, execute o comando a seguir. Essa configuração usa Armazenamento de Blobs do Azure, cria a conta de serviço e habilita a identidade da carga de trabalho no 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

Verifique se o pod está em execução:

kubectl get pods -n gadget pyroscope-0

Continue para Conectar o Pyroscope ao Espaço Gerenciado do Azure para Grafana.

Note

As chaves de valores do Helm podem mudar entre as versões do gráfico. Para confirmar as chaves disponíveis para sua versão, execute helm show values oci://ghcr.io/grafana/helm-charts/pyroscope --version 1.15.0.