AZURE KUBERNETES SERVICE (AKS) 대한 GPU 프로파일링 질문과 대답(미리 보기)

AKS(Azure Kubernetes Service) GPU 프로파일링을 위한 통합 및 프로필 스토리지 모니터링에 대한 질문과 대답을 확인하세요. 시작하기 전에 GPU 프로파일링을 설정합니다.

통합 모니터링

내 Prometheus 인스턴스를 Inspektor 가젯에 연결하려면 어떻게 해야 하나요?

Prometheus에 대한 Azure Monitor 관리 서비스 대신 고유한 Prometheus 인스턴스를 실행하는 경우 Inspektor 가젯 Pod에서 메트릭을 긁어내도록 구성합니다.

Inspektor 가젯은 다음 엔드포인트에서 메트릭을 노출합니다.

Setting 가치
네임스페이스 gadget
항구 2224
경로 /metrics

Prometheus 구성에 스크랩 작업을 추가하여 Pod를 검색하고 긁습니다.

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 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 파이로스코프 백 엔드로 사용하려면 어떻게 해야 하나요?

기본적으로 GPU 프로파일링 설정 문서의 파이로스코프 배포는 로컬 파일 시스템에 프로필을 저장합니다. Pod를 다시 만들면 프로파일링 데이터가 손실됩니다. 프로필을 유지하려면 Microsoft Entra 워크로드 ID Azure Blob Storage 사용하도록 Pyroscope를 구성합니다.

필요한 변수를 내보냅니다.

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 백 엔드를 사용하여 파이로스코프 배포

파이로스코프를 사용하여 프로필 시각화 사용의 Helm 명령 대신 다음 명령을 실행합니다. 이 구성은 Azure Blob Storage 사용하고, 서비스 계정을 만들고, Pyroscope Pod에서 워크로드 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

Pod가 실행 중인지 확인합니다.

kubectl get pods -n gadget pyroscope-0

Pyroscope를 Azure Managed Grafana에 연결하기를 계속 진행하세요.

Note

Helm 값 키는 차트 버전 간에 변경할 수 있습니다. 사용 중인 버전에서 사용 가능한 키를 확인하려면 helm show values oci://ghcr.io/grafana/helm-charts/pyroscope --version 1.15.0을 실행하세요.