3.7. SR-IOV ネットワークポリシーの更新中に並列ノードドレインを設定する
デフォルトでは、SR-IOV Network Operator は、ポリシーを変更するたびに、ノードからワークロードをドレイン (解放) します。Operator は、再設定がワークロードに影響を与えないように、このアクションを一度に 1 つのノードで実行します。
大規模なクラスターでは、ノードを順番にドレインするには時間がかかり、数時間または数日かかることもあります。時間に敏感な環境では、SriovNetworkPoolConfig カスタムリソース (CR) で並列ノードドレインを有効にして、SR-IOV ネットワーク設定のロールアウトを高速化できます。
並列ドレインを設定するには、SriovNetworkPoolConfig CR を使用してノードプールを作成します。次に、プールにノードを追加し、Operator が並行してドレインできるプール内のノードの最大数を定義できます。このアプローチでは、実行中のワークロードを処理するために十分なノードがプール内に残っていることを確認しながら、並列ドレインを有効にして再設定を高速化できます。
ノードは 1 つの SR-IOV ネットワークプール設定にのみ属することができます。ノードがプールに含まれていない場合、そのノードは、一度に 1 つのノードだけをドレインするように設定された仮想のデフォルトプールに追加されます。
ドレイン処理中にノードが再起動する可能性があります。
この手順では、SR-IOV リソースを作成し、ノードを並列ドレインする必要があります。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 -
cluster-admin権限を持つユーザーとしてログインしている。 - SR-IOV Network Operator がインストールされている。
- ノードには SR-IOV をサポートするハードウェアがある。
手順
SriovNetworkPoolConfigリソースを定義する YAML ファイルを作成します。sriov-nw-pool.yamlファイルの例apiVersion: v1 kind: SriovNetworkPoolConfig metadata: name: pool-1 namespace: openshift-sriov-network-operator spec: maxUnavailable: 2 nodeSelector: matchLabels: node-role.kubernetes.io/worker: ""ここでは、以下のようになります。
name-
SriovNetworkPoolConfigオブジェクトの名前を指定します。 namespace- SR-IOV Network Operator がインストールされている namespace を指定します。
maxUnavailable- 更新中にプール内で使用できなくなるノードの整数値またはパーセンテージ値を指定します。たとえば、ノードが 10 個あり、使用不可の最大数を 2 に設定した場合は、一度に並列ドレインできるノードは 2 個だけとなり、ワークロードの処理には 8 個のノードが残ります。
nodeSelector-
ノードセレクターを使用して、プールを追加するノードを指定します。この例では、
workerロールを持つすべてのノードをプールに追加します。
次のコマンドを実行して、
SriovNetworkPoolConfigリソースを作成します。$ oc create -f sriov-nw-pool.yaml次のコマンドを実行して、
sriov-testnamespace を作成します。$ oc create namespace sriov-test次のサンプル YAML ファイルで示されるとおり、
SriovNetworkNodePolicyリソースを定義する YAML ファイルを作成します。apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: sriov-nic-1 namespace: openshift-sriov-network-operator spec: deviceType: netdevice nicSelector: pfNames: ["ens1"] nodeSelector: node-role.kubernetes.io/worker: "" numVfs: 5 priority: 99 resourceName: sriov_nic_1次のコマンドを実行して、
SriovNetworkNodePolicyリソースを作成します。$ oc create -f sriov-node-policy.yamlSriovNetworkリソースを定義する YAML ファイルを作成します。sriov-network.yamlファイルの例apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: sriov-nic-1 namespace: openshift-sriov-network-operator spec: linkState: auto networkNamespace: sriov-test resourceName: sriov_nic_1 capabilities: '{ "mac": true, "ips": true }' ipam: '{ "type": "static" }'次のコマンドを実行して、
SriovNetworkリソースを作成します。$ oc create -f sriov-network.yaml次のコマンドを実行して、作成したノードプールを表示します。
$ oc get sriovNetworkpoolConfig -n openshift-sriov-network-operator予想される出力には、
workerロールを持つすべてのノードを含むノードプールの名前 (pool-1など) と、ノードプールの秒単位の経過時間 (67sなど) が表示されます。クラスター内のワークロードのドレインをトリガーするには、
SriovNetworkNodePolicyリソース内の Virtual Function の数を更新します。$ oc patch SriovNetworkNodePolicy sriov-nic-1 -n openshift-sriov-network-operator --type merge -p '{"spec": {"numVfs": 4}}'次のコマンドを実行して、ターゲットクラスターのドレイン状態を確認します。
$ oc get sriovNetworkNodeState -n openshift-sriov-network-operator出力例
NAMESPACE NAME SYNC STATUS DESIRED SYNC STATE CURRENT SYNC STATE AGE openshift-sriov-network-operator worker-0 InProgress Drain_Required DrainComplete 3d10h openshift-sriov-network-operator worker-1 InProgress Drain_Required DrainComplete 3d10hドレインプロセスが完了すると、
SYNC STATUSがSucceededに変わり、DESIRED SYNC STATEとCURRENT SYNC STATEの値がIDLEに戻ります。