12.7. トラフィックの検証およびテレメトリーの設定
DPU のプロビジョニングとシステム準備状況の確認後、エンドツーエンドのトラフィックフローを検証し、DPU テレメトリーのオブザーバビリティーを設定します。
12.7.1. トラフィックテスト用 Pod とサービスのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
管理クラスター全体にトラフィックテスト Pod とサービスをデプロイすることで、DPU データプレーンを介したエンドツーエンドの接続性を検証できます。テストワークロードには、コントロールプレーンノード上のサーバー Pod と、DPU 有効化ノード上のワーカー Pod が含まれており、標準設定とホストネットワーク設定の両方が使用されています。
これらのテストワークロードには nicolaka/netshoot コンテナーイメージが使用されます。これはネットワークのトラブルシューティング用コミュニティーイメージであり、Red Hat および NVIDIA による公式サポートの対象外となります。接続性の検証とテストのみに使用し、実稼働環境のワークロードには使用しないでください。
前提条件
- DPF Operator をインストールし、DPU ホステッドクラスターをプロビジョニングしている。
- DPU 有効化ワーカーノードを少なくとも 1 つ利用できる。
-
cluster-adminロールを持つユーザーとして、管理クラスターへのアクセス権を持っている。
手順
以下の内容を含む
traffic-pods.yamlという名前のファイルを作成します。# 1. Namespace --- apiVersion: v1 kind: Namespace metadata: name: workload # 2. SCC RoleBinding (grants 'default' ServiceAccount in 'workload' NS access to 'privileged' SCC) --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: privileged-scc-default-sa namespace: workload subjects: - kind: ServiceAccount name: default namespace: workload roleRef: kind: ClusterRole name: system:openshift:scc:privileged apiGroup: rbac.authorization.k8s.io # 3. Deployments and Services # Deployment: traffic-test-master --- apiVersion: apps/v1 kind: Deployment metadata: name: traffic-test-master namespace: workload labels: app: traffic-test-master spec: replicas: 1 selector: matchLabels: app: traffic-test-master template: metadata: labels: app: traffic-test-master spec: topologySpreadConstraints: - maxSkew: 1 topologyKey: kubernetes.io/hostname whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: app: traffic-test-master nodeSelector: node-role.kubernetes.io/control-plane: "" tolerations: - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule - key: node-role.kubernetes.io/control-plane operator: Exists effect: NoSchedule containers: - name: nginx securityContext: privileged: true capabilities: add: - NET_ADMIN image: nicolaka/netshoot command: ["nc", "-kl", "5000"] ports: - containerPort: 5000 name: tcp-server resources: requests: cpu: 1 memory: 1Gi limits: cpu: 1 memory: 1Gi --- # Service: traffic-test-master apiVersion: v1 kind: Service metadata: name: traffic-test-master namespace: workload labels: app: traffic-test-master spec: selector: app: traffic-test-master ports: - protocol: TCP port: 5000 targetPort: 5000 --- # Service: traffic-test-master-nodeport apiVersion: v1 kind: Service metadata: name: traffic-test-master-nodeport namespace: workload labels: app: traffic-test-master spec: type: NodePort selector: app: traffic-test-master ports: - protocol: TCP port: 5000 targetPort: 5000 --- # Deployment: traffic-test-worker apiVersion: apps/v1 kind: Deployment metadata: name: traffic-test-worker namespace: workload labels: app: traffic-test-worker spec: replicas: 1 selector: matchLabels: app: traffic-test-worker template: metadata: labels: app: traffic-test-worker spec: topologySpreadConstraints: - maxSkew: 1 topologyKey: kubernetes.io/hostname whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: app: traffic-test-worker nodeSelector: feature.node.kubernetes.io/dpu-enabled: "" containers: - name: nginx securityContext: privileged: true capabilities: add: - NET_ADMIN image: nicolaka/netshoot command: ["nc", "-kl", "5000"] ports: - containerPort: 5000 name: tcp-server resources: requests: cpu: 16 memory: 6Gi limits: cpu: 16 memory: 6Gi --- # Service: traffic-test-worker apiVersion: v1 kind: Service metadata: name: traffic-test-worker namespace: workload labels: app: traffic-test-worker spec: selector: app: traffic-test-worker ports: - protocol: TCP port: 5000 targetPort: 5000 --- # Service: traffic-test-worker-nodeport apiVersion: v1 kind: Service metadata: name: traffic-test-worker-nodeport namespace: workload labels: app: traffic-test-worker spec: type: NodePort selector: app: traffic-test-worker ports: - protocol: TCP port: 5000 targetPort: 5000 --- # Deployment: traffic-test-worker-hostnetwork apiVersion: apps/v1 kind: Deployment metadata: name: traffic-test-worker-hostnetwork namespace: workload labels: app: traffic-test-worker-hostnetwork spec: replicas: 1 selector: matchLabels: app: traffic-test-worker-hostnetwork template: metadata: labels: app: traffic-test-worker-hostnetwork spec: topologySpreadConstraints: - maxSkew: 1 topologyKey: kubernetes.io/hostname whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: app: traffic-test-worker-hostnetwork nodeSelector: feature.node.kubernetes.io/dpu-enabled: "" hostNetwork: true containers: - name: nginx securityContext: privileged: true capabilities: add: - NET_ADMIN image: nicolaka/netshoot command: ["nc", "-kl", "5000"] ports: - containerPort: 5000 name: tcp-server resources: requests: cpu: 1 memory: 1Gi limits: cpu: 1 memory: 1Gi --- # Service: traffic-test-worker-hostnetwork apiVersion: v1 kind: Service metadata: name: traffic-test-worker-hostnetwork namespace: workload labels: app: traffic-test-worker-hostnetwork spec: selector: app: traffic-test-worker-hostnetwork ports: - protocol: TCP port: 5000 targetPort: 5000 --- # Service: traffic-test-worker-hostnetwork-nodeport apiVersion: v1 kind: Service metadata: name: traffic-test-worker-hostnetwork-nodeport namespace: workload labels: app: traffic-test-worker-hostnetwork spec: type: NodePort selector: app: traffic-test-worker-hostnetwork ports: - protocol: TCP port: 5000 targetPort: 5000マニフェストは以下のリソースを作成します。
-
テスト用 Pod の
workloadnamespace。 -
workloadnamespace 内のdefaultサービスアカウントに対して、privilegedSecurity Context Constraints へのアクセス権を付与するRoleBindingリソース。 -
traffic-test-masterのデプロイメント、およびコントロールプレーンノード上のClusterIPとNodePortサービス。 -
DPU 有効化ワーカーノード上での
traffic-test-workerデプロイメント、およびClusterIPとNodePortサービス。 DPU 有効化ワーカーノード上でホストネットワークを使用し、
ClusterIPおよびNodePortサービスを備えた、traffic-test-worker-hostnetworkデプロイメント。注記ワーカーのデプロイメントでは、単一の DPU ワーカーノードに対して
replicas: 1が設定されています。traffic-test-workerおよびtraffic-test-worker-hostnetworkデプロイメントのレプリカ数を、DPU 有効化ワーカーノードの数に設定して、topologySpreadConstraintsが各ノードに 1 つの Pod を配置するようにします。
-
テスト用 Pod の
マニフェストを適用します。
$ oc apply -f traffic-pods.yaml
検証
テスト Pod が実行されていることを確認します。
$ oc get pods -n workload -o wide出力例
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES traffic-test-master-7448bb5cc-mdftd 1/1 Running 0 2m10s 10.129.0.145 master-2 <none> <none> traffic-test-worker-776486fb68-krz54 1/1 Running 0 2m10s 10.128.2.9 host-worker1 <none> <none> traffic-test-worker-776486fb68-lz8vf 1/1 Running 0 2m10s 10.131.0.9 host-worker2 <none> <none> traffic-test-worker-hostnetwork-596d569d99-cjpns 1/1 Running 0 2m10s 10.0.110.11 host-worker1 <none> <none> traffic-test-worker-hostnetwork-596d569d99-x6m7r 1/1 Running 0 2m10s 10.0.110.12 host-worker2 <none> <none>traffic-test-masterPod がコントロールプレーンノード上にあり、traffic-test-workerPod がさまざまな DPU 有効化ワーカーノードに分散されていることを確認します。サービスが作成されていることを確認します。
$ oc get svc -n workload出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE traffic-test-master ClusterIP 172.30.102.123 <none> 5000/TCP 13m traffic-test-master-nodeport NodePort 172.30.98.22 <none> 5000:31368/TCP 13m traffic-test-worker ClusterIP 172.30.187.147 <none> 5000/TCP 13m traffic-test-worker-hostnetwork ClusterIP 172.30.122.242 <none> 5000/TCP 13m traffic-test-worker-hostnetwork-nodeport NodePort 172.30.122.214 <none> 5000:30209/TCP 13m traffic-test-worker-nodeport NodePort 172.30.108.72 <none> 5000:32570/TCP 13m