10.2. SR-IOV Network Operator の設定
Single Root I/O Virtualization (SR-IOV) Network Operator は、クラスター内の SR-IOV ネットワークデバイスとネットワークアタッチメントを管理します。
10.2.1. SR-IOV Network Operator の設定
- すべての SR-IOV Operator コンポーネントをデプロイするには、 - SriovOperatorConfigカスタムリソース (CR) を作成します。- 次の YAML を使用して、 - sriovOperatorConfig.yamlという名前のファイルを作成します。- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- SriovOperatorConfigリソースの有効な名前は- defaultのみであり、Operator がデプロイされている namespace 内にある必要があります。
- 2
- enableInjectorフィールドは、CR で指定されていないか、明示的に- trueに設定されていない場合、デフォルトで- falseまたは- <none>に設定されます。その場合、namespace で- network-resources-injectorPod が実行されなくなります。推奨設定は- trueです。
- 3
- enableOperatorWebhookフィールドは、CR で指定されていないか、明示的に true に設定されていない場合、デフォルトで- falseまたは- <none>に設定されます。その場合、namespace で- operator-webhookPod が実行されなくなります。推奨設定は- trueです。
 
- 次のコマンドを実行して、リソースを作成します。 - oc apply -f sriovOperatorConfig.yaml - $ oc apply -f sriovOperatorConfig.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
10.2.1.1. SR-IOV Network Operator config カスタムリソース
						sriovoperatorconfig カスタムリソースのフィールドは、以下の表で説明されています。
					
| フィールド | 型 | 説明 | 
|---|---|---|
| 
										 | 
										 | 
										SR-IOV Network Operator インスタンスの名前を指定します。デフォルト値は  | 
| 
										 | 
										 | 
										SR-IOV Network Operator インスタンスの namespace を指定します。デフォルト値は  | 
| 
										 | 
										 | 選択されたノードで SR-IOV Network Config Daemon のスケジューリングを制御するノードの選択オプションを指定します。デフォルトでは、このフィールドは設定されておらず、Operator はワーカーノードに SR-IOV Network Config デーモンセットを配置します。 | 
| 
										 | 
										 | 
										新しいポリシーを適用してノードに NIC を設定する時に、ノードドレインプロセスを無効にするか、有効にするかを指定します。このフィールドを  
										シングルノードクラスターの場合は、Operator のインストール後にこのフィールドを  | 
| 
										 | 
										 | Network Resources Injector デーモンセットを有効にするか無効にするかを指定します。 | 
| 
										 | 
										 | Operator Admission Controller の Webhook デーモンセットを有効にするか無効にするかを指定します。 | 
| 
										 | 
										 | 
										Operator のログの詳細レベルを指定します。デフォルトでは、このフィールドは  | 
| 
										 | 
										 | 
										任意の機能を有効にするか無効にするかを指定します。たとえば、 | 
| 
										 | 
										 | 
										SR-IOV Network Operator メトリクスを有効にするか無効にするかを指定します。デフォルトでは、このフィールドは  | 
10.2.1.2. Network Resources Injector について
Network Resources Injector は Kubernetes Dynamic Admission Controller アプリケーションです。これは、以下の機能を提供します。
- SR-IOV リソース名を SR-IOV ネットワーク割り当て定義アノテーションに従って追加するための、Pod 仕様でのリソース要求および制限の変更。
- 
								Pod のアノテーション、ラベル、および huge page の要求および制限を公開するための Downward API ボリュームでの Pod 仕様の変更。Pod で実行されるコンテナーは、公開される情報に /etc/podnetinfoパスでファイルとしてアクセスできます。
						Network Resources Injector は、SriovOperatorConfig CR で enableInjector が true に設定されている場合、SR-IOV Network Operator によって有効になります。network-resources-injector Pod は、すべてのコントロールプレーンノード上でデーモンセットとして実行されます。以下は、3 つのコントロールプレーンノードを持つクラスターで実行される Network Resources Injector Pod の例です。
					
oc get pods -n openshift-sriov-network-operator
$ oc get pods -n openshift-sriov-network-operator出力例
NAME READY STATUS RESTARTS AGE network-resources-injector-5cz5p 1/1 Running 0 10m network-resources-injector-dwqpx 1/1 Running 0 10m network-resources-injector-lktz5 1/1 Running 0 10m
NAME                                      READY   STATUS    RESTARTS   AGE
network-resources-injector-5cz5p          1/1     Running   0          10m
network-resources-injector-dwqpx          1/1     Running   0          10m
network-resources-injector-lktz5          1/1     Running   0          10m10.2.1.3. Network Resources Injector の無効化または有効化
Network Resources Injector を無効または有効にするには、次の手順を実行します。
前提条件
- 
								OpenShift CLI (oc) がインストールされている。
