10.18. 仮想マシンのネットワーク
10.18.1. デフォルトの Pod ネットワーク用の仮想マシンの設定
masquerade
バインディングモードを使用するようにネットワークインターフェイスを設定することで、仮想マシンをデフォルトの内部 Pod ネットワークに接続できます。
デフォルトの Pod ネットワークに接続している仮想ネットワークインターフェイスカード (vNIC) 上のトラフィックは、ライブマイグレーション時に中断します。
10.18.1.1. コマンドラインでのマスカレードモードの設定
マスカレードモードを使用し、仮想マシンの送信トラフィックを Pod IP アドレスの背後で非表示にすることができます。マスカレードモードは、ネットワークアドレス変換 (NAT) を使用して仮想マシンを Linux ブリッジ経由で Pod ネットワークバックエンドに接続します。
仮想マシンの設定ファイルを編集して、マスカレードモードを有効にし、トラフィックが仮想マシンに到達できるようにします。
前提条件
- 仮想マシンは、IPv4 アドレスを取得するために DHCP を使用できるように設定される必要がある。以下の例では、DHCP を使用するように設定されます。
手順
仮想マシン設定ファイルの
interfaces
仕様を編集します。kind: VirtualMachine spec: domain: devices: interfaces: - name: default masquerade: {} 1 ports: 2 - port: 80 networks: - name: default pod: {}
注記ポート 49152 および 49153 は libvirt プラットフォームで使用するために予約され、これらのポートへの他のすべての受信トラフィックは破棄されます。
仮想マシンを作成します。
$ oc create -f <vm-name>.yaml
10.18.1.2. デュアルスタック (IPv4 および IPv6) でのマスカレードモードの設定
cloud-init を使用して、新規仮想マシン (VM) を、デフォルトの Pod ネットワークで IPv6 と IPv4 の両方を使用するように設定できます。
仮想マシンインスタンス設定の Network.pod.vmIPv6NetworkCIDR
フィールドは、VM の静的 IPv6 アドレスとゲートウェイ IP アドレスを決定します。これらは IPv6 トラフィックを仮想マシンにルーティングするために virt-launcher Pod で使用され、外部では使用されません。Network.pod.vmIPv6NetworkCIDR
フィールドは、Classless Inter-Domain Routing (CIDR) 表記で IPv6 アドレスブロックを指定します。デフォルト値は fd10:0:2::2/120
です。この値は、ネットワーク要件に基づいて編集できます。
仮想マシンが実行されている場合、仮想マシンの送受信トラフィックは、virt-launcher Pod の IPv4 アドレスと固有の IPv6 アドレスの両方にルーティングされます。次に、virt-launcher Pod は IPv4 トラフィックを仮想マシンの DHCP アドレスにルーティングし、IPv6 トラフィックを仮想マシンの静的に設定された IPv6 アドレスにルーティングします。
前提条件
- OpenShift Container Platform クラスターは、デュアルスタック用に設定された OVN-Kubernetes Container Network Interface (CNI) ネットワークプラグインを使用する必要があります。
手順
新規の仮想マシン設定では、
masquerade
を指定したインターフェイスを追加し、cloud-init を使用して IPv6 アドレスとデフォルトゲートウェイを設定します。apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: example-vm-ipv6 # ... interfaces: - name: default masquerade: {} 1 ports: - port: 80 2 networks: - name: default pod: {} volumes: - cloudInitNoCloud: networkData: | version: 2 ethernets: eth0: dhcp4: true addresses: [ fd10:0:2::2/120 ] 3 gateway6: fd10:0:2::1 4
namespace で仮想マシンインスタンスを作成します。
$ oc create -f example-vm-ipv6.yaml
検証
- IPv6 が設定されていることを確認するには、仮想マシンを起動し、仮想マシンインスタンスのインターフェイスステータスを表示して、これに IPv6 アドレスがあることを確認します。
$ oc get vmi <vmi-name> -o jsonpath="{.status.interfaces[*].ipAddresses}"
10.18.1.3. ジャンボフレームのサポートについて
OVN-Kubernetes CNI プラグインを使用すると、デフォルトの Pod ネットワークに接続されている 2 つの仮想マシン (VM) 間でフラグメント化されていないジャンボフレームパケットを送信できます。ジャンボフレームの最大伝送単位 (MTU) 値は 1500 バイトを超えています。
VM は、クラスター管理者が設定したクラスターネットワークの MTU 値を、次のいずれかの方法で自動的に取得します。
-
libvirt
: ゲスト OS に VirtIO ドライバーの最新バージョンがあり、エミュレーションされたデバイスの Peripheral Component Interconnect (PCI) 設定レジスターを介して着信データを解釈できる場合。 - DHCP: ゲスト DHCP クライアントが DHCP サーバーの応答から MTU 値を読み取ることができる場合。
VirtIO ドライバーを持たない Windows VM の場合、netsh
または同様のツールを使用して MTU を手動で設定する必要があります。これは、Windows DHCP クライアントが MTU 値を読み取らないためです。
10.18.2. 仮想マシンを公開するサービスの作成
Service
オブジェクトを使用して、クラスター内またはクラスターの外部に仮想マシンを公開することができます。
10.18.2.1. サービスについて
Kubernetes サービス は一連の Pod で実行されているアプリケーションへのクライアントのネットワークアクセスを公開します。サービスは抽象化、負荷分散を提供し、NodePort と LoadBalancer の場合は外部世界への露出を提供します。
サービスは、Web コンソールの VirtualMachine details Service
オブジェクトで spec.type
を指定することによって公開できます。
- ClusterIP
-
内部 IP アドレスでサービスを公開し、クラスター内の他のアプリケーションに DNS 名として公開します。1 つのサービスを複数の仮想マシンにマッピングできます。クライアントがサービスに接続しようとすると、クライアントのリクエストは使用可能なバックエンド間で負荷分散されます。
ClusterIP
はデフォルトのサービスタイプ
です。 - NodePort
-
クラスター内の選択した各ノードの同じポートでサービスを公開します。
NodePort
は、クラスター外からサービスにアクセスできるようにします。 - LoadBalancer
- 現在のクラウド(サポートされている場合)に外部ロードバランサーを作成し、固定の外部 IP アドレスをサービスに割り当てます。
オンプレミスクラスターの場合、MetalLB Operator をデプロイすることで負荷分散サービスを設定できます。
10.18.2.1.1. デュアルスタックサポート
IPv4 および IPv6 のデュアルスタックネットワークがクラスターに対して有効にされている場合、Service
オブジェクトに spec.ipFamilyPolicy
および spec.ipFamilies
フィールドを定義して、IPv4、IPv6、またはそれら両方を使用するサービスを作成できます。
spec.ipFamilyPolicy
フィールドは以下の値のいずれかに設定できます。
- SingleStack
- コントロールプレーンは、最初に設定されたサービスクラスターの IP 範囲に基づいて、サービスのクラスター IP アドレスを割り当てます。
- PreferDualStack
- コントロールプレーンは、デュアルスタックが設定されたクラスターのサービス用に IPv4 および IPv6 クラスター IP アドレスの両方を割り当てます。
- RequireDualStack
-
このオプションは、デュアルスタックネットワークが有効にされていないクラスターの場合には失敗します。デュアルスタックが設定されたクラスターの場合、その値が
PreferDualStack
に設定されている場合と同じになります。コントロールプレーンは、IPv4 アドレスと IPv6 アドレス範囲の両方からクラスター IP アドレスを割り当てます。
単一スタックに使用する IP ファミリーや、デュアルスタック用の IP ファミリーの順序は、spec.ipFamilies
を以下のアレイ値のいずれかに設定して定義できます。
-
[IPv4]
-
[IPv6]
-
[IPv4, IPv6]
-
[IPv6, IPv4]
10.18.2.2. 仮想マシンのサービスとしての公開
ClusterIP
、NodePort
、または LoadBalancer
サービスを作成し、クラスター内外から実行中の仮想マシン (VM) に接続します。
手順
VirtualMachine
マニフェストを編集して、サービス作成のラベルを追加します。apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: vm-ephemeral namespace: example-namespace spec: running: false template: metadata: labels: special: key 1 # ...
- 1
- ラベル
special: key
をspec.template.metadata.labels
セクションに追加します。
注記仮想マシンのラベルは Pod に渡されます。
special: キー
ラベルは、Service
マニフェストのspec.selector
属性のラベルと一致する必要があります。-
VirtualMachine
マニフェストファイルを保存して変更を適用します。 仮想マシンを公開するための
Service
マニフェストを作成します。apiVersion: v1 kind: Service metadata: name: vmservice 1 namespace: example-namespace 2 spec: externalTrafficPolicy: Cluster 3 ports: - nodePort: 30000 4 port: 27017 protocol: TCP targetPort: 22 5 selector: special: key 6 type: NodePort 7
- 1
Service
オブジェクトの名前。- 2
Service
オブジェクトが存在する namespace。これはVirtualMachine
マニフェストのmetadata.namespace
フィールドと同じである必要があります。- 3
- オプション: ノードが外部 IP アドレスで受信したサービストラフィックを分散する方法を指定します。これは
NodePort
およびLoadBalancer
サービスタイプにのみ適用されます。デフォルト値はCluster
で、トラフィックをすべてのクラスターエンドポイントに均等にルーティングします。 - 4
- オプション: 設定する場合、
nodePort
値はすべてのサービスで固有でなければなりません。指定しない場合、30000
を超える範囲内の値は動的に割り当てられます。 - 5
- オプション: サービスによって公開される VM ポート。ポートリストが仮想マシンマニフェストに定義されている場合は、オープンポートを参照する必要があります。
targetPort
が指定されていない場合は、ポート
と同じ値を取ります。 - 6
VirtualMachine
マニフェストのspec.template.metadata.labels
スタンザに追加したラベルへの参照。- 7
- サービスのタイプ。使用できる値は
ClusterIP
、NodePort
、およびLoadBalancer
です。
-
サービス
マニフェストファイルを保存します。 以下のコマンドを実行してサービスを作成します。
$ oc create -f <service_name>.yaml
- 仮想マシンを起動します。仮想マシンがすでに実行中の場合は、再起動します。
検証
Service
オブジェクトをクエリーし、これが利用可能であることを確認します。$ oc get service -n example-namespace
ClusterIP
サービスの出力例NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE vmservice ClusterIP 172.30.3.149 <none> 27017/TCP 2m
NodePort
サービスの出力例NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE vmservice NodePort 172.30.232.73 <none> 27017:30000/TCP 5m
LoadBalancer
サービスの出力例NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE vmservice LoadBalancer 172.30.27.5 172.29.10.235,172.29.10.235 27017:31829/TCP 5s
仮想マシンに接続するための適切な方法を選択します。
ClusterIP
サービスの場合は、サービス IP アドレスとサービスポートを使用して、クラスター内から仮想マシンに接続します。以下に例を示します。$ ssh fedora@172.30.3.149 -p 27017
NodePort
サービスの場合、ノード IP アドレスとクラスターネットワーク外のノードポートを指定して仮想マシンに接続します。以下に例を示します。$ ssh fedora@$NODE_IP -p 30000
-
LoadBalancer
サービスの場合は、vinagre
クライアントを使用し、パブリック IP アドレスおよびポートで仮想マシンに接続します。外部ポートは動的に割り当てられます。
10.18.2.3. 関連情報
10.18.3. Linux ブリッジ ネットワークへの仮想マシンの割り当て
デフォルトでは、OpenShift Virtualization は単一の内部 Pod ネットワークとともにインストールされます。
追加のネットワークに接続するには、Linux ブリッジ ネットワーク接続定義 (NAD) を作成する必要があります。
仮想マシンを追加のネットワークに割り当てるには、以下を実行します。
- Linux ブリッジ ノード ネットワーク設定ポリシーを作成します。
- Linux ブリッジ ネットワーク接続定義を作成します。
- 仮想マシンを設定して、仮想マシンがネットワーク接続定義を認識できるようにします。
スケジューリング、インターフェイスタイプ、およびその他のノードのネットワークアクティビティーについての詳細は、node networking セクションを参照してください。
10.18.3.1. ネットワーク接続定義によるネットワークへの接続
10.18.3.1.1. Linux ブリッジ ノード ネットワーク設定ポリシーの作成
NodeNetworkConfigurationPolicy
マニフェスト YAML ファイルを使用して、Linux ブリッジを作成します。
前提条件
- Kubernetes NMState Operator がインストールされている。
手順
NodeNetworkConfigurationPolicy
マニフェストを作成します。この例には、独自の情報で置き換える必要のあるサンプルの値が含まれます。apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: br1-eth1-policy 1 spec: desiredState: interfaces: - name: br1 2 description: Linux bridge with eth1 as a port 3 type: linux-bridge 4 state: up 5 ipv4: enabled: false 6 bridge: options: stp: enabled: false 7 port: - name: eth1 8
10.18.3.2. Linux ブリッジネットワーク接続定義の作成
仮想マシンのネットワークアタッチメント定義での IP アドレス管理 (IPAM) の設定はサポートされていません。
10.18.3.2.1. Web コンソールでの Linux ブリッジネットワーク接続定義の作成
ネットワーク接続定義を作成して、Pod と仮想マシンにレイヤー 2 ネットワークを提供できます。
Linux ブリッジ ネットワーク接続定義は、仮想マシンを VLAN に接続するための最も効率的な方法です。
手順
-
Web コンソールで、Networking
NetworkAttachmentDefinitions をクリックします。 Create Network Attachment Definition をクリックします。
注記ネットワーク接続定義は Pod または仮想マシンと同じ namespace にある必要があります。
- 一意の Name およびオプションの Description を入力します。
- Network Type リストから CNV Linux bridge を選択します。
- Bridge Name フィールドにブリッジの名前を入力します。
- オプション: リソースに VLAN ID が設定されている場合、VLAN Tag Number フィールドに ID 番号を入力します。
- オプション: MAC Spoof Check を選択して、MAC スプーフフィルタリングを有効にします。この機能により、Pod を終了するための MAC アドレスを 1 つだけ許可することで、MAC スプーフィング攻撃に対してセキュリティーを確保します。
- Create をクリックします。
10.18.3.2.2. CLI での Linux ブリッジネットワーク接続定義の作成
ネットワーク管理者は、タイプ cnv-bridge
のネットワーク接続定義を、レイヤー 2 ネットワークを Pod および仮想マシンに提供するように設定できます。
前提条件
-
MAC スプーフィングチェックを有効にするには、ノードが nftables をサポートして、
nft
バイナリーがデプロイされている必要があります。
手順
- 仮想マシンと同じ namespace にネットワーク接続定義を作成します。
次の例のように、仮想マシンをネットワーク接続定義に追加します。
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: <bridge-network> 1 annotations: k8s.v1.cni.cncf.io/resourceName: bridge.network.kubevirt.io/<bridge-interface> 2 spec: config: '{ "cniVersion": "0.3.1", "name": "<bridge-network>", 3 "type": "cnv-bridge", 4 "bridge": "<bridge-interface>", 5 "macspoofchk": true, 6 "vlan": 100, 7 "preserveDefaultVlan": false 8 }'
- 1
NetworkAttachmentDefinition
オブジェクトの名前。- 2
- オプション: ノード選択のアノテーションのキーと値のペア。
bridge-interface
は一部のノードに設定されるブリッジの名前に一致する必要があります。このアノテーションをネットワーク接続定義に追加する場合、仮想マシンインスタンスはbridge-interface
ブリッジが接続されているノードでのみ実行されます。 - 3
- 設定の名前。設定名をネットワーク接続定義の
name
値に一致させることが推奨されます。 - 4
- このネットワーク接続定義のネットワークを提供する Container Network Interface (CNI) プラグインの実際の名前。異なる CNI を使用するのでない限り、このフィールドは変更しないでください。
- 5
- ノードに設定される Linux ブリッジの名前。
- 6
- オプション:MAC スプーフィングチェックを有効にする。
true
に設定すると、Pod またはゲストインターフェイスの MAC アドレスを変更できません。この属性は、Pod からの MAC アドレスを 1 つだけ許可することで、MAC スプーフィング攻撃に対してセキュリティーを確保します。 - 7
- オプション: VLAN タグ。ノードのネットワーク設定ポリシーでは、追加の VLAN 設定は必要ありません。
- 8
- オプション: 仮想マシンがデフォルト VLAN 経由でブリッジに接続するかどうかを示します。デフォルト値は
true
です。
注記Linux ブリッジネットワーク接続定義は、仮想マシンを VLAN に接続するための最も効率的な方法です。
ネットワーク接続定義を作成します。
$ oc create -f <network-attachment-definition.yaml> 1
- 1
- ここで、
<network-attachment-definition.yaml>
はネットワーク接続定義マニフェストのファイル名です。
検証
次のコマンドを実行して、ネットワーク接続定義が作成されたことを確認します。
$ oc get network-attachment-definition <bridge-network>
10.18.3.3. Linux ブリッジネットワーク用の仮想マシンの設定
10.18.3.3.1. Web コンソールでの仮想マシンの NIC の作成
Web コンソールから追加の NIC を作成し、これを仮想マシンに割り当てます。
前提条件
- ネットワーク接続定義が使用可能である必要があります。
手順
-
OpenShift Container Platform コンソールの正しいプロジェクトで、サイドメニューから Virtualization
VirtualMachines をクリックします。 - 仮想マシンを選択して、VirtualMachine details ページを開きます。
-
Configuration
Network interfaces をクリックして、仮想マシンにすでに接続されている NIC を表示します。 - Add Network Interface をクリックし、一覧に新規スロットを作成します。
- 追加ネットワークの Network リストからネットワーク接続定義を選択します。
- 新規 NIC の Name、Model、Type、および MAC Address に入力します。
- Save をクリックして NIC を保存し、これを仮想マシンに割り当てます。
10.18.3.3.2. ネットワークフィールド
Name | 説明 |
---|---|
Name | ネットワークインターフェイスコントローラーの名前。 |
モデル | ネットワークインターフェイスコントローラーのモデルを示します。サポートされる値は e1000e および virtio です。 |
Network | 利用可能なネットワーク接続定義のリスト。 |
型 | 利用可能なバインディングメソッドの一覧。ネットワークインターフェイスに適したバインド方法を選択します。
|
MAC Address | ネットワークインターフェイスコントローラーの MAC アドレス。MAC アドレスが指定されていない場合、これは自動的に割り当てられます。 |
10.18.3.3.3. CLI で仮想マシンを追加のネットワークに接続する
ブリッジインターフェイスを追加し、仮想マシン設定でネットワーク接続定義を指定して、仮想マシンを追加のネットワークに割り当てます。
以下の手順では、YAML ファイルを使用して設定を編集し、更新されたファイルをクラスターに適用します。oc edit <object> <name>
コマンドを使用して、既存の仮想マシンを編集することもできます。
前提条件
- 設定を編集する前に仮想マシンをシャットダウンします。実行中の仮想マシンを編集する場合は、変更を有効にするために仮想マシンを再起動する必要があります。
手順
- ブリッジネットワークに接続する仮想マシンの設定を作成または編集します。
ブリッジインターフェイスを
spec.template.spec.domain.devices.interfaces
一覧に追加し、ネットワーク接続定義をspec.template.spec.networks
一覧に追加します。この例では、a-bridge-network
ネットワーク接続定義に接続されるbridge-net
というブリッジインターフェイスを追加します。apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: <example-vm> spec: template: spec: domain: devices: interfaces: - masquerade: {} name: <default> - bridge: {} name: <bridge-net> 1 # ... networks: - name: <default> pod: {} - name: <bridge-net> 2 multus: networkName: <network-namespace>/<a-bridge-network> 3 # ...
- 1
- ブリッジインターフェイスの名前。
- 2
- ネットワークの名前。この値は、対応する
spec.template.spec.domain.devices.interfaces
エントリーのname
値と一致する必要があります。 - 3
- ネットワーク接続定義の名前。接頭辞は、存在する namespace になります。namespace は、
default
の namespace または仮想マシンが作成される namespace と同じでなければなりません。この場合、multus
が使用されます。Multus は、Pod または仮想マシンが必要なインターフェイスを使用できるように、複数の CNI が存在できるようにするクラウドネットワークインターフェイス (CNI) プラグインです。
設定を適用します。
$ oc apply -f <example-vm.yaml>
- オプション: 実行中の仮想マシンを編集している場合は、変更を有効にするためにこれを再起動する必要があります。
10.18.3.4. 次のステップ
10.18.4. 仮想マシンの SR-IOV ネットワークへの接続
次の手順を実行して、仮想マシン (VM) を Single Root I/O Virtualization (SR-IOV) ネットワークに接続できます。
- SR-IOV ネットワーク デバイスを設定します。
- SR-IOV ネットワークを設定します。
- 仮想マシンを SR-IOV ネットワークに接続します。
10.18.4.1. 前提条件
- ホストのファームウェアでグローバル SR-IOV および VT-d 設定を有効 にしておく必要があります。
- SR-IOV Network Operator をインストール しておく必要があります。
10.18.4.2. SR-IOV ネットワークデバイスの設定
SR-IOV Network Operator は SriovNetworkNodePolicy.sriovnetwork.openshift.io
CustomResourceDefinition を OpenShift Container Platform に追加します。SR-IOV ネットワークデバイスは、SriovNetworkNodePolicy カスタムリソース (CR) を作成して設定できます。
SriovNetworkNodePolicy
オブジェクトで指定された設定を適用する際に、SR-IOV Operator はノードをドレイン (解放) する可能性があり、場合によってはノードの再起動を行う場合があります。
設定の変更が適用されるまでに数分かかる場合があります。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 - SR-IOV Network Operator がインストールされている。
- ドレイン (解放) されたノードからエビクトされたワークロードを処理するために、クラスター内に利用可能な十分なノードがある。
- SR-IOV ネットワークデバイス設定についてコントロールプレーンノードを選択していない。
手順
SriovNetworkNodePolicy
オブジェクトを作成してから、YAML を<name>-sriov-node-network.yaml
ファイルに保存します。<name>
をこの設定の名前に置き換えます。apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: <name> 1 namespace: openshift-sriov-network-operator 2 spec: resourceName: <sriov_resource_name> 3 nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true" 4 priority: <priority> 5 mtu: <mtu> 6 numVfs: <num> 7 nicSelector: 8 vendor: "<vendor_code>" 9 deviceID: "<device_id>" 10 pfNames: ["<pf_name>", ...] 11 rootDevices: ["<pci_bus_id>", "..."] 12 deviceType: vfio-pci 13 isRdma: false 14
- 1
- CR オブジェクトの名前を指定します。
- 2
- SR-IOV Operator がインストールされている namespace を指定します。
- 3
- SR-IOV デバイスプラグインのリソース名を指定します。1 つのリソース名に複数の
SriovNetworkNodePolicy
オブジェクトを作成できます。 - 4
- 設定するノードを選択するノードセレクターを指定します。選択したノード上の SR-IOV ネットワークデバイスのみが設定されます。SR-IOV Container Network Interface (CNI) プラグインおよびデバイスプラグインは、選択したノードにのみデプロイされます。
- 5
- オプション:
0
から99
までの整数値を指定します。数値が小さいほど優先度が高くなります。したがって、10
は99
よりも優先度が高くなります。デフォルト値は99
です。 - 6
- オプション: Virtual Function の最大転送単位 (MTU) の値を指定します。MTU の最大値は NIC モデルによって異なります。
- 7
- SR-IOV 物理ネットワークデバイス用に作成する仮想機能 (VF) の数を指定します。Intel ネットワークインターフェイスコントローラー (NIC) の場合、VF の数はデバイスがサポートする VF の合計よりも大きくすることはできません。Mellanox NIC の場合、VF の数は
127
よりも大きくすることはできません。 - 8
nicSelector
マッピングは、Operator が設定するイーサネットデバイスを選択します。すべてのパラメーターの値を指定する必要はありません。意図せずにイーサネットデバイスを選択する可能性を最低限に抑えるために、イーサネットアダプターを正確に特定できるようにすることが推奨されます。rootDevices
を指定する場合、vendor
、deviceID
、またはpfName
の値も指定する必要があります。pfNames
とrootDevices
の両方を同時に指定する場合、それらが同一のデバイスをポイントすることを確認します。- 9
- オプション: SR-IOV ネットワークデバイスのベンダー 16 進コードを指定します。許可される値は
8086
または15b3
のいずれかのみになります。 - 10
- オプション: SR-IOV ネットワークデバイスのデバイス 16 進コードを指定します。許可される値は
158b
、1015
、1017
のみになります。 - 11
- オプション: このパラメーターは、1 つ以上のイーサネットデバイスの物理機能 (PF) 名の配列を受け入れます。
- 12
- このパラメーターは、イーサネットデバイスの物理機能に関する 1 つ以上の PCI バスアドレスの配列を受け入れます。以下の形式でアドレスを指定します:
0000:02:00.1
- 13
- OpenShift Virtualization の仮想機能には、
vfio-pci
ドライバータイプが必要です。 - 14
- オプション: Remote Direct Memory Access (RDMA) モードを有効にするかどうかを指定します。Mellanox カードの場合、
isRdma
をfalse
に設定します。デフォルト値はfalse
です。
注記isRDMA
フラグがtrue
に設定される場合、引き続き RDMA 対応の VF を通常のネットワークデバイスとして使用できます。デバイスはどちらのモードでも使用できます。-
オプション: SR-IOV 対応のクラスターノードにまだラベルが付いていない場合は、
SriovNetworkNodePolicy.Spec.NodeSelector
でラベルを付けます。ノードのラベル付けの詳細は、「ノードのラベルを更新する方法について」を参照してください。 SriovNetworkNodePolicy
オブジェクトを作成します。$ oc create -f <name>-sriov-node-network.yaml
ここで、
<name>
はこの設定の名前を指定します。設定の更新が適用された後に、
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}'
10.18.4.3. SR-IOV の追加ネットワークの設定
SriovNetwork
オブジェクトを作成して、SR-IOV ハードウェアを使用する追加のネットワークを設定できます。
SriovNetwork
オブジェクトの作成時に、SR-IOV Network Operator は NetworkAttachmentDefinition
オブジェクトを自動的に作成します。
SriovNetwork
オブジェクトが running
状態の Pod または仮想マシンに割り当てられている場合、これを変更したり、削除したりしないでください。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。
手順
-
以下の
SriovNetwork
オブジェクトを作成してから、YAML を<name>-sriov-network.yaml
ファイルに保存します。<name>
を、この追加ネットワークの名前に置き換えます。
apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: <name> 1 namespace: openshift-sriov-network-operator 2 spec: resourceName: <sriov_resource_name> 3 networkNamespace: <target_namespace> 4 vlan: <vlan> 5 spoofChk: "<spoof_check>" 6 linkState: <link_state> 7 maxTxRate: <max_tx_rate> 8 minTxRate: <min_rx_rate> 9 vlanQoS: <vlan_qos> 10 trust: "<trust_vf>" 11 capabilities: <capabilities> 12
- 1
<name>
をオブジェクトの名前に置き換えます。SR-IOV Network Operator は、同じ名前を持つNetworkAttachmentDefinition
オブジェクトを作成します。- 2
- SR-IOV ネットワーク Operator がインストールされている namespace を指定します。
- 3
<sriov_resource_name>
を、この追加ネットワークの SR-IOV ハードウェアを定義するSriovNetworkNodePolicy
オブジェクトの.spec.resourceName
パラメーターの値に置き換えます。- 4
<target_namespace>
を SriovNetwork のターゲット namespace に置き換えます。ターゲット namespace の Pod または仮想マシンのみを SriovNetwork に割り当てることができます。- 5
- オプション:
<vlan>
を、追加ネットワークの仮想 LAN (VLAN) ID に置き換えます。整数値は0
から4095
である必要があります。デフォルト値は0
です。 - 6
- オプション:
<spoof_check>
を VF の spoof check モードに置き換えます。許可される値は、文字列の"on"
および"off"
です。重要指定する値を引用符で囲む必要があります。そうしないと、CR は SR-IOV ネットワーク Operator によって拒否されます。
- 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
- オプション:
<trust_vf>
を VF の信頼モードに置き換えます。許可される値は、文字列の"on"
および"off"
です。重要指定する値を引用符で囲む必要があります。そうしないと、CR は SR-IOV ネットワーク Operator によって拒否されます。
- 12
- オプション:
<capabilities>
を、このネットワークに設定する機能に置き換えます。
オブジェクトを作成するには、以下のコマンドを入力します。
<name>
を、この追加ネットワークの名前に置き換えます。$ oc create -f <name>-sriov-network.yaml
オプション: 以下のコマンドを実行して、直前の手順で作成した
SriovNetwork
オブジェクトに関連付けられたNetworkAttachmentDefinition
オブジェクトが存在することを確認するには、以下のコマンドを入力します。<namespace>
を、SriovNetwork
オブジェクト で指定した namespace に置き換えます。$ oc get net-attach-def -n <namespace>
10.18.4.4. 仮想マシンの SR-IOV ネットワークへの接続
仮想マシンの設定にネットワークの詳細を含めることで、仮想マシンを SR-IOV ネットワークに接続することができます。
手順
SR-IOV ネットワークの詳細を仮想マシン設定の
spec.domain.devices.interfaces
およびspec.networks
に追加します。kind: VirtualMachine # ... spec: domain: devices: interfaces: - name: <default> 1 masquerade: {} 2 - name: <nic1> 3 sriov: {} networks: - name: <default> 4 pod: {} - name: <nic1> 5 multus: networkName: <sriov-network> 6 # ...
仮想マシン設定を適用します。
$ oc apply -f <vm-sriov.yaml> 1
- 1
- 仮想マシン YAML ファイルの名前。
10.18.4.5. DPDK ワークロード用のクラスター設定
以下の手順を使用して、Data Plane Development Kit (DPDK) ワークロードを実行する OpenShift Container Platform クラスターを設定できます。
DPDK ワークロード用のクラスター設定は、テクノロジープレビュー機能としてのみ使用できます。テクノロジープレビュー機能は、Red Hat 製品サポートのサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではない場合があります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
前提条件
-
cluster-admin
権限を持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。 - SR-IOV Network Operator がインストールされている。
- Node Tuning Operator がインストールされている。
手順
- コンピュートノードトポロジーのマッピングを実行し、DPDK アプリケーション用に分離する Non-Uniform Memory Access (NUMA) CPU と、オペレーティングシステム (OS) 用に予約する NUMA CPU を決定します。
コンピュートノードのサブセットにカスタムロール (例:
worker-dpdk
) のラベルを追加します。$ oc label node <node_name> node-role.kubernetes.io/worker-dpdk=""
spec.machineConfigSelector
オブジェクトにworker-dpdk
ラベルを含む新しいMachineConfigPool
マニフェストを作成します。MachineConfigPool
マニフェストの例apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfigPool metadata: name: worker-dpdk labels: machineconfiguration.openshift.io/role: worker-dpdk spec: machineConfigSelector: matchExpressions: - key: machineconfiguration.openshift.io/role operator: In values: - worker - worker-dpdk nodeSelector: matchLabels: node-role.kubernetes.io/worker-dpdk: ""
前の手順で作成したラベル付きノードとマシン設定プールに適用する
PerformanceProfile
マニフェストを作成します。パフォーマンスプロファイルは、DPDK アプリケーション用に分離された CPU とハウスキーピング用に予約された CPU を指定します。PerformanceProfile
マニフェストの例apiVersion: performance.openshift.io/v2 kind: PerformanceProfile metadata: name: profile-1 spec: cpu: isolated: 4-39,44-79 reserved: 0-3,40-43 hugepages: defaultHugepagesSize: 1G pages: - count: 32 node: 0 size: 1G net: userLevelNetworking: true nodeSelector: node-role.kubernetes.io/worker-dpdk: "" numa: topologyPolicy: single-numa-node
注記MachineConfigPool
マニフェストとPerformanceProfile
マニフェストを適用すると、コンピュートノードが自動的に再起動します。PerformanceProfile
オブジェクトのstatus.runtimeClass
フィールドから、生成されたRuntimeClass
リソースの名前を取得します。$ oc get performanceprofiles.performance.openshift.io profile-1 -o=jsonpath='{.status.runtimeClass}{"\n"}'
次のアノテーションを
HyperConverged
カスタムリソース (CR) に追加して、以前に取得したRuntimeClass
名をvirt-launcher
Pod のデフォルトコンテナーランタイムクラスとして設定します。$ oc annotate --overwrite -n openshift-cnv hco kubevirt-hyperconverged \ kubevirt.kubevirt.io/jsonpatch='[{"op": "add", "path": "/spec/configuration/defaultRuntimeClass", "value": <runtimeclass_name>}]'
注記HyperConverged
CR にアノテーションを追加すると、アノテーションの適用後に作成されるすべての仮想マシンに影響するグローバル設定が変更されます。このアノテーションを設定すると、OpenShift Virtualization インスタンスのサポートに違反するため、必ずテストクラスター限定で使用する必要があります。最適なパフォーマンスを得るには、サポート例外を申請してください。spec.deviceType
フィールドをvfio-pci
に設定してSriovNetworkNodePolicy
オブジェクトを作成します。SriovNetworkNodePolicy
マニフェストの例apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: policy-1 namespace: openshift-sriov-network-operator spec: resourceName: intel_nics_dpdk deviceType: vfio-pci mtu: 9000 numVfs: 4 priority: 99 nicSelector: vendor: "8086" deviceID: "1572" pfNames: - eno3 rootDevices: - "0000:19:00.2" nodeSelector: feature.node.kubernetes.io/network-sriov.capable: "true"
10.18.4.6. DPDK ワークロード用のプロジェクト設定
SR-IOV ハードウェアで DPDK ワークロードを実行するプロジェクトを設定できます。
前提条件
- DPDK ワークロードを実行するようにクラスターが設定されている。
手順
DPDK アプリケーションの namespace を作成します。
$ oc create ns dpdk-checkup-ns
SriovNetworkNodePolicy
オブジェクトを参照するSriovNetwork
オブジェクトを作成します。SriovNetwork
オブジェクトの作成時に、SR-IOV Network Operator はNetworkAttachmentDefinition
オブジェクトを自動的に作成します。SriovNetwork
マニフェストの例apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: dpdk-sriovnetwork namespace: openshift-sriov-network-operator spec: ipam: | { "type": "host-local", "subnet": "10.56.217.0/24", "rangeStart": "10.56.217.171", "rangeEnd": "10.56.217.181", "routes": [{ "dst": "0.0.0.0/0" }], "gateway": "10.56.217.1" } networkNamespace: dpdk-checkup-ns 1 resourceName: intel_nics_dpdk 2 spoofChk: "off" trust: "on" vlan: 1019
- オプション: 仮想マシンレイテンシーチェックアップを実行して、ネットワークが適切に設定されていることを確認します。
- オプション: DPDK チェックアップを実行して、namespace が DPDK ワークロード用に準備できているか確認します。
10.18.4.7. DPDK ワークロード用の仮想マシン設定
仮想マシン (VM) 上で Data Packet Development Kit (DPDK) ワークロードを実行すると、レイテンシーの短縮とスループットが向上し、ユーザー空間でのパケット処理を高速化できます。DPDK は、ハードウェアベースの I/O 共有に SR-IOV ネットワークを使用します。
前提条件
- DPDK ワークロードを実行するようにクラスターが設定されている。
- 仮想マシンを実行するプロジェクトを作成し、設定している。
手順
VirtualMachine
マニフェストを編集して、SR-IOV ネットワークインターフェイス、CPU トポロジー、CRI-O アノテーション、Huge Page に関する情報を格納します。VirtualMachine
マニフェストの例apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: rhel-dpdk-vm spec: running: true template: metadata: annotations: cpu-load-balancing.crio.io: disable 1 cpu-quota.crio.io: disable 2 irq-load-balancing.crio.io: disable 3 spec: domain: cpu: sockets: 1 4 cores: 5 5 threads: 2 dedicatedCpuPlacement: true isolateEmulatorThread: true interfaces: - masquerade: {} name: default - model: virtio name: nic-east pciAddress: '0000:07:00.0' sriov: {} networkInterfaceMultiqueue: true rng: {} memory: hugepages: pageSize: 1Gi 6 guest: 8Gi networks: - name: default pod: {} - multus: networkName: dpdk-net 7 name: nic-east # ...
- 1
- このアノテーションは、コンテナーが使用する CPU に対するロードバランシングが無効であることを示します。
- 2
- このアノテーションは、コンテナーが使用する CPU に対する CPU クォータが無効であることを示します。
- 3
- このアノテーションは、コンテナーが使用する CPU に対する Interrupt Request (IRQ) のロードバランシングが無効であることを示します。
- 4
- 仮想マシン内のソケットの数。同じ Non-Uniform Memory Access (NUMA) ノードから CPU をスケジュールするには、このフィールドを
1
に設定する必要があります。 - 5
- 仮想マシン内のコアの数。値は
1
以上とします。この例では、仮想マシンは 5 個のハイパースレッドか 10 個の CPU でスケジュールされています。 - 6
- Huge Page のサイズ。x86-64 アーキテクチャーの有効な値は 1Gi と 2Mi です。この例は、サイズが 1Gi の 8 個の Huge Page に対する要求です。
- 7
- SR-IOV
NetworkAttachmentDefinition
オブジェクトの名前。
- エディターを保存し、終了します。
VirtualMachine
マニフェストを適用します。$ oc apply -f <file_name>.yaml
ゲストオペレーティングシステムを設定します。次の例は、RHEL 8 OS の設定手順を示しています。
GRUB ブートローダーコマンドラインインターフェイスを使用して、Huge Page を設定します。次の例では、1G の Huge Page を 8 個指定しています。
$ grubby --update-kernel=ALL --args="default_hugepagesz=1GB hugepagesz=1G hugepages=8"
TuneD アプリケーションで
cpu-partitioning
プロファイルを使用して低レイテンシーチューニングを実現するには、次のコマンドを実行します。$ dnf install -y tuned-profiles-cpu-partitioning
$ echo isolated_cores=2-9 > /etc/tuned/cpu-partitioning-variables.conf
最初の 2 つの CPU (0 と 1) はハウスキーピングタスク用に確保され、残りは DPDK アプリケーション用に分離されます。
$ tuned-adm profile cpu-partitioning
driverctl
デバイスドライバー制御ユーティリティーを使用して、SR-IOV NIC ドライバーをオーバーライドします。$ dnf install -y driverctl
$ driverctl set-override 0000:07:00.0 vfio-pci
- 仮想マシンを再起動して変更を適用します。
10.18.4.8. 次のステップ
10.18.5. 仮想マシンのサービスメッシュへの接続
OpenShift Virtualization が OpenShift Service Mesh に統合されるようになりました。IPv4 を使用してデフォルトの Pod ネットワークで仮想マシンのワークロードを実行する Pod 間のトラフィックのモニター、可視化、制御が可能です。
10.18.5.1. 前提条件
- サービスメッシュ Operator を インストールし、サービスメッシュコントロールプレーン をデプロイしておく必要があります。
- 仮想マシンが作成される namespace を サービスメッシュメンバーロール に追加しておく必要があります。
-
デフォルトの Pod ネットワークには
masquerade
バインディングメソッドを使用する必要があります。
10.18.5.2. サービスメッシュの仮想マシンの設定
仮想マシン (VM) ワークロードをサービスメッシュに追加するには、sidecar.istio.io/inject
アノテーションを true
に設定して、仮想マシン設定ファイルでサイドカーコンテナーの自動挿入を有効にします。次に、仮想マシンをサービスとして公開し、メッシュでアプリケーションを表示します。
前提条件
- ポートの競合を回避するには、Istio サイドカープロキシーが使用するポートを使用しないでください。これには、ポート 15000、15001、15006、15008、15020、15021、および 15090 が含まれます。
手順
仮想マシン設定ファイルを編集し、
sidecar.istio.io/inject: "true"
アノテーションを追加します。設定ファイルのサンプル
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: labels: kubevirt.io/vm: vm-istio name: vm-istio spec: runStrategy: Always template: metadata: labels: kubevirt.io/vm: vm-istio app: vm-istio 1 annotations: sidecar.istio.io/inject: "true" 2 spec: domain: devices: interfaces: - name: default masquerade: {} 3 disks: - disk: bus: virtio name: containerdisk - disk: bus: virtio name: cloudinitdisk resources: requests: memory: 1024M networks: - name: default pod: {} terminationGracePeriodSeconds: 180 volumes: - containerDisk: image: registry:5000/kubevirt/fedora-cloud-container-disk-demo:devel name: containerdisk
仮想マシン設定を適用します。
$ oc apply -f <vm_name>.yaml 1
- 1
- 仮想マシン YAML ファイルの名前。
Service
オブジェクトを作成し、仮想マシンをサービスメッシュに公開します。apiVersion: v1 kind: Service metadata: name: vm-istio spec: selector: app: vm-istio 1 ports: - port: 8080 name: http protocol: TCP
- 1
- サービスの対象となる Pod セットを判別するサービスセレクターです。この属性は、仮想マシン設定ファイルの
spec.metadata.labels
フィールドに対応します。上記の例では、vm-istio
という名前のService
オブジェクトは、ラベルがapp=vm-istio
の Pod の TCP ポート 8080 をターゲットにします。
サービスを作成します。
$ oc create -f <service_name>.yaml 1
- 1
- サービス YAML ファイルの名前。
10.18.6. 仮想マシンの IP アドレスの設定
仮想マシンの静的および動的 IP アドレスを設定できます。
10.18.6.1. cloud-init を使用した新規仮想マシンの IP アドレスの設定
仮想マシン (VM) を作成するときに、cloud-init を使用してセカンダリー NIC の IP アドレスを設定できます。IP アドレスは、動的または静的にプロビジョニングできます。
VM が Pod ネットワークに接続されている場合、更新しない限り、Pod ネットワークインターフェイスがデフォルトルートになります。
前提条件
- 仮想マシンはセカンダリーネットワークに接続されている。
- 仮想マシンの動的 IP を設定するために、セカンダリーネットワーク上で使用できる DHCP サーバーがある。
手順
仮想マシン設定の
spec.template.spec.volumes.cloudInitNoCloud.networkData
スタンザを編集します。動的 IP アドレスを設定するには、インターフェイス名を指定し、DHCP を有効にします。
kind: VirtualMachine spec: # ... template: # ... spec: volumes: - cloudInitNoCloud: networkData: | version: 2 ethernets: eth1: 1 dhcp4: true
- 1
- インターフェイス名を指定します。
静的 IP を設定するには、インターフェイス名と IP アドレスを指定します。
kind: VirtualMachine spec: # ... template: # ... spec: volumes: - cloudInitNoCloud: networkData: | version: 2 ethernets: eth1: 1 addresses: - 10.10.10.14/24 2
10.18.7. NIC の IP アドレスの仮想マシンへの表示
Web コンソールまたは oc
クライアントを使用して、ネットワークインターフェイスコントローラー (NIC) の IP アドレスを表示できます。QEMU ゲストエージェント は、仮想マシンのセカンダリーネットワークに関する追加情報を表示します。
10.18.7.1. 前提条件
- QEMU ゲストエージェントを仮想マシンにインストールしている。
10.18.7.2. CLI での仮想マシンインターフェイスの IP アドレスの表示
ネットワークインターフェイス設定は oc describe vmi <vmi_name>
コマンドに含まれます。
IP アドレス情報は、仮想マシン上で ip addr
を実行するか、oc get vmi <vmi_name> -o yaml
を実行して表示することもできます。
手順
oc describe
コマンドを使用して、仮想マシンインターフェイス設定を表示します。$ oc describe vmi <vmi_name>
出力例
# ... Interfaces: Interface Name: eth0 Ip Address: 10.244.0.37/24 Ip Addresses: 10.244.0.37/24 fe80::858:aff:fef4:25/64 Mac: 0a:58:0a:f4:00:25 Name: default Interface Name: v2 Ip Address: 1.1.1.7/24 Ip Addresses: 1.1.1.7/24 fe80::f4d9:70ff:fe13:9089/64 Mac: f6:d9:70:13:90:89 Interface Name: v1 Ip Address: 1.1.1.1/24 Ip Addresses: 1.1.1.1/24 1.1.1.2/24 1.1.1.4/24 2001:de7:0:f101::1/64 2001:db8:0:f101::1/64 fe80::1420:84ff:fe10:17aa/64 Mac: 16:20:84:10:17:aa
10.18.7.3. Web コンソールでの仮想マシンインターフェイスの IP アドレスの表示
IP 情報は、仮想マシンの VirtualMachine details ページに表示されます。
手順
-
OpenShift Container Platform コンソールで、サイドメニューから Virtualization
VirtualMachines をクリックします。 - 仮想マシン名を選択して、VirtualMachine details ページを開きます。
接続されている各 NIC の情報は、Details タブの IP Address の下に表示されます。
10.18.8. クラスタードメイン名を使用したセカンダリーネットワーク上の仮想マシンへのアクセス
クラスターの完全修飾ドメイン名 (FQDN) を使用して、クラスターの外部からセカンダリーネットワークインターフェイスに接続されている仮想マシン (VM) にアクセスできます。
クラスター FQDN を使用した VM へのアクセスは、テクノロジープレビュー機能のみです。テクノロジープレビュー機能は、Red Hat 製品サポートのサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではない場合があります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
10.18.8.1. セカンダリーネットワーク用の DNS サーバーの設定
Cluster Network Addons Operator (CNAO) は、HyperConverged
カスタムリソース (CR) で KubeSecondaryDNS
機能ゲートを有効にすると、ドメインネームサーバー (DNS) サーバーと監視コンポーネントをデプロイします。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
パーミッションを持つ OpenShift Container Platform クラスターにアクセスできる。
手順
MetalLB またはその他のロードバランサーを使用して
LoadBalancer
サービスを作成し、DNS サーバーをクラスター外に公開します。サービスはポート 53 でリッスンし、ポート 5353 をターゲットにします。以下に例を示します。$ oc expose -n openshift-cnv deployment/secondary-dns --name=dns-lb --type=LoadBalancer --port=53 --target-port=5353 --protocol='UDP'
Service
オブジェクトをクエリーして、サービスのパブリック IP アドレスを取得します。$ oc get service -n openshift-cnv
出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE dns-lb LoadBalancer 172.30.27.5 10.46.41.94 53:31829/TCP 5s
HyperConverged
CR を編集して、DNS サーバーと監視コンポーネントをデプロイします。apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: featureGates: deployKubeSecondaryDNS: true 1 kubeSecondaryDNSNameServerIP: "10.46.41.94" 2 # ...
以下のコマンドを使用して、OpenShift Container Platform クラスターの FQDN を取得します。
$ oc get dnses.config.openshift.io cluster -o json | jq .spec.baseDomain
出力例
openshift.example.com
次のいずれかの方法を使用して、DNS サーバーを指定します。
ローカルマシンの
resolv.conf
ファイルにkubeSecondaryDNSNameServerIP
値を追加します。注記resolv.conf
ファイルを編集すると、既存の DNS 設定が上書きされます。kubeSecondaryDNSNameServerIP
値とクラスター FQDN をエンタープライズ DNS サーバーレコードに追加します。以下に例を示します。vm.<FQDN>. IN NS ns.vm.<FQDN>.
ns.vm.<FQDN>. IN A 10.46.41.94
10.18.8.2. クラスター FQDN を使用したセカンダリーネットワーク上の仮想マシンへの接続
クラスターの完全修飾ドメイン名 (FQDN) を使用して、クラスターの外部からセカンダリーネットワークインターフェイスに接続されている仮想マシン (VM) にアクセスできます。
前提条件
- QEMU ゲストエージェントが仮想マシンで実行されている必要があります。
- DNS クライアントを使用して接続する VM の IP アドレスは、パブリックである必要があります。
- セカンダリーネットワーク用の DNS サーバーを設定しました。
- クラスターの完全修飾ドメイン名 (FQDN) を取得しました。
手順
次のコマンドを使用して、VM 設定を取得します。
$ oc get vm -n <namespace> <vm_name> -o yaml
出力例
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: labels: kubevirt.io/vm: example-vm name: example-vm namespace: example-namespace spec: running: true template: metadata: labels: kubevirt.io/vm: example-vm spec: domain: devices: # ... interfaces: - bridge: {} name: example-nic # ... networks: - multus: networkName: bridge-conf name: example-nic 1 # ...
- 1
- セカンダリーネットワークインターフェイスの名前を指定します。
ssh
コマンドを使用して仮想マシンに接続します。$ ssh <user_name>@<interface_name>.<vm_name>.<namespace>.vm.<FQDN> 1
- 1
- ユーザー名、インターフェイス名、仮想マシン名、VM 名前空間、および FQDN を指定します。
例
$ ssh you@example-nic.example-vm.example-namespace.vm.openshift.example.com
10.18.8.3. 関連情報
10.18.9. 仮想マシンの MAC アドレスプールの使用
KubeMacPool コンポーネントは、指定の namespace の仮想マシン NIC に MAC アドレスプールサービスを提供します。
10.18.9.1. KubeMacPool について
KubeMacPool は namespace ごとに MAC アドレスプールを提供し、プールから仮想マシン NIC の MAC アドレスを割り当てます。これにより、NIC には別の仮想マシンの MAC アドレスと競合しない一意の MAC アドレスが割り当てられます。
仮想マシンから作成される仮想マシンインスタンスは、再起動時に割り当てられる MAC アドレスを保持します。
KubeMacPool は、仮想マシンから独立して作成される仮想マシンインスタンスを処理しません。
KubeMacPool は、OpenShift Virtualization のインストール時にデフォルトで有効化されます。namespace の MAC アドレスプールは、mutatevirtualmachines.kubemacpool.io=ignore
ラベルを namespace に追加して無効にできます。ラベルを削除して、namespace の KubeMacPool を再度有効にします。
10.18.9.2. CLI での namespace の MAC アドレスプールの無効化
mutatevirtualmachines.kubemacpool.io=ignore
ラベルを namespace に追加して、namespace の仮想マシンの MAC アドレスプールを無効にします。
手順
mutatevirtualmachines.kubemacpool.io=ignore
ラベルを namespace に追加します。以下の例では、KubeMacPool を 2 つの namespace (<namespace1>
および<namespace2>
) について無効にします。$ oc label namespace <namespace1> <namespace2> mutatevirtualmachines.kubemacpool.io=ignore
10.18.9.3. CLI での namespace の MAC アドレスプールを再度有効にする
namespace の KubeMacPool を無効にしている場合で、これを再度有効にする必要がある場合は、namespace から mutatevirtualmachines.kubemacpool.io=ignore
ラベルを削除します。
以前のバージョンの OpenShift Virtualization では、mutatevirtualmachines.kubemacpool.io=allocate
ラベルを使用して namespace の KubeMacPool を有効にしていました。これは引き続きサポートされますが、KubeMacPool がデフォルトで有効化されるようになったために不要になります。
手順
KubeMacPool ラベルを namespace から削除します。以下の例では、KubeMacPool を 2 つの namespace (
<namespace1>
および<namespace2>
) について再度有効にします。$ oc label namespace <namespace1> <namespace2> mutatevirtualmachines.kubemacpool.io-