次の構成を使用して、Kubernetes クラスター内の GPU ノードに DaemonSet として NVIDIA DCGM エクスポータを展開します。マシンエージェントを設定して GPU メトリックを収集し、クラスタエージェントを使用してクラスター全体の GPU モニタリングを有効にすることができます。
DCGM エクスポータを展開する前に、次の要件を満たしていることを確認します。
-
-
GPUノード:
-
クラスタエージェントの設定:クラスタエージェントの仕様で 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
- 必要なカスタマイズを使用して、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
- または、既存の DCGM エクスポータの展開を変更して、次を含めることができます。
注: internalTrafficPolicy: Local 設定により、ノード X のポッドからのスクラップがノード X のエクスポータのみにクエリを実行するため、クロスノードトラフィックが回避されます。
- マシンエージェントの 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"
- 次のコマンドを実行して、DCGM エクスポータポッドが実行されていることを確認します。
kubectl get pods -n gpu-operator
- マシンエージェントが GPU メトリックをスクラップしていることを確認します。
kubectl exec -it -n gpu-operator <Infraviz pod> -- cat /opt/appdynamics/logs/machine-agent.log
- GPU メトリックがサーバーおよびクラスタエージェント ダッシュボードのコントローラ UI で使用できることを確認します。