- 
								cluster-admin権限を持つユーザーとしてログインしている。
- SR-IOV Network Operator がインストールされていること。
手順
- enableInjectorフィールドを設定します。- <value>を- falseに置き換えて機能を無効にするか、- trueに置き換えて機能を有効にします。- oc patch sriovoperatorconfig default \ --type=merge -n openshift-sriov-network-operator \ --patch '{ "spec": { "enableInjector": <value> } }'- $ oc patch sriovoperatorconfig default \ --type=merge -n openshift-sriov-network-operator \ --patch '{ "spec": { "enableInjector": <value> } }'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow ヒント- または、以下の YAML を適用して Operator を更新することもできます。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
10.2.1.4. SR-IOV Network Operator Admission Controller Webhook について
SR-IOV Network Operator Admission Controller Webhook は Kubernetes Dynamic Admission Controller アプリケーションです。これは、以下の機能を提供します。
- 
								作成時または更新時の SriovNetworkNodePolicyCR の検証
- 
								CR の作成または更新時の priorityおよびdeviceTypeフィールドのデフォルト値の設定によるSriovNetworkNodePolicyCR の変更
						SR-IOV Network Operator Admission Controller Webhook は、SriovOperatorConfig CR で enableOperatorWebhook が true に設定されている場合、Operator によって有効になります。operator-webhook Pod は、すべてのコントロールプレーンノード上でデーモンセットとして実行されます。
					
SR-IOV Network Operator Admission Controller Webhook を無効にする場合は注意してください。トラブルシューティングなどの特定の状況下や、サポートされていないデバイスを使用する場合は、Webhook を無効にすることができます。サポート対象外のデバイスの設定は、サポート対象外の NIC を使用するための SR-IOV Network Operator の設定 を参照してください。
以下は、3 つのコントロールプレーンノードを持つクラスターで実行される Operator Admission Controller Webhook Pod の例です。
oc get pods -n openshift-sriov-network-operator
$ oc get pods -n openshift-sriov-network-operator出力例
NAME READY STATUS RESTARTS AGE operator-webhook-9jkw6 1/1 Running 0 16m operator-webhook-kbr5p 1/1 Running 0 16m operator-webhook-rpfrl 1/1 Running 0 16m
NAME                                      READY   STATUS    RESTARTS   AGE
operator-webhook-9jkw6                    1/1     Running   0          16m
operator-webhook-kbr5p                    1/1     Running   0          16m
operator-webhook-rpfrl                    1/1     Running   0          16m10.2.1.5. SR-IOV Network Operator Admission Controller Webhook の無効化または有効化
Admission Controller Webhook を無効または有効にするには、次の手順を実行します。
前提条件
- 
								OpenShift CLI (oc) がインストールされている。
- 
								cluster-admin権限を持つユーザーとしてログインしている。
- SR-IOV Network Operator がインストールされていること。
手順
- enableOperatorWebhookフィールドを設定します。- <value>を- falseに置き換えて機能を無効するか、- trueに置き換えて機能を有効にします。- oc patch sriovoperatorconfig default --type=merge \ -n openshift-sriov-network-operator \ --patch '{ "spec": { "enableOperatorWebhook": <value> } }'- $ oc patch sriovoperatorconfig default --type=merge \ -n openshift-sriov-network-operator \ --patch '{ "spec": { "enableOperatorWebhook": <value> } }'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow ヒント- または、以下の YAML を適用して Operator を更新することもできます。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
10.2.1.6. カスタムノードセレクターについて
						SR-IOV Network Config デーモンは、クラスターノード上の SR-IOV ネットワークデバイスを検出し、設定します。デフォルトで、これはクラスター内のすべての worker ノードにデプロイされます。ノードラベルを使用して、SR-IOV Network Config デーモンが実行するノードを指定できます。
					
10.2.1.7. SR-IOV Network Config Daemon のカスタム NodeSelector の設定
						SR-IOV Network Config デーモンは、クラスターノード上の SR-IOV ネットワークデバイスを検出し、設定します。デフォルトで、これはクラスター内のすべての worker ノードにデプロイされます。ノードラベルを使用して、SR-IOV Network Config デーモンが実行するノードを指定できます。
					
