Compartir a través de


Preparación de una máquina virtual basada en Red Hat para Azure

Se aplica a: ✔️ Máquinas virtuales Linux ✔️ Conjuntos de escalado flexibles ✔️ Conjuntos de escalado uniformes

En este artículo, obtendrá información sobre cómo preparar una máquina virtual (VM) de Red Hat Enterprise Linux (RHEL) para usarla en Azure. Las versiones de RHEL que se tratan en este artículo son 7.X, 8.X y 9.X. Los hipervisores para la preparación que se tratan en este artículo son Hyper-V, la máquina virtual basada en el kernel (KVM), VMware y Kickstart.

Para obtener más información sobre los requisitos de elegibilidad para poder participar en el programa de acceso a la nube de Red Hat, visite el sitio web de Red Hat Cloud Access y Ejecución de RHEL en Azure. Para ver cómo automatizar la creación de imágenes de RHEL, consulte Azure Image Builder.

Nota:

Tenga en cuenta las versiones que están en la finalización del servicio (EOL) y que ya no son compatibles con Red Hat. Las imágenes cargadas que estén en la EOL o la hayan superado, recibirán soporte con un esfuerzo empresarial razonable. Para obtener más información, consulte Ciclos de vida del producto de Red Hat.

Requisitos previos

En esta sección, se supone que ya obtuvo un archivo ISO en el sitio web de Red Hat y que ha instalado la imagen RHEL en un disco duro virtual (VHD). Para obtener más información sobre cómo usar el Administrador de Hyper-V para instalar una imagen de sistema operativo, consulte Instalación del rol de Hyper-V y configuración de una máquina virtual.

Notas de instalación de RHEL

  • Azure no admite el formato VHDX. Azure solo admite VHD fijo. Puede usar el Administrador de Hyper-V para convertir el disco al formato VHD o puede usar el cmdlet convert-vhd. Si usa VirtualBox, seleccione Tamaño fijo a diferencia de la opción predeterminada asignada dinámicamente al crear el disco.
  • Azure admite máquinas virtuales de Gen1 (arranque BIOS) y Gen2 (arranque UEFI).
  • El tamaño máximo permitido para los discos duros virtuales es de 1023 GB.
  • El módulo de kernel vfat debe estar habilitado en el kernel.
  • El Administrador de volúmenes lógicos (LVM) se admite y puede usarse en el disco del sistema operativo o en discos de datos en máquinas virtuales de Azure. En general, se recomienda usar las particiones estándar en el disco del sistema operativo en lugar de LVM. Esta práctica evita los conflictos de nombres LVM con máquinas virtuales clonadas, especialmente si alguna vez necesita conectar un disco de sistema operativo a otra máquina virtual idéntica para solucionar el problema. Para obtener más información, consulte la documentación de LVM y RAID.
  • Se requiere la compatibilidad de kernel para el montaje de sistemas de archivos de formato de disco universal (UDF) . En el primer arranque en Azure, los medios con formato UDF conectados al invitado pasan la configuración de aprovisionamiento a la máquina virtual Linux. El agente Linux de Azure debe poder montar el sistema de archivos UDF para leer su configuración y aprovisionar la máquina virtual. Sin este paso, se produce un error en el aprovisionamiento.
  • No configure una partición de intercambio en el disco del sistema operativo. Para obtener más información, lea los pasos siguientes.
  • En Azure, todos los discos duros virtuales deben tener un tamaño virtual alineado con 1 MB. Al convertir de un disco sin formato a VHD, debe asegurarse de que el tamaño del disco sin procesar sea un múltiplo de 1 MB antes de la conversión. Para obtener más información, lea los pasos siguientes. Consulte también las Notas de instalación de Linux.

Nota:

