8.5. SR-IOV ネットワーク割り当ての設定
クラスター内の Single Root I/O Virtualization (SR-IOV) デバイスのネットワーク割り当てを設定できます。
8.5.1. SR-IOV の追加ネットワークの設定
SriovNetwork custom resource (CR) を作成して、SR-IOV ハードウェアを使用する追加のネットワークを設定できます。SriovNetwork CR の作成時に、SR-IOV Operator は NetworkAttachmentDefinition CR を自動的に作成します。
SriovNetwork CR が running
状態の Pod に割り当てられている場合、これを変更したり、削除したりしないでください。
前提条件
-
OpenShift CLI (
oc
) をインストールします。 -
cluster-admin
権限を持つユーザーとしてのログインします。
手順
-
以下の SriovNetwork CR を作成してから、YAML を
<name>-sriov-network.yaml
ファイルに保存します。<name>
を、この追加ネットワークの名前に置き換えます。
apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: <name> 1 namespace: openshift-sriov-network-operator 2 spec: networkNamespace: <target_namespace> 3 ipam: <ipam> 4 vlan: <vlan> 5 resourceName: <sriov_resource_name> 6 linkState: <link_state> 7 maxTxRate: <max_tx_rate> 8 minTxRate: <min_rx_rate> 9 vlanQoS: <vlan_qos> 10 spoofChk: "<spoof_check>" 11 trust: "<trust_vf>" 12 capabilities: <capabilities> 13
- 1
<name>
を CR の名前に置き換えます。SR-IOV ネットワーク Operator は、同じ名前を持つ NetworkAttachmentDefinition CR を作成します。- 2
- SR-IOV Operator がインストールされている namespace を指定します。
- 3
- オプション:
<target_namespace>
を NetworkAttachmentDefinition CR が作成される namespace に置き換えます。デフォルト値はopenshift-sriov-network-operator
です。 - 4
- オプション:
<ipam>
を YAML Block Scaler として IPAM CNI プラグインの設定オブジェクトに置き換えます。プラグインは、割り当て定義についての IP アドレスの割り当てを管理します。 - 5
- オプション:
<vlan>
を、追加ネットワークの仮想 LAN (VLAN) ID に置き換えます。整数値は0
から4095
である必要があります。デフォルト値は0
です。 - 6
<sriov_resource_name>
を、この追加ネットワークの SR-IOV ハードウェアを定義する SriovNetworkNodePolicy CR の.spec.resourceName
パラメーターの値に置き換えます。- 7
- オプション:
<link_state>
を仮想機能 (VF) のリンクの状態に置き換えます。許可される値は、enable
、disable
、およびauto
です。 - 8
- オプション:
<max_tx_rate>
を VF の最大伝送レート (Mbps) に置き換えます。 - 9
- オプション:
<min_tx_rate>
を VF の最小伝送レート (Mbps) に置き換えます。この値は、常に最大伝送レート以下である必要があります。注記Intel NIC は
minTxRate
パラメーターをサポートしません。詳細は、BZ#1772847 を参照してください。 - 10
- オプション:
<vlan_qos>
を VF の IEEE 802.1p 優先レベルに置き換えます。デフォルト値は0
です。 - 11
- オプション:
<spoof_check>
を VF の spoof check モードに置き換えます。許可される値は、文字列の"on"
および"off"
です。重要指定する値を引用符で囲む必要があります。そうしないと、CR は SR-IOV ネットワーク Operator によって拒否されます。
- 12
- オプション:
<trust_vf>
を VF の信頼モードに置き換えます。許可される値は、文字列の"on"
および"off"
です。重要指定する値を引用符で囲む必要があります。そうしないと、CR は SR-IOV ネットワーク Operator によって拒否されます。
- 13
- オプション:
<capabilities>
を、このネットワークに設定する機能に置き換えます。IP アドレスのサポートを有効にするには、"{ "ips": true }"
を指定できます。または、MAC アドレスのサポートを有効にするには"{ "mac": true }"
を指定します。
CR オブジェクトを作成するには、以下のコマンドを入力します。
<name>
を、この追加ネットワークの名前に置き換えます。$ oc create -f <name>-sriov-network.yaml
オプション: 以下のコマンドを実行して、直前の手順で作成した SriovNetwork CR に関連付けられた NetworkAttachmentDefinition CR が存在することを確認します。
<namespace>
を、SriovNetwork CR で指定した namespace に置き換えます。$ oc get net-attach-def -n <namespace>
8.5.1.1. IPAM CNI プラグインの設定
IPAM Container Network Interface (CNI) プラグインは、他の CNI プラグインに IP アドレス管理 (IPAM) を提供します。DHCP を使用して、静的 IP アドレスの割り当てまたは動的 IP アドレスの割り当てのいずれかに IPAM を設定することができます。指定する DHCP サーバーは、追加のネットワークから到達可能である必要があります。
以下の JSON 設定オブジェクトは設定できるパラメーターについて説明しています。
8.5.1.1.1. 静的 IP アドレス割り当ての設定
以下の JSON は、静的 IP アドレスの割り当ての設定について説明しています。
静的割り当ての設定
{ "ipam": { "type": "static", "addresses": [ 1 { "address": "<address>", 2 "gateway": "<gateway>" 3 } ], "routes": [ 4 { "dst": "<dst>" 5 "gw": "<gw>" 6 } ], "dns": { 7 "nameservers": ["<nameserver>"], 8 "domain": "<domain>", 9 "search": ["<search_domain>"] 10 } } }
- 1
- 仮想インターフェースに割り当てる IP アドレスを記述する配列。IPv4 と IPv6 の IP アドレスの両方がサポートされます。
- 2
- 指定する IP アドレス。
- 3
- egress ネットワークトラフィックをルーティングするデフォルトのゲートウェイ。
- 4
- Pod 内で設定するルートを記述する配列。
- 5
- CIDR 形式の IP アドレス範囲。
- 6
- ネットワークトラフィックがルーティングされるゲートウェイ。
- 7
- オプション: DNS 設定。
- 8
- DNS クエリーの送信先となる 1 つ以上の IP アドレスの配列。
- 9
- ホスト名に追加するデフォルトのドメイン。たとえば、ドメインが
example.com
に設定されている場合、example-host
の DNS ルックアップクエリーはexample-host.example.com
として書き換えられます。 - 10
- DNS ルックアップのクエリー時に非修飾ホスト名に追加されるドメイン名の配列 (例:
example-host
)。
8.5.1.1.2. 動的 IP アドレス割り当ての設定
以下の JSON は、DHCP を使用した動的 IP アドレスの割り当ての設定について説明しています。
Pod は、作成時に元の DHCP リースを取得します。リースは、クラスターで実行している最小限の DHCP サーバーデプロイメントで定期的に更新する必要があります。
SR-IOV ネットワーク Operator は DHCP サーバーデプロイメントを作成しません。Cluster Network Operator は最小限の DHCP サーバーデプロイメントを作成します。
DHCP サーバーのデプロイメントをトリガーするには、以下の例にあるように Cluster Network Operator 設定を編集して shim ネットワーク割り当てを作成する必要があります。
shim ネットワーク割り当ての定義例
apiVersion: operator.openshift.io/v1 kind: Network metadata: name: cluster spec: ... additionalNetworks: - name: dhcp-shim namespace: default rawCNIConfig: |- { "name": "dhcp-shim", "cniVersion": "0.3.1", "type": "bridge", "master": "ens5", "ipam": { "type": "dhcp" } }
DHCP 割り当ての設定
{ "ipam": { "type": "dhcp" } }
8.5.1.1.3. 静的 IP アドレス割り当ての設定例
静的 IP アドレスの割り当てに IPAM を設定することができます。
{ "ipam": { "type": "static", "addresses": [ { "address": "191.168.1.7" } ] } }
8.5.1.1.4. DHCP を使用した動的 IP アドレス割り当ての設定例
DHCP に IPAM を設定できます。
{ "ipam": { "type": "dhcp" } }
8.5.1.2. 追加の SR-IOV ネットワークでの静的 MAC および IP アドレスの設定
Pod アノテーションに Container Network Interface (CNI) runtimeConfig データを指定し、追加の SR-IOV ネットワークで静的 MAC および IP アドレスを設定できます。
前提条件
-
OpenShift CLI (
oc
) のインストール。 -
SriovNetwork CR の作成時に
cluster-admin
権限を持つユーザーとしてログインします。
手順
以下の SriovNetwork CR を作成してから、YAML を
<name>-sriov-network.yaml
ファイルに保存します。<name>
を、この追加ネットワークの名前に置き換えます。apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: <name> 1 namespace: openshift-sriov-network-operator 2 spec: networkNamespace: <target_namespace> 3 ipam: '{ "type": "static" }' 4 capabilities: '{ "mac": true, "ips": true }' 5 resourceName: <sriov_resource_name> 6
- 1
<name>
を CR の名前に置き換えます。SR-IOV ネットワーク Operator は、同じ名前を持つ NetworkAttachmentDefinition CR を作成します。- 2
- SR-IOV ネットワーク Operator がインストールされている namespace を指定します。
- 3
<target_namespace>
を NetworkAttachmentDefinition CR が作成される namespace に置き換えます。- 4
- IPAM CNI プラグインの静的タイプを YAML ブロックスケーラーとして指定します。
- 5
mac
およびips
capabilities
をtrue
に指定します。- 6
<sriov_resource_name>
を、この追加ネットワークの SR-IOV ハードウェアを定義する SriovNetworkNodePolicy CR のspec.resourceName
パラメーターの値に置き換えます。
以下のコマンドを実行して CR を作成します。
$ oc create -f <filename> 1
- 1
<filename>
を、先の手順で作成したファイルの名前に置き換えます。
オプション: 以下のコマンドを実行して、直前の手順で作成した SriovNetwork CR に関連付けられた NetworkAttachmentDefinition CR が存在することを確認します。
<namespace>
を、SriovNetwork CR で指定した namespace に置き換えます。$ oc get net-attach-def -n <namespace>
SriovNetwork Custom Resource (CR) が running
状態の Pod に割り当てられている場合、これを変更したり、削除したりしないでください。
以下の SR-IOV Pod 仕様を作成してから、YAML を
<name>-sriov-pod.yaml
ファイルに保存します。<name>
をこの Pod の名前に置き換えます。apiVersion: v1 kind: Pod metadata: name: sample-pod annotations: k8s.v1.cni.cncf.io/networks: '[ { "name": "<name>", 1 "mac": "20:04:0f:f1:88:01", 2 "ips": ["192.168.10.1/24", "2001::1/64"] 3 } ]' spec: containers: - name: sample-container image: <image> imagePullPolicy: IfNotPresent command: ["sleep", "infinity"]
以下のコマンドを実行して SR-IOV Pod のサンプルを作成します。
$ oc create -f <filename> 1
- 1
<filename>
を、先の手順で作成したファイルの名前に置き換えます。
オプション: 以下のコマンドを実行して、
mac
とips
アドレスが SR-IOV デバイスに適用されていることを確認します。<namespace>
を、SriovNetwork CR で指定した namespace に置き換えます。$ oc exec sample-pod -n <namespace> -- ip addr show