Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado.

Instalación de arranque PXE

SUSE Virtualization se puede instalar automáticamente con arranque PXE.

Recomendamos utilizar iPXE para realizar el arranque por red. Tiene más características que el programa tradicional de arranque PXE y es probable que esté disponible en las tarjetas NIC modernas. Si el firmware de iPXE no está disponible para tu tarjeta NIC, las imágenes del firmware de iPXE se pueden cargar primero desde el servidor TFTP.

Para ver ejemplos de scripts de iPXE, visita Ejemplos de iPXE.

Requisitos previos

Los nodos necesitan tener al menos 8 GiB de RAM porque el instalador carga el archivo ISO completo en tmpfs.

El instalador comprueba automáticamente si el hardware cumple con los requisitos mínimos para uso en producción. Si alguna de las comprobaciones falla, la instalación se detendrá. Para anular este comportamiento, establece ya sea la opción del archivo de configuración install.skipchecks=true o el parámetro del kernel harvester.install.skipchecks=true.

Preparando servidores HTTP

Se requiere un servidor HTTP para servir archivos de arranque. Supongamos que la IP del servidor HTTP NGINX es 10.100.0.10, y sirve el directorio /usr/share/nginx/html/ con la ruta http://10.100.0.10/.

Preparando archivos de arranque

  • Descarga los archivos requeridos de la página Releases.

    • El ISO: harvester-<version>-amd64.iso

    • El núcleo de Linux: harvester-<version>-vmlinuz-amd64

    • El initrd: harvester-<version>-initrd-amd64

    • La imagen squashfs de rootfs: harvester-<version>-rootfs-amd64.squashfs

  • Sirve los archivos.

    Copia o mueve los archivos descargados a una ubicación apropiada para que puedan ser descargados a través del servidor HTTP. Por ejemplo:

      sudo mkdir -p /usr/share/nginx/html/harvester/
      sudo cp /path/to/harvester-<version>-amd64.iso /usr/share/nginx/html/harvester/
      sudo cp /path/to/harvester-<version>-vmlinuz-amd64 /usr/share/nginx/html/harvester/
      sudo cp /path/to/harvester-<version>-initrd-amd64 /usr/share/nginx/html/harvester/
      sudo cp /path/to/harvester-<version>-rootfs-amd64.squashfs /usr/share/nginx/html/harvester/

Preparando scripts de arranque iPXE

Al realizar una instalación automática, hay dos modos:

  • CREATE: estamos instalando un nodo para construir un clúster inicial.

  • JOIN: estamos instalando un nodo para unirse a un clúster existente.

Puedes asignar roles a los nodos para soportar diferentes escenarios. Para más información, consulta Archivo de configuración.

Modo CREAR

Riesgos de seguridad: El archivo de configuración a continuación contiene credenciales que deben mantenerse en secreto. Por favor, no hagas que el archivo de configuración sea accesible públicamente.

Crea un archivo de configuración llamado config-create.yaml para el modo CREATE. Modifica los valores según sea necesario:

# cat /usr/share/nginx/html/harvester/config-create.yaml
scheme_version: 1
token: token # Replace with a desired token
os:
  hostname: node1 # Set a hostname. This can be omitted if DHCP server offers hostnames
  ssh_authorized_keys:
  - ssh-rsa ... # Replace with your public key
  password: p@ssword     # Replace with your password
  ntp_servers:
  - 0.suse.pool.ntp.org
  - 1.suse.pool.ntp.org
install:
  mode: create
  management_interface: # available as of v1.1.0
    interfaces:
      - name: ens5
    default_route: true
    method: dhcp
    bond_options:
      mode: balance-tlb
      miimon: 100
  device: /dev/sda # The target disk to install
#  data_disk: /dev/sdb # It is recommended to use a separate disk to store VM data
  iso_url: http://10.100.0.10/harvester/harvester-<version>-amd64.iso
#  tty: ttyS1,115200n8   # For machines without a VGA console

  vip: 10.100.0.99        # The VIP to access the UI. Make sure the IP is free to use
  vip_mode: static        # Or dhcp, check configuration file for more information
#  vip_hw_addr: 52:54:00:ec:0e:0b   # Leave empty when vip_mode is static