SR-IOV Network Config デーモンがデプロイされるノードを指定するには、以下の手順を実行します。
							configDaemonNodeSelector フィールドを更新する際に、SR-IOV Network Config デーモンがそれぞれの選択されたノードに再作成されます。デーモンが再作成されている間、クラスターのユーザーは新規の SR-IOV Network ノードポリシーを適用したり、新規の SR-IOV Pod を作成したりできません。
						
手順
- Operator のノードセレクターを更新するには、以下のコマンドを入力します。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 以下の例のように、 - <node_label>を適用するラベルに置き換えます:- "node-role.kubernetes.io/worker": ""ヒント- または、以下の YAML を適用して Operator を更新することもできます。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
10.2.1.8. 単一ノードのインストール用の SR-IOV Network Operator の設定
デフォルトでは、SR-IOV Network Operator は、ポリシーを変更するたびに、ノードからワークロードをドレイン (解放) します。Operator は、このアクションを実行して、再設定する前に Virtual Function を使用しているワークロードがないことを確認します。
1 つのノードにインストールする場合には、ワークロードを受信するノードは他にありません。そのため、Operator は、単一のノードからワークロードがドレインされないように設定する必要があります。
以下の手順を実行してワークロードのドレインを無効にした後に、SR-IOV ネットワークインターフェイスを使用しているワークロードを削除してから SR-IOV ネットワークノードのポリシーを変更する必要があります。
前提条件
- 
								OpenShift CLI (oc) がインストールされている。
- 
								cluster-admin権限を持つユーザーとしてログインしている。
- SR-IOV Network Operator がインストールされていること。
手順
- disableDrainフィールドを- trueに設定し、- configDaemonNodeSelectorフィールドを- node-role.kubernetes.io/master: ""に設定するには、以下のコマンドを入力します。- oc patch sriovoperatorconfig default --type=merge -n openshift-sriov-network-operator --patch '{ "spec": { "disableDrain": true, "configDaemonNodeSelector": { "node-role.kubernetes.io/master": "" } } }'- $ oc patch sriovoperatorconfig default --type=merge -n openshift-sriov-network-operator --patch '{ "spec": { "disableDrain": true, "configDaemonNodeSelector": { "node-role.kubernetes.io/master": "" } } }'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow ヒント- または、以下の YAML を適用して Operator を更新することもできます。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
10.2.1.9. Hosted Control Plane 用の SR-IOV Operator のデプロイ
ホスティングサービスクラスターを設定してデプロイすると、ホステッドクラスターで SR-IOV Operator へのサブスクリプションを作成できます。SR-IOV Pod は、コントロールプレーンではなくワーカーマシンで実行されます。
前提条件
AWS 上でホステッドクラスターを設定およびデプロイしている。
手順
- namespace と Operator グループを作成します。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- SR-IOV Operator へのサブスクリプションを作成します。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
検証
- SR-IOV Operator の準備ができていることを確認するには、次のコマンドを実行し、結果の出力を表示します。 - oc get csv -n openshift-sriov-network-operator - $ oc get csv -n openshift-sriov-network-operator- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - NAME DISPLAY VERSION REPLACES PHASE sriov-network-operator.4.17.0-202211021237 SR-IOV Network Operator 4.17.0-202211021237 sriov-network-operator.4.17.0-202210290517 Succeeded - NAME DISPLAY VERSION REPLACES PHASE sriov-network-operator.4.17.0-202211021237 SR-IOV Network Operator 4.17.0-202211021237 sriov-network-operator.4.17.0-202210290517 Succeeded- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- SR-IOV Pod がデプロイされていることを確認するには、次のコマンドを実行します。 - oc get pods -n openshift-sriov-network-operator - $ oc get pods -n openshift-sriov-network-operator- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
10.2.2. SR-IOV ネットワークメトリクスエクスポーターについて
Single Root I/O Virtualization (SR-IOV) ネットワークメトリクスエクスポーターは、SR-IOV Virtual Function (VF) のメトリクスを読み取り、これらの VF メトリクスを Prometheus 形式で公開します。SR-IOV ネットワークメトリクスエクスポーターが有効になっている場合は、OpenShift Container Platform Web コンソールを使用して SR-IOV VF メトリクスをクエリーし、SR-IOV Pod のネットワークアクティビティーを監視できます。
Web コンソールを使用して SR-IOV VF メトリクスをクエリーすると、SR-IOV ネットワークメトリクスエクスポーターは、VF が接続されている Pod の名前と namespace とともに、VF ネットワーク統計を取得して返します。
次の表は、メトリクスエクスポーターが Prometheus 形式で読み取り、公開する SR-IOV VF メトリクスを説明します。
| メトリクス | 説明 | VF メトリクスを調べるための PromQL クエリーの例 | 
|---|---|---|
| 
									 | Virtual Function ごとに受信したバイト数。 | 
									 | 
