DCGM エクスポータの構成(Kubernetes)

次の構成を使用して、Kubernetes クラスター内の GPU ノードに DaemonSet として NVIDIA DCGM エクスポータを展開します。マシンエージェントを設定して GPU メトリックを収集し、クラスタエージェントを使用してクラスター全体の GPU モニタリングを有効にすることができます。

DCGM エクスポータを展開する前に、次の要件を満たしていることを確認します。
  • Kubernetes 環境:
    • Kubernetes Flavor:Vanilla Kubernetes。

    • Kubernetes バージョン:1.28 以降(kubectl バージョンを使用して確認)。

  • GPUノード:

    • NVIDIA ドライバ(バージョン 550.x 以降)

    • NVIDIA Container Toolkit(NVIDIA GPU Operator バージョン 24.9.x 以降でインストール可能)

  • クラスタエージェントの設定:クラスタエージェントの仕様で GPU モニタリングを有効にします。
    gpuMonitoringEnabled: true
  • コントローラの設定:次のコントローラフラグを使用して、アカウントレベルで GPU モニタリングを有効にします。
    sim.cluster.gpu.enabled=true
  • マシンエージェントの DaemonSet:GPU がサポートされたマシンエージェント Docker イメージを使用します。次のいずれかの方法を使用して、マシンエージェントで GPU モニタリングを有効にします。
    • システムプロパティ:
      -Dappdynamics.machine.agent.gpu.enabled=true
    • コントローラ構成ファイル(controller-info.xml):
      <gpu-enabled>true</gpu-enabled>
    • 環境変数:
      APPDYNAMICS_MACHINE_AGENT_GPU_ENABLED=true
  • GPU オペレータで組み込み DCGM エクスポータを無効にします。デフォルトでは、NVIDIA GPU Operator は独自の DCGM エクスポータを展開します。ただし、適切な構成に必要な hostPID: true および internalTrafficPolicy: Local のサポートはありません。次のコマンドを使用して、組み込みの DCGM エクスポータを無効にします。
    • GPU オペレータがインストールされていない場合:
      helm install gpu-operator nvidia/gpu-operator \
        -n gpu-operator --create-namespace \
        --set dcgmExporter.enabled=false \
        --wait
    • GPU オペレータがすでにインストールされている場合:
      helm upgrade --install gpu-operator nvidia/gpu-operator \
        -n gpu-operator \
        --set dcgmExporter.enabled=false \
        --reuse-values \
        --wait
  1. 必要なカスタマイズを使用して、DCGM エクスポータを DaemonSet として展開します。次の YAML 仕様を活用します。
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: "dcgm-exporter"
      labels:
        app.kubernetes.io/name: "dcgm-exporter"
        app.kubernetes.io/version: "4.1.1"
    spec:
      updateStrategy:
        type: RollingUpdate
      selector:
        matchLabels:
          app.kubernetes.io/name: "dcgm-exporter"
          app.kubernetes.io/version: "4.1.1"
      template:
        metadata:
          labels:
            app.kubernetes.io/name: "dcgm-exporter"
            app.kubernetes.io/version: "4.1.1"
          name: "dcgm-exporter"
        spec:
          hostPID: true
          containers:
          - image: "nvcr.io/nvidia/k8s/dcgm-exporter:4.2.3-4.1.1-ubuntu22.04"
            name: "dcgm-exporter"
            env:
            - name: "DCGM_EXPORTER_LISTEN"
              value: ":9400"
            - name: "DCGM_EXPORTER_KUBERNETES"
              value: "true"
            ports:
            - name: "metrics"
              containerPort: 9400
            securityContext:
              runAsNonRoot: false
              runAsUser: 0
              capabilities:
                add: ["SYS_ADMIN"]
            volumeMounts:
            - name: "pod-gpu-resources"
              readOnly: true
              mountPath: "/var/lib/kubelet/pod-resources"
          volumes:
          - name: "pod-gpu-resources"
            hostPath:
              path: "/var/lib/kubelet/pod-resources"
     
    ---
     
    apiVersion: v1
    kind: Service
    metadata:
      name: "dcgm-exporter"
      labels:
        app.kubernetes.io/name: "dcgm-exporter"
        app.kubernetes.io/version: "4.1.1"
    spec:
      selector:
        app.kubernetes.io/name: "dcgm-exporter"
        app.kubernetes.io/version: "4.1.1"
      ports:
      - name: "metrics"
        port: 9400
      internalTrafficPolicy: Local
  2. または、既存の DCGM エクスポータの展開を変更して、次を含めることができます。
    • DaemonSet 仕様で hostPID: true を設定します。

    • サービス仕様で internalTrafficPolicy: Local を設定します。

    注: internalTrafficPolicy: Local 設定により、ノード X のポッドからのスクラップがノード X のエクスポータのみにクエリを実行するため、クロスノードトラフィックが回避されます。
  3. マシンエージェントの DaemonSet 環境変数を更新して、DCGM エクスポータとの統合を有効にします。
    - name: APPDYNAMICS_MACHINE_AGENT_DCGM_EXPORTER_SERVICE_NAMESPACE
      value: "gpu-operator"
    - name: APPDYNAMICS_MACHINE_AGENT_DCGM_EXPORTER_SERVICE_NAME
      value: "dcgm-exporter"
    - name: APPDYNAMICS_MACHINE_AGENT_DCGM_EXPORTER_SERVICE_PORT
      value: "9400"
    環境変数 説明
    APPDYNAMICS_MACHINE_AGENT_DCGM_EXPORTER_SERVICE_NAME
    DCGM-Exporter サービス名 は、Kubernetes サービス名です。
    APPDYNAMICS_MACHINE_AGENT_DCGM_EXPORTER_SERVICE_NAMESPACE
    DCGM-Exporter 名前空間は、Kubernetes 名前空間です。
    APPDYNAMICS_MACHINE_AGENT_DCGM_EXPORTER_SERVICE_PORT
    DCGM エクスポータのサービスポート番号。
  4. 次のコマンドを実行して、DCGM エクスポータポッドが実行されていることを確認します。
    kubectl get pods -n gpu-operator
  5. マシンエージェントが GPU メトリックをスクラップしていることを確認します。
    kubectl exec -it -n gpu-operator <Infraviz pod> -- cat /opt/appdynamics/logs/machine-agent.log
  6. GPU メトリックがサーバーおよびクラスタエージェント ダッシュボードのコントローラ UI で使用できることを確認します。