Este documento foi traduzido usando tecnologia de tradução automática de máquina. Sempre trabalhamos para apresentar traduções precisas, mas não oferecemos nenhuma garantia em relação à integridade, precisão ou confiabilidade do conteúdo traduzido. Em caso de qualquer discrepância, a versão original em inglês prevalecerá e constituirá o texto official.

Instalação de Inicialização PXE

SUSE Virtualization pode ser instalado automaticamente com Inicialização PXE.

Recomendamos usar iPXE para realizar a inicialização pela rede. Ele possui mais recursos do que o programa tradicional de Inicialização PXE e provavelmente está disponível em placas NIC modernas. Se o firmware iPXE não estiver disponível para sua NIC, as imagens de firmware iPXE podem ser carregadas primeiro do servidor TFTP.

Para ver exemplos de script iPXE, visite Exemplos de iPXE.

Pré-requisitos

Os nós precisam ter pelo menos 8 GiB de RAM porque o instalador carrega o arquivo ISO completo no tmpfs.

O instalador verifica automaticamente se o hardware atende aos requisitos mínimos para uso em produção. Se alguma das verificações falhar, a instalação será interrompida. Para substituir esse comportamento, defina a opção do arquivo de configuração install.skipchecks=true ou o parâmetro do kernel harvester.install.skipchecks=true.

Preparando Servidores HTTP

Um servidor HTTP é necessário para servir arquivos de boot. Vamos supor que o IP do servidor HTTP NGINX seja 10.100.0.10, e ele sirva o diretório /usr/share/nginx/html/ com o caminho http://10.100.0.10/.

Preparando Arquivos de Boot

  • Baixe os arquivos necessários da página Releases.

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

    • O kernel: harvester-<version>-vmlinuz-amd64

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

    • A imagem squashfs do rootfs: harvester-<version>-rootfs-amd64.squashfs

  • Sirva os arquivos.

    Copie ou mova os arquivos baixados para um local apropriado para que possam ser baixados via servidor HTTP. Por exemplo:

      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 Inicialização iPXE

Ao realizar uma instalação automática, existem dois modos:

  • CREATE: estamos instalando um nó para construir um cluster inicial.

  • JOIN: estamos instalando um nó para ingressar em um cluster existente.

Você pode atribuir funções aos nós para suportar diferentes cenários. Para mais informações, consulte Arquivo de Configuração.

Modo CRIAR

Riscos de Segurança: O arquivo de configuração abaixo contém credenciais que devem ser mantidas em segredo. Por favor, não torne o arquivo de configuração acessível publicamente.

Crie um arquivo de configuração chamado config-create.yaml para o modo CREATE. Modifique os valores conforme necessário:

# 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 precisam ser instaladas usando o modo CREATE, o seguinte é um script iPXE que inicializa o kernel com o arquivo de configuração acima:

#!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

Isso assume que o script iPXE está armazenado em /usr/share/nginx/html/harvester/ipxe-create.

Se você tiver várias interfaces de rede, pode aproveitar o parâmetro ip= do dracut para especificar a interface de inicialização e quaisquer outras configurações de rede que o dracut suporta (por exemplo, ip=eth1:dhcp). Consulte man dracut.cmdline para mais informações.

Use o parâmetro ip= para designar apenas a interface de inicialização, pois só suportamos um único ip= parâmetro.

Modo JOIN

Riscos de Segurança: O arquivo de configuração abaixo contém credenciais que devem ser mantidas em segredo. Por favor, não torne o arquivo de configuração acessível publicamente.

Crie um arquivo de configuração chamado config-join.yaml para o modo JOIN. Modifique os valores conforme necessário:

# 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

Observe que o mode é join e o server_url precisa ser fornecido.

Para máquinas que precisam ser instaladas em JOIN modo, o seguinte é um script iPXE que inicializa o kernel com a configuração acima:

#!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

Isso assume que o script iPXE está armazenado em /usr/share/nginx/html/harvester/ipxe-join.

Configuração do Servidor DHCP

No cenário de instalação PXE, você deve adicionar a opção routers (option routers) ao configurar o servidor DHCP. Esta opção é usada para adicionar a rota padrão no host. Sem a rota padrão, o nó não conseguirá iniciar.

No cenário de instalação ISO, quando a interface de rede de gerenciamento está em modo DHCP, você também deve adicionar a opção routers (option routers) ao configurar o servidor DHCP.

Por exemplo:

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

Para mais informações, veja Configuração da Opção ISC DHCPv4.

O seguinte é um exemplo de como configurar o servidor ISC DHCP para oferecer scripts 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; }
}

O arquivo de configuração declara uma sub-rede e dois grupos. O primeiro grupo é para hosts inicializarem usando CREATE modo e o outro é para JOIN modo. Por padrão, o caminho iPXE é escolhido, mas se detectar um cliente PXE, oferece a imagem iPXE de acordo com a arquitetura do cliente. Por favor, prepare essas imagens e um servidor TFTP primeiro.

O Internet Systems Consortium (ISC) anunciou o fim do serviço (EOL) do ISC DHCP em 2022. Os usuários do ISC DHCP são incentivados a migrar para o Kea DHCP, mais moderno e rico em recursos, que o ISC projetou para ambientes de rede mais modernos. Se você já está usando o servidor Kea DHCPv4, verifique o seguinte exemplo de configuração. Para mais informações, veja Configuração do 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"
      }
    ]
  }
]

Arquivo de Configuração

Para mais informações, consulte Arquivo de Configuração.