Para máquinas que necesitan ser instaladas usando el modo CREATE, lo siguiente es un script iPXE que arranca el núcleo de Linux con la configuración anterior:

#!ipxe
kernel harvester-<version>-vmlinuz ip=dhcp net.ifnames=1 rd.cos.disable rd.noverifyssl console=tty1 root=live:http://10.100.0.10/harvester/rootfs.squashfs harvester.install.automatic=true harvester.install.config_url=http://10.100.0.10/harvester/config-create.yaml
initrd harvester-<version>-initrd
boot

Esto asume que el script iPXE está almacenado en /usr/share/nginx/html/harvester/ipxe-create.

Si tienes múltiples interfaces de red, puedes aprovechar el parámetro ip= de dracut para especificar la interfaz de arranque y cualquier otra configuración de red que dracut soporte (por ejemplo, ip=eth1:dhcp). Consulta man dracut.cmdline para más información.

Usa el parámetro ip= para designar solo la interfaz de arranque, ya que solo soportamos un único ip= parámetro.

Modo UNIR

Riesgos de seguridad: El archivo de configuración a continuación contiene credenciales que deben mantenerse en secreto. Por favor, no hagas que el archivo de configuración sea accesible públicamente.

Crea un archivo de configuración llamado config-join.yaml para el modo JOIN. Modifica los valores según sea necesario:

# cat /usr/share/nginx/html/harvester/config-join.yaml
scheme_version: 1
server_url: https://10.100.0.99:443  # Should be the VIP set up in "CREATE" config
token: token
os:
  hostname: node2
  ssh_authorized_keys:
    - ssh-rsa ... # Replace with your public key
  password: p@ssword     # Replace with your password
  dns_nameservers:
  - 1.1.1.1
  - 8.8.8.8
install:
  mode: join
  management_interface: # available as of v1.1.0
    interfaces:
      - name: ens5
    default_route: true
    method: dhcp
    bond_options:
      mode: balance-tlb
      miimon: 100
  device: /dev/sda # The target disk to install
#  data_disk: /dev/sdb # It is recommended to use a separate disk to store VM data
  iso_url: http://10.100.0.10/harvester/harvester-<version>-amd64.iso
#  tty: ttyS1,115200n8   # For machines without a VGA console

Ten en cuenta que el mode es join y el server_url debe ser proporcionado.

Para máquinas que necesitan ser instaladas en modo JOIN, el siguiente es un script iPXE que arranca el núcleo de Linux con la configuración anterior:

#!ipxe
kernel harvester-<version>-vmlinuz ip=dhcp net.ifnames=1 rd.cos.disable rd.noverifyssl console=tty1 root=live:http://10.100.0.10/harvester/rootfs.squashfs harvester.install.automatic=true harvester.install.config_url=http://10.100.0.10/harvester/config-join.yaml
initrd harvester-<version>-initrd
boot

Esto asume que el script iPXE está almacenado en /usr/share/nginx/html/harvester/ipxe-join.

Configuración del servidor DHCP

En el escenario de instalación PXE, se requiere añadir la opción routers (option routers) al configurar el servidor DHCP. Esta opción se utiliza para añadir la ruta por defecto en el host. Sin la ruta por defecto, el nodo no podrá iniciarse.

En el escenario de instalación ISO, cuando la interfaz de red de gestión está en modo DHCP, también se requiere añadir la opción routers (option routers) al configurar el servidor DHCP.

Por ejemplo:

    Harvester Host:~ # ip route
    default via 192.168.122.1 dev mgmt-br proto dhcp

Para más información, consulta Configuración de la Opción ISC DHCPv4.

El siguiente es un ejemplo de cómo configurar el servidor DHCP ISC para ofrecer scripts de iPXE:

option architecture-type code 93 = unsigned integer 16;

subnet 10.100.0.0 netmask 255.255.255.0 {
    option routers 10.100.0.10;
        option domain-name-servers 192.168.2.1;
    range 10.100.0.100 10.100.0.253;
}

