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 ガジェット ダッシュボードをインポートします。
プロフィールの保存スペース
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を実行します。