8.6. Pod の SR-IOV の追加ネットワークへの追加
Pod を既存の Single Root I/O Virtualization (SR-IOV) ネットワークに追加できます。
8.6.1. Pod の追加ネットワークへの追加 リンクのコピーリンクがクリップボードにコピーされました!
Pod を追加のネットワークに追加できます。Pod は、デフォルトネットワークで通常のクラスター関連のネットワークトラフィックを継続的に送信します。
Pod が作成されると、追加のネットワークが割り当てられます。ただし、Pod がすでに存在する場合は、追加のネットワークをこれに割り当てることはできません。
NetworkAttachmentDefinition が SR-IOV ネットワーク Operator によって管理される場合、SR-IOV Network Resource Injector は resource フィールドを Pod オブジェクトに自動的に追加します。
Deployment リソースまたは ReplicationController リソースの SR-IOV ハードウェアネットワークを指定する場合、NetworkAttachmentDefinition CR の namespace を指定する必要があります。詳細は、以下の BZ#1846333 および BZ#1840962 のバグを参照してください。
前提条件
- Pod が追加ネットワークと同じ namespace にあること。
-
OpenShift CLI (
oc) のインストール。 - クラスターにログインする必要があります。
- SR-IOV Operator がインストールされ、SriovNetwork CR が定義されている必要があります。
手順
アノテーションを Pod オブジェクトに追加します。以下のアノテーション形式のいずれかのみを使用できます。
カスタマイズせずに追加ネットワークを割り当てるには、以下の形式でアノテーションを追加します。
<network>を、Pod に関連付ける追加ネットワークの名前に置き換えます。metadata: annotations: k8s.v1.cni.cncf.io/networks: <network>[,<network>,...]1 - 1
- 複数の追加ネットワークを指定するには、各ネットワークをカンマで区切ります。カンマの間にはスペースを入れないでください。同じ追加ネットワークを複数回指定した場合、Pod は複数のネットワークインターフェースをそのネットワークに割り当てます。
カスタマイズして追加のネットワークを割り当てるには、以下の形式でアノテーションを追加します。
metadata: annotations: k8s.v1.cni.cncf.io/networks: |- [ { "name": "<network>",1 "namespace": "<namespace>",2 "default-route": ["<default-route>"]3 } ]
Pod を作成するには、以下のコマンドを入力します。
<name>を Pod の名前に置き換えます。$ oc create -f <name>.yamlオプション: アノテーションが Pod CR に存在することを確認するには、
<name>を Pod の名前に置き換えて、以下のコマンドを入力します。$ oc get pod <name> -o yaml以下の例では、
example-podPod が追加ネットワークのnet1に割り当てられています。$ oc get pod example-pod -o yaml apiVersion: v1 kind: Pod metadata: annotations: k8s.v1.cni.cncf.io/networks: macvlan-bridge k8s.v1.cni.cncf.io/networks-status: |-1 [{ "name": "openshift-sdn", "interface": "eth0", "ips": [ "10.128.2.14" ], "default": true, "dns": {} },{ "name": "macvlan-bridge", "interface": "net1", "ips": [ "20.2.2.100" ], "mac": "22:2f:60:a5:f8:00", "dns": {} }] name: example-pod namespace: default spec: ... status: ...- 1
k8s.v1.cni.cncf.io/networks-statusパラメーターは、オブジェクトの JSON 配列です。各オブジェクトは、Pod に割り当てられる追加のネットワークのステータスについて説明します。アノテーションの値はプレーンテキストの値として保存されます。
8.6.2. Non-Uniform Memory Access (NUMA) で配置された SR-IOV Pod の作成 リンクのコピーリンクがクリップボードにコピーされました!
NUMA で配置された SR-IOV Pod は、restricted または single-numa-node Topology Manager ポリシーで同じ NUMA ノードから割り当てられる SR-IOV および CPU リソースを制限することによって作成できます。
前提条件
-
OpenShift CLI (
oc) のインストール。 -
LatencySensitive プロファイルを有効にし、CPU マネージャーのポリシーを
staticに設定する。
手順
以下の SR-IOV Pod 仕様を作成してから、YAML を
<name>-sriov-pod.yamlファイルに保存します。<name>をこの Pod の名前に置き換えます。以下の例は、SR-IOV Pod 仕様を示しています。
apiVersion: v1 kind: Pod metadata: name: sample-pod annotations: k8s.v1.cni.cncf.io/networks: <name>1 spec: containers: - name: sample-container image: <image>2 command: ["sleep", "infinity"] resources: limits: memory: "1Gi"3 cpu: "2"4 requests: memory: "1Gi" cpu: "2"以下のコマンドを実行して SR-IOV Pod のサンプルを作成します。
$ oc create -f <filename>1 - 1
<filename>を、先の手順で作成したファイルの名前に置き換えます。
sample-podが Guaranteed QoS を指定して設定されていることを確認します。$ oc describe pod sample-podsample-podが排他的 CPU を指定して割り当てられていることを確認します。$ oc exec sample-pod -- cat /sys/fs/cgroup/cpuset/cpuset.cpussample-podに割り当てられる SR-IOV デバイスと CPU が同じ NUMA ノード上にあることを確認します。$ oc exec sample-pod -- cat /sys/fs/cgroup/cpuset/cpuset.cpus