group {
  # create group
  if exists user-class and option user-class = "iPXE" {
    # iPXE Boot
    if option architecture-type = 00:07 {
      filename "http://10.100.0.10/harvester/ipxe-create-efi";
    } else {
      filename "http://10.100.0.10/harvester/ipxe-create";
    }
  } else {
    # PXE Boot
    if option architecture-type = 00:07 {
      # UEFI
      filename "ipxe.efi";
    } else {
      # Non-UEFI
      filename "undionly.kpxe";
    }
  }

  host node1 { hardware ethernet 52:54:00:6b:13:e2; }
}

group {
  # join group
  if exists user-class and option user-class = "iPXE" {
    # iPXE Boot
    if option architecture-type = 00:07 {
      filename "http://10.100.0.10/harvester/ipxe-join-efi";
    } else {
      filename "http://10.100.0.10/harvester/ipxe-join";
    }
  } else {
    # PXE Boot
    if option architecture-type = 00:07 {
      # UEFI
      filename "ipxe.efi";
    } else {
      # Non-UEFI
      filename "undionly.kpxe";
    }
  }

  host node2 { hardware ethernet 52:54:00:69:d5:92; }
}

El archivo de configuración declara una subred y dos grupos. El primer grupo es para hosts que arranquen utilizando modo CREATE y el otro es para modo JOIN. Por defecto, se elige la ruta de iPXE, pero si detecta un cliente PXE, ofrece la imagen de iPXE según la arquitectura del cliente. Por favor, prepara esas imágenes y un servidor TFTP primero.

El Internet Systems Consortium (ISC) anunció el fin de vida (EOL) para ISC DHCP en 2022. Se anima a los usuarios de ISC DHCP a migrar al más nuevo y rico en características Kea DHCP, que el ISC diseñó para entornos de red más modernos. Si ya estás utilizando el servidor Kea DHCPv4, consulta el siguiente ejemplo de configuración. Para más información, consulta Configuración de Kea DHCPv4.

"client-classes": [
  {
    "name": "iPXE UEFI/CREATE",
    "test": "option[user-class].exists and substring(option[user-class].hex,0,4) == 'iPXE' and option[client-system].hex == 0x0007",
    "boot-file-name": "http://10.100.0.10/harvester/ipxe-create-efi",
    "only-if-required": true
  },
  {
    "name": "iPXE non-UEFI/CREATE",
    "test": "option[user-class].exists and substring(option[user-class].hex,0,4) == 'iPXE' and not option[client-system].hex == 0x0007",
    "boot-file-name": "http://10.100.0.10/harvester/ipxe-create",
    "only-if-required": true
  },
  {
    "name": "iPXE UEFI/JOIN",
    "test": "option[user-class].exists and substring(option[user-class].hex,0,4) == 'iPXE' and option[client-system].hex == 0x0007",
    "boot-file-name": "http://10.100.0.10/harvester/ipxe-join-efi",
    "only-if-required": true
  },
  {
    "name": "iPXE non-UEFI/JOIN",
    "test": "option[user-class].exists and substring(option[user-class].hex,0,4) == 'iPXE' and not option[client-system].hex == 0x0007",
    "boot-file-name": "http://10.100.0.10/harvester/ipxe-join",
    "only-if-required": true
  },
  {
    "name": "PXE UEFI",
    "test": "option[user-class].exists and not substring(option[user-class].hex,0,4) == 'iPXE' and option[client-system].hex == 0x0007",
    "next-server": "10.100.0.20",
    "boot-file-name": "ipxe.efi"
  },
  {
    "name": "PXE non-UEFI",
    "test": "option[user-class].exists and not substring(option[user-class].hex,0,4) == 'iPXE' and option[client-system].hex == 0x0007",
    "next-server": "10.100.0.20",
    "boot-file-name": "undionly.kpxe"
  }
]

