Часто задаваемые вопросы о профилировании GPU для Azure Kubernetes Service (AKS) (предварительная версия)

Получите ответы на часто задаваемые вопросы об интеграции мониторинга и хранилище профилей для профилирования GPU на Azure Kubernetes Service (AKS). Прежде чем приступить к работе, настройте профилирование GPU.

Мониторинг интеграции

Как подключить собственный экземпляр Prometheus к Inspektor Gadget?

Если вы используете собственный экземпляр Prometheus вместо управляемой службы Azure Monitor для Prometheus, настройте его для сбора метрик из pod’ов Inspektor Gadget.

Inspektor Gadget предоставляет свои метрики в следующей конечной точке:

Setting Ценность
Namespace gadget
Порт 2224
Path /metrics

Добавьте задачу опроса в конфигурацию Prometheus, чтобы обнаруживать и опрашивать поды:

Tip

При развертывании Prometheus Operator создайте PodMonitor с тем же пространством имен, селектором меток, портом и путем к метрикам.

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__

Проверьте подключение в интерфейсе Prometheus в разделе Status>. Задание inspektor-gadget должно отображать свою цель как UP.

Как визуализировать метрики Inspektor Gadget в своём экземпляре Grafana?

Убедитесь, что экземпляр Prometheus подключен к Grafana в качестве источника данных. Затем импортируйте панель мониторинга Inspektor Gadget из следующего JSON-определения:

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

Хранилище профилей

Как использовать Хранилище BLOB-объектов Azure в качестве серверной части Пироскопа?

По умолчанию в статье о настройке профилирования GPU развертывание Pyroscope хранит профили в локальной файловой системе. Данные профилирования теряются, если модуль pod воссоздается. Чтобы обеспечить постоянное хранение профилей, настройте Pyroscope на использование Хранилище BLOB-объектов Azure с Идентификация рабочей нагрузки Microsoft Entra.

Экспорт обязательных переменных:

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"

Создание учетной записи и контейнера

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

Создайте управляемое удостоверение личности и предоставьте доступ к учетной записи хранения

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

Включите идентификацию рабочей нагрузки и создайте федеративные учетные данные

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

Имя учетной записи службы в субъекте федеративных учетных данных должно соответствовать имени учетной записи службы, используемой выпуском Pyroscope Helm. В противном случае Пироскоп не может пройти проверку подлинности в Хранилище BLOB-объектов Azure.

Разверните Pyroscope с Хранилище BLOB-объектов Azure в качестве бэкенда

Вместо команды Helm в разделе Включение визуализации профилей с помощью Pyroscope выполните следующую команду. Эта конфигурация использует хранилище BLOB-объектов Azure, создает учетную запись сервиса и включает идентификацию рабочей нагрузки для 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

Убедитесь, что модуль pod запущен:

kubectl get pods -n gadget pyroscope-0

Перейдите к подключению Pyroscope к Управление Azure для Grafana.

Замечание

Ключи значений Helm могут изменяться между версиями диаграммы. Чтобы подтвердить доступные ключи для вашей версии, выполните команду helm show values oci://ghcr.io/grafana/helm-charts/pyroscope --version 1.15.0.