Compartilhar via


Preparar uma máquina virtual baseada no Red Hat para o Azure

Aplica-se a: ✔️ VMs do Linux ✔️ Conjuntos de dimensionamento flexíveis ✔️ Conjunto de dimensionamento uniformes

Neste artigo, você aprende a preparar uma VM (máquina virtual) do RHEL (Red Hat Enterprise Linux) para usá-la no Azure. As versões do RHEL abordadas neste artigo são 7.x, 8.X., 9.x. Os hipervisores para preparação abordados neste artigo são Hyper-V, VM baseada em kernel (KVM), VMware e Kickstart.

Para saber mais informações sobre os requisitos de qualificação para participação no programa Red Hat Cloud Access, confira o site Red Hat Cloud Access e o artigoComo executar o RHEL no Azure. Para saber como automatizar a criação de imagens do Red Hat Enterprise Linux, consulte o Construtor de imagens do Azure.

Observação

Lembre-se das versões que estão no fim da vida útil (EOL) e não têm mais suporte da Red Hat. As imagens carregadas que estão na EOL ou além dela são suportadas em uma base de esforço comercial razoável. Para obter mais informações, confira a Ciclos de vida do produto Red Hat.

Pré-requisitos

Esta seção pressupõe que você já tenha baixado um arquivo ISO do site do Red Hat e instalado a imagem do RHEL em um VHD (disco rígido virtual). Para obter mais informações sobre como usar o Gerenciador do Hyper-V para instalar uma imagem do sistema operacional, confira Como instalar a função Hyper-V e configurar uma máquina virtual.

Notas de instalação do RHEL

  • O Azure não dá suporte ao formato VHDX. O Azure dá suporte apenas ao VHD fixo. Você pode usar o Gerenciador do Hyper-V para converter o disco em formato VHD, ou pode usar o cmdletconvert-vhd. Quando criar o disco, se você usar o VirtualBox, selecione Tamanho fixo em vez da opção padrão alocada dinamicamente.
  • O Azure dá suporte a VMs Gen1 (inicialização do BIOS) e Gen2 (inicialização de UEFI).
  • O tamanho máximo permitido para o VHD é 1.023 GB.
  • O módulo de kernel vfat precisa ser habilitado no kernel.
  • Gerenciador de Volume lógico (LVM) tem suporte e pode ser usado no disco do sistema operacional ou discos de dados em VMs do Azure. Em geral, recomendamos que você use partições padrão no disco do sistema operacional em vez de LVM. Essa prática evita conflitos de nome LVM entre VMs clonadas, especialmente se você precisar anexar um disco do sistema operacional em outra VM idêntica para solução de problemas. Para obter mais informações, consulte a documentação de LVM e RAID.
  • É necessário suporte a kernel para a montagem de sistemas de arquivos de formato de disco universal (UDF) . Na primeira inicialização no Azure, a configuração de provisionamento é transmitida à VM do Linux por meio de mídia formatada para UDF, a qual é anexada ao convidado. O agente de Linux do Azure deve ser capaz de montar o sistema de arquivos UDF para ler sua configuração e provisionar a VM. Sem essa etapa, o provisionamento falha.
  • Não configure uma partição de troca no disco do sistema operacional. Para obter mais informações, leia as seguintes etapas.
  • Todos os VHDs no Azure devem ter um tamanho virtual alinhado a 1 MB. Ao converter de um disco não processado para VHD, certifique-se de que o tamanho do disco não processado seja um múltiplo de 1 MB antes da conversão. Para obter mais informações, leia as seguintes etapas. Consulte também Notas de instalação do Linux.

Observação

