×

OpenShift Virtualization 提供 PXE 启动(或网络启动)。网络启动允许计算机启动并加载操作系统或其他程序,无需本地附加存储设备。例如,在部署新主机时,您可以使用它从 PXE 服务器选择所需的操作系统镜像。

使用指定 MAC 地址的 PXE 启动

作为管理员,您可以通过首先为您的 PXE 网络创建 `NetworkAttachmentDefinition` 对象来通过网络启动客户端。然后,在启动虚拟机实例之前,在虚拟机实例配置文件中引用网络附件定义。如果 PXE 服务器需要,您也可以在虚拟机实例配置文件中指定 MAC 地址。

先决条件
  • PXE 服务器必须连接到与桥接器相同的 VLAN。

步骤
  1. 在集群上配置 PXE 网络

    1. 为 PXE 网络创建网络附件定义文件 `pxe-net-conf`

      apiVersion: "k8s.cni.cncf.io/v1"
      kind: NetworkAttachmentDefinition
      metadata:
        name: pxe-net-conf (1)
      spec:
        config: |
          {
            "cniVersion": "0.3.1",
            "name": "pxe-net-conf", (2)
            "type": "bridge", (3)
            "bridge": "bridge-interface", (4)
            "macspoofchk": false, (5)
            "vlan": 100, (6)
            "disableContainerInterface": true,
            "preserveDefaultVlan": false (7)
          }
      1 `NetworkAttachmentDefinition` 对象的名称。
      2 配置的名称。建议将配置名称与网络附件定义的 `name` 值匹配。
      3 提供此网络附件定义网络的容器网络接口 (CNI) 插件的实际名称。此示例使用 Linux bridge CNI 插件。您也可以使用 OVN-Kubernetes localnet 或 SR-IOV CNI 插件。
      4 在节点上配置的 Linux 桥接器的名称。
      5 可选:启用 MAC 欺骗检查的标志。设置为 `true` 时,您无法更改 Pod 或访客接口的 MAC 地址。此属性仅允许单个 MAC 地址离开 Pod,从而提供针对 MAC 欺骗攻击的安全性。
      6 可选:VLAN 标签。节点网络配置策略不需要额外的 VLAN 配置。
      7 可选:指示虚拟机是否通过默认 VLAN 连接到桥接器。默认值为 `true`。
  2. 使用您在上一步中创建的文件创建网络附件定义

    $ oc create -f pxe-net-conf.yaml
  3. 编辑虚拟机实例配置文件以包含接口和网络的详细信息。

    1. 指定网络和 MAC 地址(如果 PXE 服务器需要)。如果未指定 MAC 地址,则会自动分配一个值。

      确保 `bootOrder` 设置为 `1`,以便接口首先启动。在此示例中,接口连接到名为 `` 的网络

      interfaces:
      - masquerade: {}
        name: default
      - bridge: {}
        name: pxe-net
        macAddress: de:00:00:00:00:de
        bootOrder: 1

      启动顺序对于接口和磁盘是全局的。

    2. 为磁盘分配启动设备号,以确保在操作系统预配后正确启动。

      将磁盘 `bootOrder` 值设置为 `2`

      devices:
        disks:
        - disk:
            bus: virtio
          name: containerdisk
          bootOrder: 2
    3. 指定网络连接到先前创建的网络附件定义。在这种情况下,`` 连接到名为 `` 的网络附件定义

      networks:
      - name: default
        pod: {}
      - name: pxe-net
        multus:
          networkName: pxe-net-conf
  4. 创建虚拟机实例

    $ oc create -f vmi-pxe-boot.yaml
    示例输出
      virtualmachineinstance.kubevirt.io "vmi-pxe-boot" created
  5. 等待虚拟机实例运行

    $ oc get vmi vmi-pxe-boot -o yaml | grep -i phase
      phase: Running
  6. 使用 VNC 查看虚拟机实例

    $ virtctl vnc vmi-pxe-boot
  7. 观察启动屏幕以验证 PXE 启动是否成功。

  8. 登录到虚拟机实例

    $ virtctl console vmi-pxe-boot
验证
  1. 验证虚拟机上的接口和 MAC 地址,以及连接到桥接器的接口是否具有指定的 MAC 地址。在本例中,我们为 PXE 启动使用了 `eth1`,没有 IP 地址。另一个接口 `eth0` 从 AWS 上的 Red Hat OpenShift Service 获取了 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

OpenShift Virtualization 网络术语表

以下术语贯穿 OpenShift Virtualization 文档

容器网络接口 (CNI)

一个 云原生计算基金会 项目,专注于容器网络连接。OpenShift Virtualization 使用 CNI 插件构建在基本的 Kubernetes 网络功能之上。

Multus

一个“元”CNI 插件,允许多个 CNI 存在,以便 Pod 或虚拟机可以使用其所需的接口。

自定义资源定义 (CRD)

一个 Kubernetes API 资源,允许您定义自定义资源,或者使用 CRD API 资源定义的对象。

网络附件定义 (NAD)

Multus 项目引入的 CRD,允许您将 Pod、虚拟机和虚拟机实例连接到一个或多个网络。