Cloud-init >= 21.2 quita el requisito de UDF. Sin embargo, sin el módulo habilitado de UDF, el CD-ROM no se montará durante el aprovisionamiento, lo que impide que se apliquen los datos personalizados. Una solución alternativa consiste en aplicar datos personalizados mediante datos de usuario. A diferencia de los datos personalizados, los datos de usuario no se cifran. Para obtener más información, consulte Formatos de datos de usuario.

  1. En el Administrador de Hyper-V, seleccione la máquina virtual.

  2. Seleccione Conectar para abrir una ventana de consola de la máquina virtual.

  3. Cree o edite el archivo /etc/sysconfig/network y agregue el siguiente texto:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. Cree o edite el archivo /etc/sysconfig/network-scripts/ifcfg-eth0 y agregue el siguiente texto:

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

    Nota:

    Cuando se usan redes aceleradas, la interfaz sintética que se crea debe configurarse para no estar administrada mediante una regla Udev. Esta acción impide que NetworkManager asigne la misma dirección IP que la interfaz principal.

    Para aplicarlo:

    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. Asegúrese de que el servicio de red se inicia en tiempo de arranque:

    sudo systemctl enable network
    
  6. Registre la suscripción de Red Hat para habilitar la instalación de paquetes desde el repositorio de RHEL:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  7. Modifique la línea de arranque de kernel de su configuración grub para que incluya más parámetros de kernel para Azure. Para realizar esta modificación, abra /etc/default/grub en un editor de texto y edite el parámetro GRUB_CMDLINE_LINUX. Por ejemplo:

    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
    

    Nota:

    Si ENABLE_BLSCFG=false está presente en /etc/default/grub en lugar de ENABLE_BLSCFG=true, las herramientas como, por ejemplo, grubedit o gubby, que dependen de la especificación del cargador de arranque (BLS) para administrar las entradas y configuraciones de arranque, puede que no funcionen correctamente en RHEL 8 y 9. Si ENABLE_BLSCFG no está presente, el comportamiento predeterminado es false.

    Esta modificación también garantiza que todos los mensajes de la consola se envíen al primer puerto serie y se permita la interacción con la consola serie, lo que puede ayudar al Soporte técnico de Azure con los problemas de depuración. Esta configuración también desactiva las nuevas convenciones de nomenclatura para tarjetas de interfaz de red (NIC).

    rhgb quiet crashkernel=auto
    

    Los arranques gráfico y silencioso no resultan útiles en un entorno en la nube en el que queremos que todos los registros se envíen al puerto serie. Puede dejar la opción crashkernel configurada si lo desea. Este parámetro reduce la cantidad de memoria disponible en la máquina virtual en 128 MB o más, lo que podría ser un problema para tamaños de máquina virtual más pequeños.

  8. Una vez que termine de editar /etc/default/grub, ejecute el comando siguiente para recompilar la configuración de grub:

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

    Nota:

    Si va a cargar una máquina virtual habilitada para UEFI, el comando para actualizar grub es grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg.

  9. Asegúrese de que el servidor SSH se haya instalado y configurado para iniciarse en el tiempo de arranque, que suele ser el predeterminado. Modifique /etc/ssh/sshd_config para que incluya la siguiente línea:

    ClientAliveInterval 180
    
  10. El paquete WALinuxAgent WALinuxAgent-<version> se ha insertado en el repositorio de extras de Red Hat. Habilite el repositorio de extras:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  11. Instale el agente de Linux de Azure, cloud-init, y otras utilidades necesarias:

    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 controlar el aprovisionamiento:

    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
      

      Nota:

      Si va a migrar una máquina virtual específica y no desea crear una imagen generalizada, establezca Provisioning.Agent=disabled en la configuración /etc/waagent.conf.

    2. Configure montajes:

      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 el origen de datos de 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. Si está configurado, quite el archivo de intercambio 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. Configure el registro 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. Configuración de intercambio:

    • No cree un espacio de intercambio en el disco del sistema operativo.

      Anteriormente, el agente de Linux de Azure se usaba para configurar automáticamente el espacio de intercambio mediante el disco de recursos local que está conectado a la máquina virtual después de que la máquina virtual se aprovisione en Azure. Esta acción ahora se controla mediante cloud-init. No debe usar el agente de Linux para dar formato al disco de recursos para crear el archivo de intercambio. Modifique los parámetros siguientes de /etc/waagent.conf de manera adecuada:

      ResourceDisk.Format=n
      ResourceDisk.EnableSwap=n
      
    • Si quiere montar, formatear y crear un intercambio, puede hacer lo siguiente:

      • Pase este código como una configuración cloud-init cada vez que cree una máquina virtual a través de datos personalizados. Se recomienda este método.

      • Use una directiva cloud-init incorporada en la imagen que realiza este paso cada vez que se crea la máquina virtual.

        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 la telemetría de cloud-init para ayudar a solucionar problemas de aprovisionamiento:

    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. Si quiere anular el registro de la suscripción, ejecute el siguiente comando:

    
    sudo subscription-manager unregister
    
  16. Desaprovisione la máquina virtual y prepárela para el aprovisionamiento en Azure:

    Precaución

    Si va a migrar una máquina virtual específica y no desea crear una imagen generalizada, omita el paso de desaprovisionamiento. La ejecución del comando waagent -force -deprovision+user hace que la máquina de origen no se pueda usar. Este paso solo está pensado para crear una imagen 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. Seleccione Acción >Apagar en el Administrador de Hyper-V. El VHD de Linux ya está listo para cargarse en Azure.