×

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

先决条件

  • 必须连接Linux桥接。连接

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

使用指定的MAC地址进行PXE引导

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

先决条件
  • 必须连接Linux桥接。

  • 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桥接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,以便接口首先启动。在此示例中,接口连接到名为<pxe-net>的网络

      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. 指定网络已连接到先前创建的网络附件定义。在本例中,<pxe-net>连接到名为<pxe-net-conf>的网络附件定义。

      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地址。在本例中,我们使用eth1进行PXE启动,没有IP地址。另一个接口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

OpenShift虚拟化网络术语表

OpenShift虚拟化文档中使用了以下术语

容器网络接口 (CNI)

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

Multus

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

自定义资源定义 (CRD)

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

网络附件定义 (NAD)

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

节点网络配置策略 (NNCP)

nmstate项目引入的一个CRD,描述了节点上所需的网络配置。您可以通过将NodeNetworkConfigurationPolicy清单应用到集群来更新节点网络配置,包括添加和删除接口。