"subnet4": [
  {
    "subnet": "10.100.0.0/24",
    "pools": [
      {
        "pool": "10.100.0.100 - 10.100.0.199",
        "require-client-classes" : [ "iPXE UEFI/CREATE", "iPXE non-UEFI/CREATE" ]
      }.
      {
        "pool": "10.100.0.200 - 10.100.0.253",
        "require-client-classes" : [ "iPXE UEFI/JOIN", "iPXE non-UEFI/JOIN" ]
      }
    ],
    "option-data": [
      {
        "name": "routers",
        "data": "10.100.0.10"
      }
    ],
    "reservations": [
      // assign ip address to the host for booting in CREATE mode
      {
        "hw-address": "52:54:00:6b:13:e2",
        "ip-address": "10.100.0.101"
      },
      // assign ip address to the host for booting in JOIN mode
      {
        "hw-address": "52:54:00:69:d5:92",
        "ip-address": "10.100.0.201"
      }
    ]
  }
]

Archivo de configuración

Para más información, consulta Archivo de configuración.

Por defecto, el primer nodo será el nodo de gestión del clúster. Cuando hay 3 nodos, los otros 2 nodos añadidos primero se promueven automáticamente a nodos de gestión para formar un clúster HA.

Si deseas promover nodos de gestión de diferentes zonas, puedes añadir la etiqueta de nodo topology.kubernetes.io/zone en la config os.labels. En este caso, se requieren al menos tres zonas diferentes.

Los usuarios también pueden proporcionar configuración a través de parámetros del kernel. Por ejemplo, para especificar el modo de instalación CREATE, los usuarios pueden pasar el parámetro del kernel harvester.install.mode=create al arrancar. Los valores pasados a través de parámetros del kernel tienen mayor prioridad que los valores especificados en el archivo de configuración.

Soporte para arranque HTTP UEFI

El firmware UEFI admite la carga de una imagen de arranque desde un servidor HTTP. Esta sección demuestra cómo usar el arranque HTTP UEFI para cargar el programa iPXE y realizar una instalación automática.

Servir el programa iPXE

Descargue el programa UEFI iPXE desde http://boot.ipxe.org/ipxe.efi y asegúrese de que ipxe.efi se pueda descargar desde el servidor HTTP. Por ejemplo:

cd /usr/share/nginx/html/harvester/
wget http://boot.ipxe.org/ipxe.efi

El archivo ahora se puede descargar localmente desde http://10.100.0.10/harvester/ipxe.efi.

Configuración del servidor DHCP

Si el usuario planea usar la función de arranque HTTP UEFI obteniendo primero una IP dinámica, el servidor DHCP necesita proporcionar la URL del programa iPXE cuando detecta tal solicitud. El siguiente es un ejemplo actualizado de grupo de servidor ISC DHCP:

group {
  # create group
  if exists user-class and option user-class = "iPXE" {
    # iPXE Boot
    if option architecture-type = 00:07 {
      filename "http://10.100.0.10/harvester/ipxe-create-efi";
    } else {
      filename "http://10.100.0.10/harvester/ipxe-create";
    }
  } elsif substring (option vendor-class-identifier, 0, 10) = "HTTPClient" {
    # UEFI HTTP Boot
    option vendor-class-identifier "HTTPClient";
    filename "http://10.100.0.10/harvester/ipxe.efi";
  } else {
    # PXE Boot
    if option architecture-type = 00:07 {
      # UEFI
      filename "ipxe.efi";
    } else {
      # Non-UEFI
      filename "undionly.kpxe";
    }
  }

  host node1 { hardware ethernet 52:54:00:6b:13:e2; }
}

La declaración elsif substring es nueva y ofrece http://10.100.0.10/harvester/ipxe.efi cuando detecta una solicitud DHCP de arranque HTTP UEFI. Después de que el cliente obtenga el programa iPXE y lo ejecute, el programa iPXE enviará nuevamente una solicitud DHCP y cargará el script iPXE desde la URL http://10.100.0.10/harvester/ipxe-create-efi.

Si deseas habilitar el arranque HTTP UEFI en el servidor Kea DHCPv4, debes añadir un nuevo client-class al final del client-classes.

Ejemplo:

{
  "name": "HTTP",
  "test": "substring(option[vendor-class-identifier].hex,0,10) == 'HTTPClient'",
  "option-data": [
    {
      "name": "vendor-class-identifier",
      "data": "HTTPClient"
    }
  ],
  "boot-file-name": "http://10.100.0.10/harvester/ipxe.efi"
}

El script iPXE para arranque UEFI