Cloud-init >= 21.2 remove o requisito UDF. Entretanto, sem o módulo UDF habilitado, o CD-ROM não será montado durante o provisionamento, o que impede que os dados personalizados sejam aplicados. Uma solução alternativa é aplicar dados personalizados usando dados do usuário. No entanto, ao contrário dos dados personalizados, os dados do usuário não são criptografados. Para obter mais informações, confira a seção Formatos de dados de usuário.

  1. No Gerenciador do Hyper-V, selecione a VM.

  2. Selecione Conectar para abrir uma janela do console para a VM.

  3. Crie ou edite o arquivo /etc/sysconfig/network e adicione o texto a seguir:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. Crie ou edite o arquivo /etc/sysconfig/network-scripts/ifcfg-eth0 e adicione o texto a seguir:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    

    Observação

    Quando você usa a Rede Acelerada, a interface sintética criada deve ser configurada para não ser gerenciada usando uma regra udev. Essa ação impedirá que NetworkManager atribua o mesmo IP a ele que a interface primária.

    Para aplicá-lo:

    sudo tee <<EOF /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules > /dev/null
    # Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
    # This interface is transparently bonded to the synthetic interface,
    # so NetworkManager should just ignore any SRIOV interfaces.
    SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1"
    EOF
    
  5. Verifique se o serviço de rede é iniciado na hora de inicialização:

    sudo systemctl enable network
    
  6. Registre a sua assinatura do Red Hat para habilitar a instalação de pacotes do repositório RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  7. Modifique a linha de inicialização do kernel em sua configuração de grub para incluir mais parâmetros do kernel para o Azure. Para fazer essa modificação, abra /etc/default/grub em um editor de texto e edite o parâmetro GRUB_CMDLINE_LINUX. Por exemplo:

    GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0 net.ifnames=0"
    GRUB_TERMINAL_OUTPUT="serial console"
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    ENABLE_BLSCFG=true
    

    Observação

    Se ENABLE_BLSCFG=false estiver presente em /etc/default/grub em vez de ENABLE_BLSCFG=true, ferramentas como grubedit ou gubby, que dependem da Especificação do Carregador de Inicialização (BLS) para gerenciar entradas e configurações de inicialização, podem não funcionar corretamente no RHEL 8 e 9. Se ENABLE_BLSCFG não estiver presente, o comportamento padrão será false.

    Esta modificação também garante que todas as mensagens de console sejam enviadas para a primeira porta serial e habilita a interação com o console serial, o que pode ajudar o suporte do Azure com problemas de depuração. Esta configuração também desativa as novas convenções de nomenclatura para cartões de interface de rede (NICs).

    rhgb quiet crashkernel=auto
    

    A inicialização gráfica e silenciosa não é útil em um ambiente de rede, quando você deseja que todos os logs sejam enviados para a porta serial. Você pode deixar a opção crashkernel configurada se quiser. Esse parâmetro reduz a quantidade de memória disponível na VM em 128 MB ou mais, o que pode ser um problema para tamanhos de VM menores.

  8. Depois de editar /etc/default/grub, execute o seguinte comando para recompilar a configuração do Grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    

    Observação

    Se você estiver carregando uma VM habilitada para UEFI, o comando para atualizar o grub será grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg.

  9. Confira se o servidor SSH está instalado e configurado para iniciar no momento da inicialização, que geralmente é o padrão. Modifique o /etc/ssh/sshd_config para incluir a seguinte linha:

    ClientAliveInterval 180
    
  10. O pacote WALinuxAgent WALinuxAgent-<version> foi enviado para o repositório de extras do Red Hat. Habilite o repositório de extras:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  11. Instale o agente do Linux do Azure, cloud-init, e outros utilitários necessários:

    sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  12. Configure cloud-init para lidar com o provisionamento:

    1. Configure waagent para cloud-init:

      sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=auto/g' /etc/waagent.conf
      sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
      sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
      

      Observação

      Se estiver migrando uma VM específica e não quiser criar uma imagem generalizada, defina Provisioning.Agent=disabled na configuração /etc/waagent.conf.

    2. Configurar montagens:

      sudo echo "Adding mounts and disk_setup to init stage"
      sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
      sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
      sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
      sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
      
    3. Configure a fonte de dados do Azure:

      sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS"
      sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF
      datasource_list: [ Azure ]
      datasource:
          Azure:
              apply_network_config: False
      EOF
      
    4. Se configurado, remova o arquivo de swap existente:

      if [[ -f /mnt/resource/swapfile ]]; then
      echo "Removing swapfile" #RHEL uses a swapfile by default
      swapoff /mnt/resource/swapfile
      rm /mnt/resource/swapfile -f
      fi
      
    5. Configurar o registro em log cloud-init:

      sudo echo "Add console log file"
      sudo tee <<EOF /etc/cloud/cloud.cfg.d/05_logging.cfg > /dev/null
      
      # This tells cloud-init to redirect its stdout and stderr to
      # 'tee -a /var/log/cloud-init-output.log' so the user can see output
      # there without needing to look on the console.
      output: {all: '| tee -a /var/log/cloud-init-output.log'}
      EOF
      
  13. Configuração de troca:

    • Não crie o espaço de troca no disco do sistema operacional.

      Anteriormente, o Agente Linux do Azure era usado para configurar automaticamente o espaço de troca usando o disco de recurso local que é anexado à VM após o provisionamento da mesma no Azure. Essa ação agora é tratada por cloud-init. Você não pode usar o agente do Linux para formatar o disco de recurso para criar o arquivo de troca. Modifique os seguintes parâmetros adequadamente no /etc/waagent.conf:

      ResourceDisk.Format=n
      ResourceDisk.EnableSwap=n
      
    • Se deseja montar, formatar e criar a troca, você pode:

      • Passar esse código como uma configuração cloud-init sempre que você criar uma VM por meio de dados personalizados. Este método é recomendável.

      • Usar uma diretiva cloud-init inclusa na imagem que execute essa etapa sempre que a VM for criada.

        sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
        sudo tee /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF    
        #cloud-config
        # Generated by Azure cloud image build
        disk_setup:
          ephemeral0:
            table_type: mbr
            layout: [66, [33, 82]]
            overwrite: True
        fs_setup:
          - device: ephemeral0.1
            filesystem: ext4
          - device: ephemeral0.2
            filesystem: swap
        mounts:
          - ["ephemeral0.1", "/mnt/resource"]
          - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
        EOF
        
  14. Configure a telemetria cloud-init para ajudar na solução de problemas de provisionamento:

    sudo tee >> /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg << EOF
    # This config enables cloud-init to report provisioning telemetry to aid with troubleshooting
    Reporting:
      logging:
        type: log
      telemetry:
        type: hyperv
    EOF
    
  15. Se você quiser cancelar o registro da assinatura, execute o seguinte comando:

    
    sudo subscription-manager unregister
    
  16. Desprovisione a VM e prepare-a para provisionamento no Azure:

    Cuidado

    Se estiver migrando uma VM específica e não quiser criar uma imagem generalizada, ignore a etapa de desprovisionamento. A execução do comando waagent -force -deprovision+user torna o computador de origem inutilizável. Essa etapa se destina apenas a criar uma imagem generalizada.

    sudo rm -f /var/log/waagent.log
    sudo cloud-init clean --logs --seed
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  17. Selecione Ação>Desligar no Gerenciador do Hyper-V. Agora, o VHD do Linux está pronto para ser carregado no Azure.