Azure Kubernetes Service (AKS)に関してよく寄せられる GPU プロファイリングの質問 (プレビュー)

Azure Kubernetes Service (AKS)での GPU プロファイリングの統合とプロファイル ストレージの監視に関してよく寄せられる質問に対する回答を取得します。 開始する前に、 GPU プロファイリングを設定します。

統合の監視

自分の Prometheus インスタンスを Inspektor ガジェットに接続するにはどうすればよいですか?

Prometheus のマネージド サービスではなく、独自の Prometheus インスタンスAzure Monitor実行する場合は、Inspektor Gadget ポッドからメトリックをスクレーピングするように構成します。

Inspektor Gadget は、次のエンドポイントでそのメトリックを公開します。

Setting 価値
名前空間 gadget
Port 2224
パス /metrics

ポッドを検出してスクレイプするためのスクレイプジョブを Prometheus の設定に追加します。

Tip

Prometheus オペレーターのデプロイの場合は、同等の名前空間、ラベル セレクター、ポート、メトリックパスを持つ 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 UI の [状態][ターゲット]で接続>確認します。 inspektor-gadget ジョブのターゲットは UP と表示されます。

自分の Grafana インスタンスで Inspektor ガジェットメトリックを視覚化するにはどうすればよいですか?

Prometheus インスタンスがデータ ソースとして Grafana に接続されていることを確認します。 次に、次の JSON 定義から Inspektor ガジェット ダッシュボードをインポートします。

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

プロフィールの保存スペース

Azure Blob StorageをPyorscope バックエンドとして使用するにはどうすればよいですか?

既定では、 GPU プロファイル セットアップ記事 のパイロスコープデプロイでは、プロファイルがローカル ファイルシステムに格納されます。 ポッドが再作成されると、プロファイル データは失われます。 プロファイルを保持するには、Microsoft Entra ワークロード ID でAzure Blob Storageを使用するようにPyscopeを構成します。

必要な変数をエクスポートします。

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

マネージド ID を作成し、ストレージ アカウントへのアクセスを許可する

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

ワークロード ID を有効にしてフェデレーション資格情報を作成する

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 リリースで使用されるサービス アカウント名と一致している必要があります。 それ以外の場合、パイロスコープはAzure Blob Storageに対して認証できません。

Azure Blob Storage バックエンドを使用してPyorscope をデプロイする

[パイロスコープでプロファイルの視覚化を有効にする] の Helm コマンドの代わりに、次のコマンドを実行します。 この構成では、Azure Blob Storageを使用し、サービス アカウントを作成し、Pyoscope ポッドでワークロード ID を有効にします。

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

ポッドが実行されていることを確認します:

kubectl get pods -n gadget pyroscope-0

「パイロスコープをAzure Managed Grafanaに接続する」に進みます。

注

Helm 値キーは、グラフのバージョン間で変更できます。 バージョンで使用可能なキーを確認するには、 helm show values oci://ghcr.io/grafana/helm-charts/pyroscope --version 1.15.0を実行します。