9.15.6. 仮想マシンの PXE ブートの設定
PXE ブートまたはネットワークブートは OpenShift Virtualization で利用できます。ネットワークブートにより、ローカルに割り当てられたストレージデバイスなしにコンピューターを起動し、オペレーティングシステムまたは他のプログラムを起動し、ロードすることができます。たとえば、これにより、新規ホストのデプロイ時に PXE サーバーから必要な OS イメージを選択できます。
9.15.6.1. MAC アドレスを指定した PXE ブート リンクのコピーリンクがクリップボードにコピーされました!
まず、管理者は PXE ネットワークの NetworkAttachmentDefinition オブジェクトを作成し、ネットワーク経由でクライアントを起動できます。次に、仮想マシンインスタンスの設定ファイルで network attachment definition を参照して仮想マシンインスタンスを起動します。また PXE サーバーで必要な場合には、仮想マシンインスタンスの設定ファイルで MAC アドレスを指定することもできます。
前提条件
- Linux ブリッジが接続されている。
- PXE サーバーがブリッジとして同じ VLAN に接続されている。
-
OpenShift CLI (
oc) がインストールされている。
手順
クラスターに PXE ネットワークを設定します。
PXE ネットワーク
pxe-net-confの network attachment definition ファイルを作成します。apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: pxe-net-conf spec: config: | { "cniVersion": "0.3.1", "name": "pxe-net-conf", "type": "bridge", "bridge": "bridge-interface", "macspoofchk": false, "vlan": 100, "disableContainerInterface": true, "preserveDefaultVlan": false }-
metadata.nameは、NetworkAttachmentDefinitionオブジェクトの名前を指定します。 -
spec.config.nameは、設定の名前を指定します。設定名を network attachment definition のname値に一致させることが推奨されます。 -
spec.config.typeは、このネットワークアタッチメント定義にネットワークを提供する Container Network Interface (CNI) プラグインの実際の名前を指定します。この例では、Linux bridge CNI プラグインを使用します。OVN-Kubernetes localnet または SR-IOV CNI プラグインを使用することもできます。 -
spec.config.bridgeは、ノード上で設定されている Linux ブリッジの名前を指定します。 -
spec.config.macspoofchkは、MAC スプーフィングチェックを有効にするためのオプションのフラグです。trueに設定すると、Pod またはゲストインターフェイスの MAC アドレスを変更できません。この属性により、Pod から出ることができる MAC アドレスは 1 つだけになり、MAC スプーフィング攻撃に対するセキュリティーが確保されます。 -
spec.config.vlanは、オプションの VLAN タグです。Node Network Configuration Policy では、追加の VLAN 設定は必要ありません。 -
spec.config.preserveDefaultVlanは、仮想マシンがデフォルト VLAN を介してブリッジに接続するかどうかを示すオプションのフラグです。デフォルト値はtrueです。
-
直前の手順で作成したファイルを使用して network attachment definition を作成します。
$ oc create -f pxe-net-conf.yaml仮想マシンインスタンス設定ファイルを、インターフェイスおよびネットワークの詳細を含めるように編集します。
PXE サーバーで必要な場合には、ネットワークおよび MAC アドレスを指定します。MAC アドレスが指定されていない場合、値は自動的に割り当てられます。
bootOrderが1に設定されており、インターフェイスが最初に起動することを確認します。この例では、インターフェイスは<pxe-net>というネットワークに接続されています。interfaces: - masquerade: {} name: default - bridge: {} name: pxe-net macAddress: de:00:00:00:00:de bootOrder: 1注記複数のインターフェイスおよびディスクのブートの順序はグローバル順序になります。
オペレーティングシステムのプロビジョニング後に起動が適切に実行されるよう、ブートデバイス番号をディスクに割り当てます。
ディスク
bootOrderの値を2に設定します。devices: disks: - disk: bus: virtio name: containerdisk bootOrder: 2直前に作成された network attachment definition に接続されるネットワークを指定します。このシナリオでは、
<pxe-net>は<pxe-net-conf>という network attachment definition に接続されます。networks: - name: default pod: {} - name: pxe-net multus: networkName: pxe-net-conf
仮想マシンインスタンスを作成します。
$ oc create -f vmi-pxe-boot.yaml出力例
virtualmachineinstance.kubevirt.io "vmi-pxe-boot" created仮想マシンインスタンスの実行を待機します。
$ oc get vmi vmi-pxe-boot -o yaml | grep -i phase phase: RunningVNC を使用して仮想マシンインスタンスを表示します。
$ virtctl vnc vmi-pxe-boot- ブート画面で、PXE ブートが正常に実行されていることを確認します。
仮想マシンインスタンスにログインします。
$ virtctl console vmi-pxe-boot
検証
仮想マシンのインターフェイスおよび MAC アドレスを確認し、ブリッジに接続されたインターフェイスに MAC アドレスが指定されていることを確認します。この場合、PXE ブートには IP アドレスなしに
eth1を使用しています。他のインターフェイスeth0は OpenShift Container Platform から IP アドレスを取得しています。$ ip addr出力例
... 3. eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether de:00:00:00:00:de brd ff:ff:ff:ff:ff:ff