19.6. SR-IOV ネットワークのインターフェイスレベルのネットワーク sysctl 設定とオールマルチキャストモードを設定する
クラスター管理者は、SR-IOV ネットワークデバイスに接続されている Pod のチューニング Container Network Interface (CNI) メタプラグインを使用して、インターフェイスレベルのネットワーク sysctl と、プロミスキャスモード、オールマルチキャストモード、MTU、MAC アドレスなどのいくつかのインターフェイス属性を変更できます。
次のドキュメントのタスクを実行する前に、SR-IOV Network Operator がインストールされている ことを確認してください。
19.6.1. SR-IOV 対応 NIC を使用したノードのラベル付け
SR-IOV 対応ノードのみで SR-IOV を有効にしたい場合は、いくつかの方法があります。
-
Node Feature Discovery (NFD) Operator をインストールします。NFD は SR-IOV 対応の NIC の存在を検出し、ノードに
node.alpha.kubernetes-incubator.io/nfd-network-sriov.capable = true
ラベルを付けます。 各ノードの
SriovNetworkNodeState
CR を調べます。interfaces
スタンザには、ワーカーノード上の SR-IOV Network Operator によって検出されるすべての SR-IOV デバイスの一覧が含まれます。次のコマンドを使用して、各ノードにfeature.node.kubernetes.io/network-sriov.capable: "true"
というラベルを付けます。$ oc label node <node_name> feature.node.kubernetes.io/network-sriov.capable="true"
注記任意の名前でノードにラベルを付けることができます。
19.6.2. 1 つの sysctl フラグの設定
SR-IOV ネットワークデバイスに接続された Pod のインターフェイスレベルのネットワーク sysctl
設定を設定できます。
この例では、作成された仮想インターフェイスで net.ipv4.conf.IFNAME.accept_redirects
が 1
に設定されます。
sysctl-tuning-test
は、この例で使用される namespace です。
次のコマンドを使用して、
sysctl-tuning-test
namespace を作成します。$ oc create namespace sysctl-tuning-test
19.6.2.1. SR-IOV ネットワークデバイスを持つノードで 1 つの sysctl フラグを設定する
SR-IOV Network Operator は SriovNetworkNodePolicy.sriovnetwork.openshift.io
カスタムリソース定義 (CRD) を OpenShift Container Platform に追加します。SR-IOV ネットワークデバイスは、SriovNetworkNodePolicy
カスタムリソース (CR) を作成して設定できます。
SriovNetworkNodePolicy
オブジェクトで指定された設定を適用すると、SR-IOV Operator がノードをドレインして再起動する場合があります。
設定の変更が適用されるまでに数分の時間がかかる場合があります。
この手順に従って、SriovNetworkNodePolicy
カスタムリソース (CR) を作成します。
手順
SriovNetworkNodePolicy
カスタムリソース (CR) を作成します。たとえば、次の YAML をファイルpolicyoneflag-sriov-node-network.yaml
として保存します。apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: policyoneflag 1 namespace: openshift-sriov-network-operator 2 spec: resourceName: policyoneflag 3 nodeSelector: 4 feature.node.kubernetes.io/network-sriov.capable="true" priority: 10 5 numVfs: 5 6 nicSelector: 7 pfNames: ["ens5"] 8 deviceType: "netdevice" 9 isRdma: false 10
- 1
- カスタムリソースオブジェクトの名前。
- 2
- SR-IOV Network Operator がインストールされている namespace。
- 3
- SR-IOV ネットワークデバイスプラグインのリソース名。1 つのリソース名に複数の SR-IOV ネットワークポリシーを作成できます。
- 4
- ノードセレクターは設定するノードを指定します。選択したノード上の SR-IOV ネットワークデバイスのみが設定されます。SR-IOV Container Network Interface (CNI) プラグインおよびデバイスプラグインは、選択したノードにのみデプロイされます。
- 5
- オプション: 優先度は
0
から99
までの整数値で指定されます。値が小さいほど優先度が高くなります。たとえば、10
の優先度は99
よりも高くなります。デフォルト値は99
です。 - 6
- SR-IOV 物理ネットワークデバイス用に作成する Virtual Function (VF) の数。Intel ネットワークインターフェイスコントローラー (NIC) の場合、VF の数はデバイスがサポートする VF の合計よりも大きくすることはできません。Mellanox NIC の場合、VF の数は
127
よりも大きくすることはできません。 - 7
- NIC セレクターは、Operator が設定するデバイスを特定します。すべてのパラメーターの値を指定する必要はありません。意図せずにデバイスを選択しないように、ネットワークデバイスを極めて正確に特定することが推奨されます。
rootDevices
を指定する場合、vendor
、deviceID
、またはpfNames
の値も指定する必要があります。pfNames
およびrootDevices
の両方を同時に指定する場合、それらが同一のデバイスを参照していることを確認します。netFilter
の値を指定する場合、ネットワーク ID は一意の ID であるためにその他のパラメーターを指定する必要はありません。 - 8
- オプション: 1 つ以上のデバイスの物理機能 (PF) 名の配列。
- 9
- オプション: Virtual Function のドライバータイプ。許可される唯一の値は
netdevice
です。ベアメタルノードで Mellanox NIC を DPDK モードで動作させるには、isRdma
をtrue
に設定します。 - 10
- オプション: Remote Direct Memory Access (RDMA) モードを有効にするかどうかを設定します。デフォルト値は
false
です。isRdma
パラメーターがtrue
に設定される場合、引き続き RDMA 対応の VF を通常のネットワークデバイスとして使用できます。デバイスはどちらのモードでも使用できます。isRdma
をtrue
に設定し、追加のneedVhostNet
をtrue
に設定して、Fast Datapath DPDK アプリケーションで使用する Mellanox NIC を設定します。
注記vfio-pci
ドライバータイプはサポートされていません。SriovNetworkNodePolicy
オブジェクトを作成します。$ oc create -f policyoneflag-sriov-node-network.yaml
設定の更新が適用された後に、
sriov-network-operator
namespace 変更のすべての Pod がRunning
ステータスに移行します。SR-IOV ネットワークデバイスが設定されていることを確認するには、以下のコマンドを実行します。
<node_name>
を、設定したばかりの SR-IOV ネットワークデバイスを持つノードの名前に置き換えます。$ oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name> -o jsonpath='{.status.syncStatus}'
出力例
Succeeded
19.6.2.2. SR-IOV ネットワークでの sysctl の設定
SriovNetwork
リソースのオプションの metaPlugins
パラメーターにチューニング設定を追加することで、SR-IOV により作成された仮想インターフェイスにインターフェイス固有の sysctl
設定を設定できます。
SR-IOV Network Operator は追加ネットワークの定義を管理します。作成する追加ネットワークを指定する場合、SR-IOV Network Operator は NetworkAttachmentDefinition
カスタムリソース (CR) を自動的に作成します。
SR-IOV Network Operator が管理する NetworkAttachmentDefinition
カスタムリソースは編集しないでください。これを実行すると、追加ネットワークのネットワークトラフィックが中断する可能性があります。
インターフェイスレベルのネットワーク net.ipv4.conf.IFNAME.accept_redirects
sysctl
設定を変更するには、Container Network Interface (CNI) チューニングプラグインを使用して追加の SR-IOV ネットワークを作成します。
前提条件
- OpenShift Container Platform CLI (oc) をインストールします。
- cluster-admin 権限を持つユーザーとして OpenShift Container Platform クラスターにログインします。
手順
追加の SR-IOV ネットワーク割り当て用の
SriovNetwork
カスタムリソース (CR) を作成し、以下のサンプル CR のようにmetaPlugins
設定を挿入します。YAML をsriov-network-interface-sysctl.yaml
ファイルとして保存します。apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: onevalidflag 1 namespace: openshift-sriov-network-operator 2 spec: resourceName: policyoneflag 3 networkNamespace: sysctl-tuning-test 4 ipam: '{ "type": "static" }' 5 capabilities: '{ "mac": true, "ips": true }' 6 metaPlugins : | 7 { "type": "tuning", "capabilities":{ "mac":true }, "sysctl":{ "net.ipv4.conf.IFNAME.accept_redirects": "1" } }
- 1
- オブジェクトの名前。SR-IOV Network Operator は、同じ名前を持つ NetworkAttachmentDefinition オブジェクトを作成します。
- 2
- SR-IOV Network Operator がインストールされている namespace。
- 3
- この追加ネットワークの SR-IOV ハードウェアを定義する
SriovNetworkNodePolicy
オブジェクトのspec.resourceName
パラメーターの値。 - 4
SriovNetwork
オブジェクトのターゲット namespace。ターゲット namespace の Pod のみを追加ネットワークに割り当てることができます。- 5
- YAML ブロックスケーラーとしての IPAM CNI プラグインの設定オブジェクトプラグインは、アタッチメント定義への IP アドレスの割り当てを管理します。
- 6
- オプション: 追加のネットワークの機能を設定します。IP アドレスのサポートを有効にするには、
"{ "ips": true }"
を指定できます。または、MAC アドレスのサポートを有効にするには"{ "mac": true }"
を指定します。 - 7
- オプション: metaPlugins パラメーターは、デバイスに機能を追加するために使用されます。このユースケースでは、
type
フィールドをtuning
に設定します。設定したいインターフェイスレベルのネットワークsysctl
をsysctl
フィールドに指定します。
SriovNetwork
リソースを作成します。$ oc create -f sriov-network-interface-sysctl.yaml
NetworkAttachmentDefinition
CR が正常に作成されることの確認
以下のコマンドを実行して、SR-IOV Network Operator が
NetworkAttachmentDefinition
CR を作成していることを確認します。$ oc get network-attachment-definitions -n <namespace> 1
- 1
<namespace>
を、SriovNetwork
オブジェクトで指定したnetworkNamespace
の値に置き換えます。たとえば、sysctl-tuning-test
です。
出力例
NAME AGE onevalidflag 14m
注記SR-IOV Network Operator が CR を作成するまでに遅延が生じる可能性があります。
追加の SR-IOV ネットワーク割り当てが正常であることの確認
チューニング CNI が正しく設定され、追加の SR-IOV ネットワーク割り当てが接続されていることを確認するには、以下を実行します。
Pod
CR を作成します。次の YAML をexamplepod.yaml
ファイルとして保存します。apiVersion: v1 kind: Pod metadata: name: tunepod namespace: sysctl-tuning-test annotations: k8s.v1.cni.cncf.io/networks: |- [ { "name": "onevalidflag", 1 "mac": "0a:56:0a:83:04:0c", 2 "ips": ["10.100.100.200/24"] 3 } ] spec: containers: - name: podexample image: centos command: ["/bin/bash", "-c", "sleep INF"] securityContext: runAsUser: 2000 runAsGroup: 3000 allowPrivilegeEscalation: false capabilities: drop: ["ALL"] securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault
- 1
- SR-IOV ネットワーク割り当て定義 CR の名前。
- 2
- オプション: SR-IOV ネットワーク割り当て定義 CR で定義されるリソースタイプから割り当てられる SR-IOV デバイスの MAC アドレス。この機能を使用するには、SriovNetwork オブジェクトで
{ "mac": true }
も指定する必要があります。 - 3
- オプション: SR-IOV ネットワーク割り当て定義 CR で定義されるリソースタイプから割り当てられる SR-IOV デバイスの IP アドレス。IPv4 と IPv6 アドレスの両方がサポートされます。この機能を使用するには、
SriovNetwork
オブジェクトで{ "ips": true }
も指定する必要があります。
Pod
CR を作成します。$ oc apply -f examplepod.yaml
次のコマンドを実行して、Pod が作成されていることを確認します。
$ oc get pod -n sysctl-tuning-test
出力例
NAME READY STATUS RESTARTS AGE tunepod 1/1 Running 0 47s
次のコマンドを実行して、Pod にログインします。
$ oc rsh -n sysctl-tuning-test tunepod
設定された sysctl フラグの値を確認します。次のコマンドを実行して、
net.ipv4.conf.IFNAME.accept_redirects
の値を見つけます。$ sysctl net.ipv4.conf.net1.accept_redirects
出力例
net.ipv4.conf.net1.accept_redirects = 1
19.6.3. ボンディングされた SR-IOV インターフェイスフラグに関連付けられた Pod の sysctl 設定の設定
ボンディングされた SR-IOV ネットワークデバイスに接続された Pod のインターフェイスレベルのネットワーク sysctl
設定を設定できます。
この例では、設定可能な特定のネットワークインターフェイスレベルの sysctl
設定がボンドインターフェイスに設定されています。
sysctl-tuning-test
は、この例で使用される namespace です。
次のコマンドを使用して、
sysctl-tuning-test
namespace を作成します。$ oc create namespace sysctl-tuning-test
19.6.3.1. SR-IOV ネットワークデバイスがボンドされたノードですべての sysctl フラグを設定する
SR-IOV Network Operator は SriovNetworkNodePolicy.sriovnetwork.openshift.io
カスタムリソース定義 (CRD) を OpenShift Container Platform に追加します。SR-IOV ネットワークデバイスは、SriovNetworkNodePolicy
カスタムリソース (CR) を作成して設定できます。
SriovNetworkNodePolicy オブジェクトで指定された設定を適用する際に、SR-IOV Operator はノードをドレイン (解放) する可能性があり、場合によってはノードの再起動を行う場合があります。
設定の変更が適用されるまでに数分かかる場合があります。
この手順に従って、SriovNetworkNodePolicy
カスタムリソース (CR) を作成します。
手順
SriovNetworkNodePolicy
カスタムリソース (CR) を作成します。次の YAML をpolicyallflags-sriov-node-network.yaml
ファイルとして保存します。policyallflags
を設定の名前に置き換えます。apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: policyallflags 1 namespace: openshift-sriov-network-operator 2 spec: resourceName: policyallflags 3 nodeSelector: 4 node.alpha.kubernetes-incubator.io/nfd-network-sriov.capable = `true` priority: 10 5 numVfs: 5 6 nicSelector: 7 pfNames: ["ens1f0"] 8 deviceType: "netdevice" 9 isRdma: false 10
- 1
- カスタムリソースオブジェクトの名前。
- 2
- SR-IOV Network Operator がインストールされている namespace。
- 3
- SR-IOV ネットワークデバイスプラグインのリソース名。1 つのリソース名に複数の SR-IOV ネットワークポリシーを作成できます。
- 4
- ノードセレクターは設定するノードを指定します。選択したノード上の SR-IOV ネットワークデバイスのみが設定されます。SR-IOV Container Network Interface (CNI) プラグインおよびデバイスプラグインは、選択したノードにのみデプロイされます。
- 5
- オプション: 優先度は
0
から99
までの整数値で指定されます。値が小さいほど優先度が高くなります。たとえば、10
の優先度は99
よりも高くなります。デフォルト値は99
です。 - 6
- SR-IOV 物理ネットワークデバイス用に作成する Virtual Function (VF) の数。Intel ネットワークインターフェイスコントローラー (NIC) の場合、VF の数はデバイスがサポートする VF の合計よりも大きくすることはできません。Mellanox NIC の場合、VF の数は
127
よりも大きくすることはできません。 - 7
- NIC セレクターは、Operator が設定するデバイスを特定します。すべてのパラメーターの値を指定する必要はありません。意図せずにデバイスを選択しないように、ネットワークデバイスを極めて正確に特定することが推奨されます。
rootDevices
を指定する場合、vendor
、deviceID
、またはpfNames
の値も指定する必要があります。pfNames
およびrootDevices
の両方を同時に指定する場合、それらが同一のデバイスを参照していることを確認します。netFilter
の値を指定する場合、ネットワーク ID は一意の ID であるためにその他のパラメーターを指定する必要はありません。 - 8
- オプション: 1 つ以上のデバイスの物理機能 (PF) 名の配列。
- 9
- オプション: Virtual Function のドライバータイプ。許可される唯一の値は
netdevice
です。ベアメタルノードで Mellanox NIC を DPDK モードで動作させるには、isRdma
をtrue
に設定します。 - 10
- オプション: Remote Direct Memory Access (RDMA) モードを有効にするかどうかを設定します。デフォルト値は
false
です。isRdma
パラメーターがtrue
に設定される場合、引き続き RDMA 対応の VF を通常のネットワークデバイスとして使用できます。デバイスはどちらのモードでも使用できます。isRdma
をtrue
に設定し、追加のneedVhostNet
をtrue
に設定して、Fast Datapath DPDK アプリケーションで使用する Mellanox NIC を設定します。
注記vfio-pci
ドライバータイプはサポートされていません。SriovNetworkNodePolicy オブジェクトを作成します。
$ oc create -f policyallflags-sriov-node-network.yaml
設定の更新が適用された後に、sriov-network-operator namespace のすべての Pod が
Running
ステータスに移行します。SR-IOV ネットワークデバイスが設定されていることを確認するには、以下のコマンドを実行します。
<node_name>
を、設定したばかりの SR-IOV ネットワークデバイスを持つノードの名前に置き換えます。$ oc get sriovnetworknodestates -n openshift-sriov-network-operator <node_name> -o jsonpath='{.status.syncStatus}'
出力例
Succeeded
19.6.3.2. ボンディングされた SR-IOV ネットワークでの sysctl の設定
2 つの SR-IOV インターフェイスから作成されたボンドインターフェイスで、インターフェイス固有の sysctl
設定を設定できます。これを行うには、bond ネットワーク接続定義のオプションの Plugins
パラメーターにチューニング設定を追加します。
SR-IOV Network Operator が管理する NetworkAttachmentDefinition
カスタムリソースは編集しないでください。これを実行すると、追加ネットワークのネットワークトラフィックが中断する可能性があります。
特定のインターフェイスレベルのネットワーク sysctl
設定を変更するには、次の手順を使用して、Container Network Interface (CNI) チューニングプラグインを使用して、SriovNetwork
カスタムリソース (CR) を作成します。
前提条件
- OpenShift Container Platform CLI (oc) をインストールします。
- cluster-admin 権限を持つユーザーとして OpenShift Container Platform クラスターにログインします。
手順
次の例の CR のように、ボンドされたインターフェイスの
SriovNetwork
カスタムリソース (CR) を作成します。YAML をsriov-network-attachment.yaml
ファイルとして保存します。apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: allvalidflags 1 namespace: openshift-sriov-network-operator 2 spec: resourceName: policyallflags 3 networkNamespace: sysctl-tuning-test 4 capabilities: '{ "mac": true, "ips": true }' 5
- 1
- オブジェクトの名前。SR-IOV Network Operator は、同じ名前を持つ NetworkAttachmentDefinition オブジェクトを作成します。
- 2
- SR-IOV Network Operator がインストールされている namespace。
- 3
- この追加ネットワークの SR-IOV ハードウェアを定義する
SriovNetworkNodePolicy
オブジェクトのspec.resourceName
パラメーターの値。 - 4
SriovNetwork
オブジェクトのターゲット namespace。ターゲット namespace の Pod のみを追加ネットワークに割り当てることができます。- 5
- オプション: この追加ネットワークに設定する機能。IP アドレスのサポートを有効にするには、
"{ "ips": true }"
を指定できます。または、MAC アドレスのサポートを有効にするには"{ "mac": true }"
を指定します。
SriovNetwork
リソースを作成します。$ oc create -f sriov-network-attachment.yaml
次の例の CR のように、ボンドネットワーク接続定義を作成します。YAML を
sriov-bond-network-interface.yaml
ファイルとして保存します。apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: bond-sysctl-network namespace: sysctl-tuning-test spec: config: '{ "cniVersion":"0.4.0", "name":"bound-net", "plugins":[ { "type":"bond", 1 "mode": "active-backup", 2 "failOverMac": 1, 3 "linksInContainer": true, 4 "miimon": "100", "links": [ 5 {"name": "net1"}, {"name": "net2"} ], "ipam":{ 6 "type":"static" } }, { "type":"tuning", 7 "capabilities":{ "mac":true }, "sysctl":{ "net.ipv4.conf.IFNAME.accept_redirects": "0", "net.ipv4.conf.IFNAME.accept_source_route": "0", "net.ipv4.conf.IFNAME.disable_policy": "1", "net.ipv4.conf.IFNAME.secure_redirects": "0", "net.ipv4.conf.IFNAME.send_redirects": "0", "net.ipv6.conf.IFNAME.accept_redirects": "0", "net.ipv6.conf.IFNAME.accept_source_route": "1", "net.ipv6.neigh.IFNAME.base_reachable_time_ms": "20000", "net.ipv6.neigh.IFNAME.retrans_time_ms": "2000" } } ] }'
- 1
- タイプは
bond
です。 - 2
mode
属性は、ボンドモードを指定します。サポートされているボンドモードは次のとおりです。-
balance-rr
- 0 -
active-backup
- 1 balance-xor
- 2balance-rr
またはbalance-xor
モードの場合には、SR-IOV Virtual Function のtrust
モードをon
に設定する必要があります。
-
- 3
failover
属性は、active-backup モードでは必須です。- 4
linksInContainer=true
フラグは、必要なインターフェイスがコンテナー内にあることをボンディング CNI に通知します。デフォルトでは、ボンディング CNI は、SRIOV および Multus との統合で機能しないホストで、このようなインターフェイスを検索します。- 5
links
セクションは、結合の作成に使用するインターフェイスを定義します。デフォルトでは、Multus は接続されたインターフェイスに "net" と 1 から始まる連続した番号の名前を付けます。- 6
- YAML ブロックスケーラーとしての IPAM CNI プラグインの設定オブジェクトプラグインは、アタッチメント定義への IP アドレスの割り当てを管理します。この Pod の例では、IP アドレスは手動で設定されているため、この場合、
ipam
は static に設定されています。 - 7
- デバイスに追加の機能を追加します。たとえば、
type
フィールドをtuning
に設定します。設定したいインターフェイスレベルのネットワークsysctl
を sysctl フィールドに指定します。この例では、設定可能なすべてのインターフェイスレベルのネットワークsysctl
設定を設定します。
ボンドネットワーク接続リソースを作成します。
$ oc create -f sriov-bond-network-interface.yaml
NetworkAttachmentDefinition
CR が正常に作成されることの確認
以下のコマンドを実行して、SR-IOV Network Operator が
NetworkAttachmentDefinition
CR を作成していることを確認します。$ oc get network-attachment-definitions -n <namespace> 1
- 1
<namespace>
は、ネットワーク割り当ての設定時に指定した networkNamespace に置き換えます (例:sysctl-tuning-test)
。
出力例
NAME AGE bond-sysctl-network 22m allvalidflags 47m
注記SR-IOV Network Operator が CR を作成するまでに遅延が生じる可能性があります。
SR-IOV ネットワークリソースの追加が成功したことの確認
チューニング CNI が正しく設定され、追加の SR-IOV ネットワーク割り当てが接続されていることを確認するには、以下を実行します。
Pod
CR を作成します。たとえば、次の YAML をexamplepod.yaml
ファイルとして保存します。apiVersion: v1 kind: Pod metadata: name: tunepod namespace: sysctl-tuning-test annotations: k8s.v1.cni.cncf.io/networks: |- [ {"name": "allvalidflags"}, 1 {"name": "allvalidflags"}, { "name": "bond-sysctl-network", "interface": "bond0", "mac": "0a:56:0a:83:04:0c", 2 "ips": ["10.100.100.200/24"] 3 } ] spec: containers: - name: podexample image: centos command: ["/bin/bash", "-c", "sleep INF"] securityContext: runAsUser: 2000 runAsGroup: 3000 allowPrivilegeEscalation: false capabilities: drop: ["ALL"] securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault
- 1
- SR-IOV ネットワーク割り当て定義 CR の名前。
- 2
- オプション: SR-IOV ネットワーク割り当て定義 CR で定義されるリソースタイプから割り当てられる SR-IOV デバイスの MAC アドレス。この機能を使用するには、SriovNetwork オブジェクトで
{ "mac": true }
も指定する必要があります。 - 3
- オプション: SR-IOV ネットワーク割り当て定義 CR で定義されるリソースタイプから割り当てられる SR-IOV デバイスの IP アドレス。IPv4 と IPv6 アドレスの両方がサポートされます。この機能を使用するには、
SriovNetwork
オブジェクトで{ "ips": true }
も指定する必要があります。
YAML を適用します。
$ oc apply -f examplepod.yaml
次のコマンドを実行して、Pod が作成されていることを確認します。
$ oc get pod -n sysctl-tuning-test
出力例
NAME READY STATUS RESTARTS AGE tunepod 1/1 Running 0 47s
次のコマンドを実行して、Pod にログインします。
$ oc rsh -n sysctl-tuning-test tunepod
設定された
sysctl
フラグの値を確認します。次のコマンドを実行して、net.ipv6.neigh.IFNAME.base_reachable_time_ms
の値を見つけます。$ sysctl net.ipv6.neigh.bond0.base_reachable_time_ms
出力例
net.ipv6.neigh.bond0.base_reachable_time_ms = 20000
19.6.4. オールマルチキャストモード
特にルートレスアプリケーションのコンテキストでは、オールマルチキャストモードを有効にすることが重要です。このモードを有効にしない場合は、Pod のセキュリティーコンテキスト制約 (SCC) に NET_ADMIN
ケイパビリティーを付与する必要があります。NET_ADMIN
ケイパビリティーを使用して、特定の要件を超える変更を行う権限を Pod に付与すると、セキュリティーの脆弱性が露呈する可能性があります。
チューニング CNI プラグインは、オールマルチキャストモードを含め、いくつかのインターフェイス属性の変更をサポートしています。このモードを有効にすると、SR-IOV ネットワークデバイス上で設定された Virtual Function (VF) 上で実行されているアプリケーションは、接続されている物理機能が同じか異なるかにかかわらず、他の VF 上のアプリケーションからマルチキャストトラフィックを受信できます。
19.6.4.1. SR-IOV ネットワーク上でオールマルチキャストモードを有効にする
SR-IOV インターフェイスでオールマルチキャストモードを有効にするには、次の方法があります。
-
SriovNetwork
リソースのmetaPlugins
パラメーターにチューニング設定を追加します。 チューニング設定で、
allmulti
フィールドをtrue
に設定します。注記信頼を有効にして Virtual Function (VF) を作成していることを確認してください。
SR-IOV Network Operator は追加ネットワークの定義を管理します。作成する追加ネットワークを指定する場合、SR-IOV Network Operator は NetworkAttachmentDefinition
カスタムリソース (CR) を自動的に作成します。
SR-IOV Network Operator が管理する NetworkAttachmentDefinition
カスタムリソースは編集しないでください。これを実行すると、追加ネットワークのネットワークトラフィックが中断する可能性があります。
このガイダンスに従って、SR-IOV ネットワーク上でオールマルチキャストモードを有効にします。
前提条件
- OpenShift Container Platform CLI (oc) がインストールされている。
-
cluster-admin
権限を持つユーザーとして OpenShift Container Platform クラスターにログインしている。 - SR-IOV Network Operator がインストールされている。
-
適切な
SriovNetworkNodePolicy
オブジェクトを設定している。
手順
Mellanox ConnectX-5 デバイスの
SriovNetworkNodePolicy
オブジェクトを定義する次の設定を使用して、YAML ファイルを作成します。YAML ファイルをsriovnetpolicy-mlx.yaml
として保存します。apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: sriovnetpolicy-mlx namespace: openshift-sriov-network-operator spec: deviceType: netdevice nicSelector: deviceID: "1017" pfNames: - ens8f0np0#0-9 rootDevices: - 0000:d8:00.0 vendor: "15b3" nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true" numVfs: 10 priority: 99 resourceName: resourcemlx
-
オプション: SR-IOV 対応クラスターノードにラベルが付けられていない場合は、
SriovNetworkNodePolicy.Spec.NodeSelector
ラベルを追加します。ノードのラベル付けの詳細は、「ノードのラベルを更新する方法について」を参照してください。 以下のコマンドを実行して
SriovNetworkNodePolicy
オブジェクトを作成します。$ oc create -f sriovnetpolicy-mlx.yaml
設定の更新を適用すると、
sriov-network-operator
namespace 内のすべての Pod が自動的にRunning
ステータスに移行します。次のコマンドを実行して、
enable-allmulti-test
namespace を作成します。$ oc create namespace enable-allmulti-test
追加の SR-IOV ネットワーク接続用の
SriovNetwork
カスタムリソース (CR) を作成し、以下のサンプル CR YAML のようにmetaPlugins
設定を挿入し、そのファイルをsriov-enable-all-multicast.yaml
として保存します。apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: enableallmulti 1 namespace: openshift-sriov-network-operator 2 spec: resourceName: enableallmulti 3 networkNamespace: enable-allmulti-test 4 ipam: '{ "type": "static" }' 5 capabilities: '{ "mac": true, "ips": true }' 6 trust: "on" 7 metaPlugins : | 8 { "type": "tuning", "capabilities":{ "mac":true }, "allmulti": true } }
- 1
- オブジェクトの名前を指定します。SR-IOV Network Operator は、同じ名前を持つ
NetworkAttachmentDefinition
オブジェクトを作成します。 - 2
- SR-IOV Network Operator がインストールされている namespace を指定します。
- 3
- この追加ネットワークの SR-IOV ハードウェアを定義する
SriovNetworkNodePolicy
オブジェクトのspec.resourceName
パラメーター値を指定します。 - 4
SriovNetwork
オブジェクトのターゲット namespace を指定します。ターゲット namespace の Pod のみを追加ネットワークに割り当てることができます。- 5
- IPAM CNI プラグインの設定オブジェクトを YAML ブロックスケーラーとして指定します。プラグインは、アタッチメント定義への IP アドレスの割り当てを管理します。
- 6
- オプション: 追加のネットワークの機能を設定します。IP アドレスのサポートを有効にするには、
"{ "ips": true }"
を指定できます。または、MAC アドレスのサポートを有効にするには"{ "mac": true }"
を指定します。 - 7
- Virtual Function の信頼モードを指定します。これは "on" に設定する必要があります。
- 8
metaPlugins
パラメーターを使用して、デバイスにケイパビリティーをさらに追加します。このユースケースでは、type
フィールドをtuning
に設定し、allmulti
フィールドを追加してtrue
に設定します。
次のコマンドを実行して、
SriovNetwork
リソースを作成します。$ oc create -f sriov-enable-all-multicast.yaml
NetworkAttachmentDefinition
CR の検証
以下のコマンドを実行して、SR-IOV Network Operator が
NetworkAttachmentDefinition
CR を作成していることを確認します。$ oc get network-attachment-definitions -n <namespace> 1
- 1
<namespace>
を、SriovNetwork
オブジェクトで指定したnetworkNamespace
の値に置き換えます。この例では、enable-allmulti-test
です。
出力例
NAME AGE enableallmulti 14m
注記SR-IOV Network Operator が CR を作成するまでに遅延が生じる可能性があります。
次のコマンドを実行して、SR-IOV ネットワークリソースに関する情報を表示します。
$ oc get sriovnetwork -n openshift-sriov-network-operator
追加の SR-IOV ネットワーク接続の検証
チューニング CNI が正しく設定されていること、および追加の SR-IOV ネットワーク接続が割り当てられていることを確認するには、次の手順を実行します。
Pod
CR を作成します。次のサンプル YAML をexamplepod.yaml
という名前のファイルに保存します。apiVersion: v1 kind: Pod metadata: name: samplepod namespace: enable-allmulti-test annotations: k8s.v1.cni.cncf.io/networks: |- [ { "name": "enableallmulti", 1 "mac": "0a:56:0a:83:04:0c", 2 "ips": ["10.100.100.200/24"] 3 } ] spec: containers: - name: podexample image: centos command: ["/bin/bash", "-c", "sleep INF"] securityContext: runAsUser: 2000 runAsGroup: 3000 allowPrivilegeEscalation: false capabilities: drop: ["ALL"] securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault
- 1
- SR-IOV network attachment definition CR の名前を指定します。
- 2
- オプション: SR-IOV network attachment definition CR で定義されるリソースタイプから割り当てられる SR-IOV デバイスの MAC アドレスを指定します。この機能を使用するには、SriovNetwork オブジェクトで
{"mac": true}
も指定する必要があります。 - 3
- オプション: SR-IOV ネットワーク割り当て定義 CR で定義されるリソースタイプから割り当てられる SR-IOV デバイスの IP アドレスを指定します。IPv4 と IPv6 アドレスの両方がサポートされます。この機能を使用するには、
SriovNetwork
オブジェクトで{ "ips": true }
も指定する必要があります。
以下のコマンドを実行して
Pod
を作成します。$ oc apply -f examplepod.yaml
次のコマンドを実行して、Pod が作成されていることを確認します。
$ oc get pod -n enable-allmulti-test
出力例
NAME READY STATUS RESTARTS AGE samplepod 1/1 Running 0 47s
次のコマンドを実行して、Pod にログインします。
$ oc rsh -n enable-allmulti-test samplepod
次のコマンドを実行して、Pod に関連付けられているすべてのインターフェイスをリスト表示します。
sh-4.4# ip link
出力例
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0@if22: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8901 qdisc noqueue state UP mode DEFAULT group default link/ether 0a:58:0a:83:00:10 brd ff:ff:ff:ff:ff:ff link-netnsid 0 1 3: net1@if24: <BROADCAST,MULTICAST,ALLMULTI,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default link/ether ee:9b:66:a4:ec:1d brd ff:ff:ff:ff:ff:ff link-netnsid 0 2