Por padrão, o primeiro nó será o nó de gerenciamento do cluster. Quando há 3 nós, os outros 2 nós adicionados primeiro são automaticamente promovidos a nós de gerenciamento para formar um cluster HA.

Se você quiser promover nós de gerenciamento de diferentes zonas, pode adicionar o rótulo do nó topology.kubernetes.io/zone na configuração os.labels. Neste caso, são necessárias pelo menos três zonas diferentes.

Os usuários também podem fornecer configuração por meio de parâmetros do kernel. Por exemplo, para especificar o modo de instalação CREATE, os usuários podem passar o parâmetro do kernel harvester.install.mode=create ao inicializar. Os valores passados por meio de parâmetros do kernel têm prioridade maior do que os valores especificados no arquivo de configuração.

Suporte ao Boot HTTP UEFI

O firmware UEFI suporta o carregamento de uma imagem de inicialização de um servidor HTTP. Esta seção demonstra como usar a inicialização HTTP UEFI para carregar o programa iPXE e realizar uma instalação automática.

Servir o Programa iPXE

Baixe o programa UEFI iPXE de http://boot.ipxe.org/ipxe.efi e certifique-se de que ipxe.efi pode ser baixado do servidor HTTP. Por exemplo:

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

O arquivo agora pode ser baixado de http://10.100.0.10/harvester/ipxe.efi localmente.

Configuração do Servidor DHCP

Se o usuário planeja usar o recurso de inicialização HTTP UEFI obtendo um IP dinâmico primeiro, o servidor DHCP precisa fornecer a URL do programa iPXE quando perceber tal solicitação. A seguir está um exemplo atualizado 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; }
}

A declaração elsif substring é nova e oferece http://10.100.0.10/harvester/ipxe.efi quando percebe uma solicitação DHCP de inicialização HTTP UEFI. Depois que o cliente busca o programa iPXE e o executa, o programa iPXE enviará uma solicitação DHCP novamente e carregará o script iPXE da URL http://10.100.0.10/harvester/ipxe-create-efi.

Se você deseja habilitar a inicialização HTTP UEFI no servidor Kea DHCPv4, deve adicionar um novo client-class ao final do client-classes.

Exemplo:

{
  "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"
}

O Script iPXE para Inicialização UEFI

É obrigatório especificar a imagem initrd para inicialização UEFI nos parâmetros do kernel. A seguir está uma versão atualizada do script iPXE para o 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

O parâmetro initrd=harvester-<version>-initrd é obrigatório.

Boot de rede VLAN marcada

Para realizar a inicialização PXE sobre a rede VLAN marcada, os hosts SUSE Virtualization devem ser configurados com as seguintes configurações de BIOS/UEFI:

  • O ID da VLAN é definido como a identidade da rede.

  • O protocolo de inicialização é definido como PXE.

  • O DHCP está habilitado.

Uma inicialização de rede bem-sucedida pode exigir alterações de configuração adicionais, dependendo das especificações do host. O método para fazer essas alterações também pode variar. Por exemplo, em um servidor HPE ProLiant DL360 Gen9, você só pode alterar o protocolo de inicialização e o ID da VLAN através do firmware da NIC.

Para obter mais informações, consulte a documentação do seu servidor.

Para garantir que a interface de rede correta seja usada no momento da inicialização, atualize o comando iPXE kernel com os seguintes parâmetros dracut:

  • BOOTIF=<mac_address>: Usa a interface de rede chamada <interface_name>

  • ifname=<interface_name>:<mac_address>: Atribui o nome <interface_name> à interface de rede com o endereço <mac_address>

  • vlan=<vlan_id>:<interface_name>: Configura o dispositivo VLAN chamado <vlan_id> em <interface_name>

Exemplo 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 de kernel úteis

Além da configuração, você também pode especificar outros parâmetros de kernel que são úteis em diferentes cenários. Veja também dracut.cmdline(7).

ip=dhcp

Se você tiver várias interfaces de rede, pode adicionar o parâmetro ip=dhcp para obter IP do servidor DHCP de todas as interfaces.

rd.net.dhcp.retry=<cnt>

Falhar ao obter IP do servidor DHCP fará com que a inicialização do iPXE falhe. Você pode adicionar o parâmetro rd.net.dhcp.retry=<cnt> para tentar novamente a solicitação DHCP por <cnt> vezes.

harvester.install.skipchecks=true

A instalação é parada se as verificações de hardware falharem (porque os requisitos mínimos para uso em produção não são atendidos). Para substituir esse comportamento, defina o parâmetro do kernel harvester.install.skipchecks=true. Quando definido como true, as mensagens de aviso ainda são salvas em /var/log/console.log, mas a instalação prossegue mesmo que os requisitos de hardware para uso em produção não sejam atendidos.

harvester.install.with_net_images=true

O instalador não pré-carrega imagens durante a instalação e, em vez disso, baixa todas as imagens necessárias da internet após a conclusão da instalação. O uso deste parâmetro não é recomendado na maioria dos casos. Para mais informações, veja Net Install ISO.

harvester.install.mode=install

Inicia automaticamente o instalador em modo de instalação na inicialização.

console=tty1

Especifica o teletipo do console a ser ativado na inicialização.

harvester.install.tty=tty1

Especifica qual console teletipo iniciar o instalador.

net.ifnames=1

Habilita nomes de interface de rede previsíveis no instalador, que corresponderão ao padrão do sistema após SUSE Virtualization ser instalado. Isso permite que o sistema utilize as interfaces corretas.