| 
									 | Virtual Function ごとに送信されたバイト数。 | 
									 | 
| 
									 | Virtual Function ごとの受信パケット数。 | 
									 | 
| 
									 | Virtual Function あたりの送信パケット数。 | 
									 | 
| 
									 | Virtual Function ごとに受信時にドロップされたパケット。 | 
									 | 
| 
									 | Virtual Function ごとに送信中にドロップされたパケット。 | 
									 | 
| 
									 | Virtual Function ごとに受信したマルチキャストパケット。 | 
									 | 
| 
									 | Virtual Function ごとに受信したブロードキャストパケット。 | 
									 | 
| 
									 | アクティブな Pod にリンクされた Virtual Function。 | - | 
これらのクエリーを kube-state-metrics と組み合わせて、SR-IOV Pod に関する詳細情報を取得することもできます。たとえば、次のクエリーを使用して、標準の Kubernetes Pod ラベルからアプリケーション名とともに VF ネットワーク統計を取得できます。
(sriov_vf_tx_packets * on (pciAddr,node) group_left(pod,namespace) sriov_kubepoddevice) * on (pod,namespace) group_left (label_app_kubernetes_io_name) kube_pod_labels
(sriov_vf_tx_packets * on (pciAddr,node)  group_left(pod,namespace)  sriov_kubepoddevice) * on (pod,namespace) group_left (label_app_kubernetes_io_name) kube_pod_labels10.2.2.1. SR-IOV ネットワークメトリクスエクスポーターを有効にする
						Single Root I/O Virtualization (SR-IOV) ネットワークメトリクスエクスポーターは、デフォルトでは無効になっています。メトリクスエクスポーターを有効にするには、spec.featureGates.metricsExporter フィールドを true に設定する必要があります。
					
メトリクスエクスポーターが有効になっていると、SR-IOV Network Operator は SR-IOV 機能を持つノードにのみメトリクスエクスポーターをデプロイします。
前提条件
- 
								OpenShift CLI (oc) がインストールされている。
- 
								cluster-admin権限を持つユーザーとしてログインしている。
- SR-IOV Network Operator がインストールされている。
手順
- 次のコマンドを実行して、クラスター監視を有効にします。 - oc label ns/openshift-sriov-network-operator openshift.io/cluster-monitoring=true - $ oc label ns/openshift-sriov-network-operator openshift.io/cluster-monitoring=true- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - クラスター監視を有効にするには、SR-IOV Network Operator をインストールした namespace に - openshift.io/cluster-monitoring=trueラベルを追加する必要があります。
- 次のコマンドを実行して、 - spec.featureGates.metricsExporterフィールドを- trueに設定します。- oc patch -n openshift-sriov-network-operator sriovoperatorconfig/default \ --type='merge' -p='{"spec": {"featureGates": {"metricsExporter": true}}}'- $ oc patch -n openshift-sriov-network-operator sriovoperatorconfig/default \ --type='merge' -p='{"spec": {"featureGates": {"metricsExporter": true}}}'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
検証
- 次のコマンドを実行して、SR-IOV ネットワークメトリクスエクスポーターが有効になっていることを確認します。 - oc get pods -n openshift-sriov-network-operator - $ oc get pods -n openshift-sriov-network-operator- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - NAME READY STATUS RESTARTS AGE operator-webhook-hzfg4 1/1 Running 0 5d22h sriov-network-config-daemon-tr54m 1/1 Running 0 5d22h sriov-network-metrics-exporter-z5d7t 1/1 Running 0 10s sriov-network-operator-cc6fd88bc-9bsmt 1/1 Running 0 5d22h - NAME READY STATUS RESTARTS AGE operator-webhook-hzfg4 1/1 Running 0 5d22h sriov-network-config-daemon-tr54m 1/1 Running 0 5d22h sriov-network-metrics-exporter-z5d7t 1/1 Running 0 10s sriov-network-operator-cc6fd88bc-9bsmt 1/1 Running 0 5d22h- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - sriov-network-metrics-exporterPod は- READY状態である必要があります。
- オプション: OpenShift Container Platform Web コンソールを使用して、SR-IOV Virtual Function (VF) メトリクスを調べます。詳細は、「メトリクスのクエリー」を参照してください。