Es obligatorio especificar la imagen initrd para el arranque UEFI en los parámetros del kernel. La siguiente es una versión actualizada del script iPXE para el modo CREATE.

#!ipxe
kernel harvester-<version>-vmlinuz initrd=harvester-<version>-initrd ip=dhcp net.ifnames=1 rd.cos.disable rd.noverifyssl console=tty1 root=live:http://10.100.0.10/harvester/rootfs.squashfs harvester.install.automatic=true harvester.install.config_url=http://10.100.0.10/harvester/config-create.yaml
initrd harvester-<version>-initrd
boot

El parámetro initrd=harvester-<version>-initrd es obligatorio.

Arranque de red VLAN etiquetada

Para realizar el arranque PXE a través de una red VLAN etiquetada, los hosts SUSE Virtualization deben estar configurados con los siguientes ajustes de BIOS/UEFI:

  • El ID de VLAN se establece en la identidad de la red.

  • El protocolo de arranque se establece en PXE.

  • DHCP está habilitado.

Un arranque de red exitoso puede requerir cambios de configuración adicionales dependiendo de las especificaciones del host. El método para realizar estos cambios también puede variar. Por ejemplo, en un servidor HPE ProLiant DL360 Gen9, solo se puede cambiar el protocolo de arranque y el ID de VLAN a través del firmware de la NIC.

Para obtener más información, consulte la documentación de su servidor.

Para asegurarse de que se utiliza la interfaz de red correcta en el momento del arranque, actualice el comando iPXE kernel con los siguientes parámetros de dracut:

  • BOOTIF=<mac_address>: Utiliza la interfaz de red llamada <interface_name>

  • ifname=<interface_name>:<mac_address>: Asigna el nombre <interface_name> a la interfaz de red con la dirección <mac_address>

  • vlan=<vlan_id>:<interface_name>: Configura el dispositivo VLAN llamado <vlan_id> en <interface_name>

Ejemplo de script iPXE:

#!ipxe
kernel harvester-<version>-vmlinuz ip=dhcp net.ifnames=1 rd.cos.disable rd.noverifyssl console=tty1 root=live:http://10.100.0.10/harvester/rootfs.squashfs harvester.install.automatic=true harvester.install.config_url=http://10.100.0.10/harvester/config-create.yaml BOOTIF=<mac_address> ifname=<interface_name>:<mac_address> vlan=<vlan_id>:<interface_name>
initrd harvester-<version>-initrd
boot

Parámetros del kernel útiles

Además de la configuración, también puede especificar otros parámetros del kernel que son útiles en diferentes escenarios. Ver también dracut.cmdline(7).

ip=dhcp

Si tiene múltiples interfaces de red, podría añadir el parámetro ip=dhcp para obtener IP del servidor DHCP desde todas las interfaces de red.

rd.net.dhcp.retry=<cnt>

No conseguir IP del servidor DHCP haría que el arranque de iPXE fallara. Puede añadir el parámetro rd.net.dhcp.retry=<cnt> para reintentar la solicitud DHCP <cnt> veces.

harvester.install.skipchecks=true

La instalación se detiene si las comprobaciones de hardware fallan (porque no se cumplen los requisitos mínimos para el uso en producción). Para anular este comportamiento, establezca el parámetro del kernel harvester.install.skipchecks=true. Cuando se establece en true, los mensajes de advertencia aún se guardan en /var/log/console.log, pero la instalación continúa incluso si no se cumplen los requisitos de hardware para el uso en producción.

harvester.install.with_net_images=true

El instalador no precarga imágenes durante la instalación y, en su lugar, descarga todas las imágenes necesarias de internet una vez que se completa la instalación. El uso de este parámetro no se recomienda en la mayoría de los casos. Para más información, consulte Net Install ISO.

harvester.install.mode=install

Inicia automáticamente el instalador en modo de instalación al arrancar.

console=tty1

Especifica el teletipo de consola que se activará al arrancar.

harvester.install.tty=tty1

Especifica en qué consola de teletipo se iniciará el instalador.

net.ifnames=1

Habilita nombres de interfaz de red predecibles en el instalador, que coincidirán con el predeterminado del sistema después de que se instale SUSE Virtualization. Esto permite que el sistema utilice las interfaces correctas.