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 権限を持つユーザーとしてのログインします。

手順

  1. 以下の 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) のリンクの状態に置き換えます。許可される値は、enabledisable、および 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 }" を指定します。
  1. CR オブジェクトを作成するには、以下のコマンドを入力します。<name> を、この追加ネットワークの名前に置き換えます。

    $ oc create -f <name>-sriov-network.yaml
  2. オプション: 以下のコマンドを実行して、直前の手順で作成した 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 アドレスの割り当ての設定について説明しています。

DHCP リースの更新

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 権限を持つユーザーとしてログインします。

手順

  1. 以下の 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 capabilitiestrue に指定します。
    6
    <sriov_resource_name> を、この追加ネットワークの SR-IOV ハードウェアを定義する SriovNetworkNodePolicy CR の spec.resourceName パラメーターの値に置き換えます。
  2. 以下のコマンドを実行して CR を作成します。

    $ oc create -f <filename> 1
    1
    <filename> を、先の手順で作成したファイルの名前に置き換えます。
  3. オプション: 以下のコマンドを実行して、直前の手順で作成した SriovNetwork CR に関連付けられた NetworkAttachmentDefinition CR が存在することを確認します。<namespace> を、SriovNetwork CR で指定した namespace に置き換えます。

    $ oc get net-attach-def -n <namespace>
注記

SriovNetwork Custom Resource (CR) が running 状態の Pod に割り当てられている場合、これを変更したり、削除したりしないでください。

  1. 以下の 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"]
    1
    SR-IOV ネットワーク割り当て定義 CR の名前を指定します。
    2
    SR-IOV ネットワーク割り当て定義 CR で定義されるリソースタイプから割り当てられる SR-IOV デバイスの MAC アドレスを指定します。
    3
    SR-IOV ネットワーク割り当て定義 CR で定義されるリソースタイプから割り当てられる SR-IOV デバイスのアドレスを指定します。IPv4 と IPv6 アドレスの両方がサポートされます。
  2. 以下のコマンドを実行して SR-IOV Pod のサンプルを作成します。

    $ oc create -f <filename> 1
    1
    <filename> を、先の手順で作成したファイルの名前に置き換えます。
  3. オプション: 以下のコマンドを実行して、macips アドレスが SR-IOV デバイスに適用されていることを確認します。<namespace> を、SriovNetwork CR で指定した namespace に置き換えます。

    $ oc exec sample-pod -n <namespace> -- ip addr show

8.5.2. 次のステップ