12.7. トラフィックを検証し、Telemetry を設定する
DPU をプロビジョニングし、システムの準備を確認したら、エンドツーエンドのトラフィックフローを検証し、DPU テレメトリー可観測性を設定します。
12.7.1. トラフィックテスト Pod およびサービスのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
トラフィックテスト Pod とサービスを管理クラスター全体でデプロイし、DPU データプレーンを介してエンドツーエンドの接続を検証できます。テストワークロードには、標準およびホストネットワーク設定の両方を持つ、コントロールプレーンノード上のサーバー Pod と DPU 対応ノード上のワーカー Pod が含まれます。
これらのテストワークロードは、Red Hat または NVIDIA が正式にサポートされていないコミュニティーネットワーキング - トラブルシューティングイメージである nicolaka/netshoot コンテナーイメージを使用します。実稼働環境のワークロードではなく、接続の検証およびテストにのみ使用してください。
前提条件
- DPF Operator をインストールし、DPU ホストテッドクラスターをプロビジョニングしている。
- 少なくとも 1 つの DPU 対応ワーカーノードが利用可能である。
-
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 の
ワークロードnamespace。 -
ワークロードnamespace のデフォルトのサービスアカウントにprivilegedSCC (security context constraint)へのアクセス権限を付与するRoleBindingリソース。 -
コントロールプレーンノードの
traffic-test-masterデプロイメントおよびClusterIPおよびNodePortサービス。 -
DPU 対応のワーカーノード上の
traffic-test-workerデプロイメントおよびClusterIPおよびNodePortサービス。 ClusterIPおよびNodePortサービスを備えた、DPU 対応のワーカーノード上のホストネットワークを使用するtraffic-test-worker-hostnetworkデプロイメント。注記ワーカーデプロイメントでは、単一の DPU ワーカーノードに
replicas を設定します。1traffic-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