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 6.X, 7.X y 8.X. Los hipervisores de preparación que se tratan en este artículo son máquinas virtuales de Hyper-V basadas en kernel (KVM) y VMware.
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.
Administrador de Hyper-V
En esta sección se muestra cómo preparar una máquina virtual RHEL 6, RHEL 7 o RHEL 8 mediante el administrador de Hyper-V.
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.
Uso del administrador de Hyper-V en RHEL 6
Importante
El 30 de noviembre de 2020, RHEL 6 alcanzó el final de la fase de mantenimiento. La fase de mantenimiento va seguida de la fase de duración ampliada. A medida que RHEL 6 realiza la transición de las fases de mantenimiento/completo, se recomienda encarecidamente actualizar a RHEL 7, 8 o 9. Si debe permanecer en RHEL 6, se recomienda agregar el complemento de soporte técnico de ciclo de vida extendido de RHEL.
En el Administrador de Hyper-V, seleccione la máquina virtual.
Seleccione Conectar para abrir una ventana de consola de la máquina virtual.
En RHEL 6,
NetworkManager
puede interferir con el agente de Linux de Azure. Desinstalar este paquete:sudo rpm -e --nodeps NetworkManager
Cree o edite el archivo
/etc/sysconfig/network
y agregue el siguiente texto:NETWORKING=yes HOSTNAME=localhost.localdomain
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
Mueva (o elimine) las reglas udev para impedir que se generen reglas estáticas para la interfaz Ethernet. Estas reglas causan problemas cuando clona una máquina virtual en Azure o Hyper-V:
Advertencia
Muchos tamaños de máquina virtual "v5" y más recientes requieren redes aceleradas. Si no está habilitado, NetworkManager asignará la misma dirección IP a todas las interfaces de función virtual. Para evitar direcciones IP duplicadas, asegúrese de incluir esta regla udev al migrar a un tamaño más reciente.
sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
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 cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules # Accelerated Networking on Azure exposes a new SRIOV interface to the VM. # This interface is transparentlybonded to the synthetic interface, # so NetworkManager should just ignore any SRIOV interfaces. SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1" EOF
Asegúrese de que el servicio de red se inicia en tiempo de arranque:
sudo chkconfig network on
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
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-6-server-extras-rpms
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
/boot/grub/menu.lst
en un editor de texto. Asegúrese de que el kernel predeterminado incluya los parámetros siguientes:console=ttyS0 earlyprintk=ttyS0
Esta acción también garantiza que todos los mensajes de la consola se envíen al primer puerto serie, lo que puede ayudar al Soporte técnico de Azure con los problemas de depuración.
También se recomienda quitar los parámetros siguientes:
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. Esta configuración podría ser un problema para tamaños de máquina virtual más pequeños.Asegúrese de que el servidor Secure Shell (SSH) está 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
Instale el agente de Linux de Azure:
sudo yum install WALinuxAgent sudo chkconfig waagent on
Al instalar el paquete WALinuxAgent, se quitan los paquetes
NetworkManager
yNetworkManager-gnome
si aún no se han quitado en el paso 3.No cree un espacio de intercambio en el disco del sistema operativo.
El agente de Linux de Azure puede configurar automáticamente el espacio de intercambio mediante el disco de recursos local que está conectado a la máquina virtual después de aprovisionar la máquina virtual en Azure. El disco de recursos local es un disco temporal que podría vaciarse si la máquina virtual se desaprovisiona. Después de instalar el agente de Linux de Azure en el paso anterior, modifique apropiadamente los parámetros siguientes en
/etc/waagent.conf
:ResourceDisk.Format=y ResourceDisk.Filesystem=ext4 ResourceDisk.MountPoint=/mnt/resource ResourceDisk.EnableSwap=y ResourceDisk.SwapSizeMB=2048 ## NOTE: set this to whatever you need it to be.
Anule el registro de la suscripción (si es necesario):
sudo subscription-manager unregister
Desaprovisione la máquina virtual y prepárela para el aprovisionamiento en Azure:
Nota:
Si va a migrar una máquina virtual específica y no desea crear una imagen generalizada, omita el paso de desaprovisionamiento.
sudo waagent -force -deprovision sudo export HISTSIZE=0
Seleccione Acción >Apagar en el Administrador de Hyper-V. El VHD de Linux ya está listo para cargarse en Azure.
Uso del administrador de Hyper-V en RHEL 7
En el Administrador de Hyper-V, seleccione la máquina virtual.
Seleccione Conectar para abrir una ventana de consola de la máquina virtual.
Cree o edite el archivo
/etc/sysconfig/network
y agregue el siguiente texto:NETWORKING=yes HOSTNAME=localhost.localdomain
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 cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules # Accelerated Networking on Azure exposes a new SRIOV interface to the VM. # This interface is transparentlybonded to the synthetic interface, # so NetworkManager should just ignore any SRIOV interfaces. SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1" EOF
Asegúrese de que el servicio de red se inicia en tiempo de arranque:
sudo systemctl enable network
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
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ámetroGRUB_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 deENABLE_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. SiENABLE_BLSCFG
no está presente, el comportamiento predeterminado esfalse
.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 de RHEL 7 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.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
.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
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
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
Configure
cloud-init
para controlar el aprovisionamiento:Configure
waagent
paracloud-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
.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
Configure el origen de datos de Azure:
sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS" sudo cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF datasource_list: [ Azure ] datasource: Azure: apply_network_config: False EOF
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
Configure el registro
cloud-init
:sudo echo "Add console log file" sudo cat >> /etc/cloud/cloud.cfg.d/05_logging.cfg <<EOF # 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
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 cat > /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
Si quiere anular el registro de la suscripción, ejecute el siguiente comando:
sudo subscription-manager unregister
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 sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history sudo export HISTSIZE=0
Seleccione Acción >Apagar en el Administrador de Hyper-V. El VHD de Linux ya está listo para cargarse en Azure.
RHEL 8+ con el Administrador de Hyper-V
En el Administrador de Hyper-V, seleccione la máquina virtual.
Seleccione Conectar para abrir una ventana de consola de la máquina virtual.
Asegúrese de que el servicio de administrador de red se inicie en tiempo de arranque:
sudo systemctl enable NetworkManager.service
Configure la interfaz de red para que se inicie automáticamente en el arranque y use el Protocolo de configuración dinámica de host:
sudo nmcli con mod eth0 connection.autoconnect yes ipv4.method auto
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 cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules # Accelerated Networking on Azure exposes a new SRIOV interface to the VM. # This interface is transparentlybonded to the synthetic interface, # so NetworkManager should just ignore any SRIOV interfaces. SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1" EOF
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
Modifique la línea de arranque del kernel de su configuración de grub para que incluya parámetros del kernel adicionales para Azure y habilite la consola serie.
Quitar los parámetros actuales de GRUB:
sudo grub2-editenv - unset kernelopts
Edite
/etc/default/grub
en un editor de texto y agregue los parámetros siguientes:GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 earlyprintk=ttyS0 net.ifnames=0" GRUB_TERMINAL_OUTPUT="serial console" GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
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 NIC.
También se recomienda quitar los parámetros siguientes:
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.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
Para una máquina virtual habilitada para UEFI, ejecute el siguiente comando:
sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
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
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
Configure
cloud-init
para controlar el aprovisionamiento:Configure
waagent
paracloud-init
:sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/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
.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
Configure el origen de datos de Azure:
sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS" sudo cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF datasource_list: [ Azure ] datasource: Azure: apply_network_config: False EOF
Si está configurado, quite el archivo de intercambio existente:
if [[ -f /mnt/resource/swapfile ]]; then echo "Removing swapfile" #RHEL uses a swapfile by defaul swapoff /mnt/resource/swapfile rm /mnt/resource/swapfile -f fi
Configure el registro
cloud-init
:sudo echo "Add console log file" sudo cat >> /etc/cloud/cloud.cfg.d/05_logging.cfg <<EOF # 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
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
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 cat > /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.device-timeout=2,x-systemd.requires=cloud-init.service", "0", "0"] EOF
Si quiere anular el registro de la suscripción, ejecute el siguiente comando:
sudo subscription-manager unregister
Ejecute los comandos siguientes para desaprovisionar la máquina virtual y prepararla para el aprovisionamiento en Azure:
sudo cloud-init clean sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history sudo sudo rm -f /var/log/waagent.log sudo export HISTSIZE=0
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.Seleccione Acción >Apagar en el Administrador de Hyper-V. El VHD de Linux ya está listo para cargarse en Azure.
KVM
En esta sección se muestra cómo usar KVM para preparar una distribución de RHEL 6 o RHEL 7 para cargar en Azure.
Uso de KVM en RHEL 6
Importante
El 30 de noviembre de 2020, RHEL 6 alcanzó el final de la fase de mantenimiento. La fase de mantenimiento va seguida de la fase de duración ampliada. A medida que RHEL 6 realiza la transición de las fases de mantenimiento/completo, se recomienda encarecidamente actualizar a RHEL 7, 8 o 9. Si debe permanecer en RHEL 6, se recomienda agregar el complemento de soporte técnico de ciclo de vida extendido de RHEL.
Descargue la imagen KVM de RHEL 6 desde el sitio web de Red Hat.
Establezca una contraseña raíz.
Genere una contraseña cifrada y copie el resultado del comando:
sudo openssl passwd -1 changeme
Establezca una contraseña raíz con guestfish:
sudo guestfish --rw -a <image-name> > <fs> run > <fs> list-filesystems > <fs> mount /dev/sda1 / > <fs> vi /etc/shadow > <fs> exit
Cambie el segundo campo del usuario raíz de
!!
a la contraseña cifrada.Cree una máquina virtual en KVM a partir de la imagen qcow2. Establezca el tipo de disco en qcow2 y el modelo de dispositivo de interfaz de red virtual en virtio. Después, inicie la máquina virtual e inicie sesión como raíz.
Cree o edite el archivo
/etc/sysconfig/network
y agregue el siguiente texto:NETWORKING=yes HOSTNAME=localhost.localdomain
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
Mueva (o elimine) las reglas udev para impedir que se generen reglas estáticas para la interfaz Ethernet. Estas reglas causan problemas cuando clona una máquina virtual en Azure o Hyper-V:
sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
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 cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules # 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
Asegúrese de que el servicio de red se inicia en tiempo de arranque:
sudo chkconfig network on
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
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 configuración, abra
/boot/grub/menu.lst
en un editor de texto. Asegúrese de que el kernel predeterminado incluya los parámetros siguientes:console=ttyS0 earlyprintk=ttyS0
Este paso también garantiza que todos los mensajes de la consola se envíen al primer puerto serie, lo que puede ayudar al Soporte técnico de Azure con los problemas de depuración.
También se recomienda quitar los parámetros siguientes:
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.Agregue módulos de Hyper-V a initramfs:
Edite
/etc/dracut.conf
y agregue el siguiente contenido:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
Recompile initramfs:
sudo dracut -f -v
Desinstalar
cloud-init
:sudo yum remove cloud-init
Asegúrese de que el servidor SSH esté instalado y configurado para iniciarse en el tiempo de arranque:
sudo chkconfig sshd on
Modifique
/etc/ssh/sshd_config
para que incluya las siguientes líneas:PasswordAuthentication yes ClientAliveInterval 180
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-6-server-extras-rpms
Instale el agente de Linux de Azure:
sudo yum install WALinuxAgent sudo chkconfig waagent on
El agente de Linux de Azure puede configurar automáticamente el espacio de intercambio mediante el disco de recursos local que está conectado a la máquina virtual después de aprovisionar la máquina virtual en Azure. El disco de recursos local es un disco temporal que podría vaciarse si la máquina virtual se desaprovisiona. Después de instalar el agente de Linux de Azure en el paso anterior, modifique apropiadamente los parámetros siguientes en
/etc/waagent.conf
:ResourceDisk.Format=y ResourceDisk.Filesystem=ext4 ResourceDisk.MountPoint=/mnt/resource ResourceDisk.EnableSwap=y ResourceDisk.SwapSizeMB=2048 ## NOTE: set this to whatever you need it to be.
Anule el registro de la suscripción (si es necesario):
sudo subscription-manager unregister
Ejecute los siguientes comandos para desaprovisionar la máquina virtual y prepararla para el aprovisionamiento en Azure.
Nota:
Si va a migrar una máquina virtual específica y no desea crear una imagen generalizada, omita el paso de desaprovisionamiento.
sudo rm -rf /var/lib/waagent/ sudo rm -f /var/log/waagent.log sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history sudo export HISTSIZE=0
Apague la máquina virtual en KVM.
Convierta la imagen qcow2 al formato VHD.
Nota:
Hay un problema conocido en versiones de >=2.2.1 de qemu-img que da como resultado un VHD con formato incorrecto. El problema se corrigió en QEMU 2.6. Recomendamos que use qemu-img 2.2.0 o anterior, o bien actualizar a la versión 2.6 o posterior. Para más información, consulte este sitio web.
Primero convierta la imagen al formato raw:
sudo qemu-img convert -f qcow2 -O raw rhel-6.9.qcow2 rhel-6.9.raw
Asegúrese de que el tamaño de la imagen sin procesar está alineado con 1 MB. De lo contrario, redondee hacia arriba el tamaño para alinear con 1 MB:
MB=$((1024*1024)) size=$(qemu-img info -f raw --output json "rhel-6.9.raw" | \ gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}') rounded_size=$((($size/$MB + 1)*$MB)) sudo qemu-img resize rhel-6.9.raw $rounded_size
Convierta el disco sin procesar en un disco duro virtual (VHD) de tamaño fijo:
sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-6.9.raw rhel-6.9.vhd
O bien, con la versión de qemu 2.6 o posterior, incluya la opción
force_size
:sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-6.9.raw rhel-6.9.vhd
RHEL 7 mediante KVM
Descargue la imagen KVM de RHEL 7 desde el sitio web de Red Hat. Este procedimiento utiliza RHEL 7 como ejemplo.
Establezca una contraseña raíz.
Genere una contraseña cifrada y copie el resultado del comando:
sudo openssl passwd -1 changeme
Establezca una contraseña raíz con guestfish:
sudo guestfish --rw -a <image-name> > <fs> run > <fs> list-filesystems > <fs> mount /dev/sda1 / > <fs> vi /etc/shadow > <fs> exit
Cambie el segundo campo del usuario raíz de
!!
a la contraseña cifrada.Cree una máquina virtual en KVM a partir de la imagen qcow2. Establezca el tipo de disco en qcow2 y el modelo de dispositivo de interfaz de red virtual en virtio. Después, inicie la máquina virtual e inicie sesión como raíz.
Cree o edite el archivo
/etc/sysconfig/network
y agregue el siguiente texto:NETWORKING=yes HOSTNAME=localhost.localdomain
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 cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules # Accelerated Networking on Azure exposes a new SRIOV interface to the VM. # This interface is transparentlybonded to the synthetic interface, # so NetworkManager should just ignore any SRIOV interfaces. SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1" EOF
Asegúrese de que el servicio de red se inicia en tiempo de arranque:
sudo systemctl enable network
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
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 configuración, abra
/etc/default/grub
en un editor de texto y edite el parámetroGRUB_CMDLINE_LINUX
. Por ejemplo:GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
Este comando también asegura que todos los mensajes de la consola se envían al primer puerto serie, lo que puede ayudar al soporte técnico de Azure con los problemas de depuración de errores. El comando también desactiva las nuevas convenciones de nomenclatura de RHEL 7 para NIC. También se recomienda quitar los parámetros siguientes:
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.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
Agregue módulos de Hyper-V a initramfs.
Edite
/etc/dracut.conf
y agregue contenido:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
Recompile initramfs:
sudo dracut -f -v
Desinstalar
cloud-init
:sudo yum remove cloud-init
Asegúrese de que el servidor SSH esté instalado y configurado para iniciarse en el tiempo de arranque:
sudo systemctl enable sshd
Modifique
/etc/ssh/sshd_config
para que incluya las siguientes líneas:PasswordAuthentication yes ClientAliveInterval 180
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
Instale el agente de Linux de Azure:
sudo yum install WALinuxAgent
Habilitar el servicio
waagent
:sudo systemctl enable waagent.service
Instalar
cloud-init
.Siga los pasos descritos en "Preparación de una máquina virtual de RHEL 7 desde el Administrador de Hyper-V", paso 12, "Instalar
cloud-init
para controlar el aprovisionamiento".Configuración de intercambio:
- No cree un espacio de intercambio en el disco del sistema operativo.
- Siga los pasos descritos en "Preparar una máquina virtual RHEL 7 desde el Administrador de Hyper-V", paso 13, "Configuración de intercambio".
Anule el registro de la suscripción (si es necesario):
sudo subscription-manager unregister
Desaprovisione siguiendo los pasos descritos en "Preparación de una máquina virtual de RHEL 7 desde el Administrador de Hyper-V", paso 15, "Desaprovisionamiento".
Apague la máquina virtual en KVM.
Convierta la imagen qcow2 al formato VHD.
Nota:
Hay un problema conocido en versiones de qemu-img >=1.1.1 que da como resultado un VHD con formato incorrecto. El problema se corrigió en QEMU 1.6. Recomendamos que use qemu-img 1.1.0 o anterior, o bien actualizar a la versión 1.6 o posterior. Para más información, consulte este sitio web.
Primero convierta la imagen al formato raw:
sudo qemu-img convert -f qcow2 -O raw rhel-7.4.qcow2 rhel-7.4.raw
Asegúrese de que el tamaño de la imagen sin procesar está alineado con 1 MB. De lo contrario, redondee hacia arriba el tamaño para alinear con 1 MB:
MB=$((1024*1024)) size=$(qemu-img info -f raw --output json "rhel-7.4.raw" | \ gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}') rounded_size=$((($size/$MB + 1)*$MB)) sudo qemu-img resize rhel-7.4.raw $rounded_size
Convierta el disco sin procesar en un disco duro virtual (VHD) de tamaño fijo:
sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-7.4.raw rhel-7.4.vhd
O bien, con la versión de qemu 1.6 o posterior, incluya la opción
force_size
:sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.4.raw rhel-7.4.vhd
VMware
En esta sección se muestra cómo preparar una distribución de RHEL 6 o RHEL 7 desde VMware.
Requisitos previos
En esta sección se supone que ya instaló una máquina virtual de RHEL en VMware. Para obtener más información acerca de cómo instalar un sistema operativo en VMware, consulte Guía de instalación de sistema operativo invitado de VMware.
- Al instalar el sistema Linux se recomienda usar las particiones estándar en lugar de un LVM, que a menudo viene de forma predeterminada en muchas instalaciones. El uso de particiones impide que el nombre del LVM entre en conflicto con las máquinas virtuales clonadas, especialmente si en algún momento hace falta adjuntar un disco de sistema operativo a otra máquina virtual para solucionar problemas. Para los discos de datos se puede utilizar LVM o RAID si así se desea.
- No configure una partición de intercambio en el disco del sistema operativo. Es posible configurar el agente de Linux para crear un archivo de intercambio en el disco de recursos temporal. Para obtener más información, lea los pasos siguientes.
- Al crear el VHD, seleccione Almacenar disco virtual como un único archivo.
Uso de VMware en RHEL 6
Importante
El 30 de noviembre de 2020, RHEL 6 alcanzó el final de la fase de mantenimiento. La fase de mantenimiento va seguida de la fase de duración ampliada. A medida que RHEL 6 realiza la transición de las fases de mantenimiento/completo, se recomienda encarecidamente actualizar a RHEL 7, 8 o 9. Si debe permanecer en RHEL 6, se recomienda agregar el complemento de soporte técnico de ciclo de vida extendido de RHEL.
En RHEL 6,
NetworkManager
puede interferir con el agente de Linux de Azure. Desinstalar este paquete:sudo rpm -e --nodeps NetworkManager
Cree un archivo llamado network in the
/etc/sysconfig/
que contenga el texto siguiente:NETWORKING=yes HOSTNAME=localhost.localdomain
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
Mueva (o elimine) las reglas udev para impedir que se generen reglas estáticas para la interfaz Ethernet. Estas reglas causan problemas cuando clona una máquina virtual en Azure o Hyper-V:
sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
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 cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules # 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
Asegúrese de que el servicio de red se inicia en tiempo de arranque:
sudo chkconfig network on
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
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-6-server-extras-rpms
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 este paso, abra
/etc/default/grub
en un editor de texto y edite el parámetroGRUB_CMDLINE_LINUX
. Por ejemplo:GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0"
Este paso también garantiza que todos los mensajes de la consola se envíen al primer puerto serie, lo que puede ayudar al Soporte técnico de Azure con los problemas de depuración. También se recomienda quitar los parámetros siguientes:
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.Agregue módulos de Hyper-V a initramfs:
Edite
/etc/dracut.conf
y agregue el siguiente contenido:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
Recompile initramfs:
sudo dracut -f -v
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
Instale el agente de Linux de Azure:
sudo yum install WALinuxAgent sudo chkconfig waagent on
No cree un espacio de intercambio en el disco del sistema operativo.
El agente de Linux de Azure puede configurar automáticamente el espacio de intercambio mediante el disco de recursos local que está conectado a la máquina virtual después de aprovisionar la máquina virtual en Azure. El disco de recursos local es un disco temporal que podría vaciarse si la máquina virtual se desaprovisiona. Después de instalar el agente de Linux de Azure en el paso anterior, modifique apropiadamente los parámetros siguientes en
/etc/waagent.conf
:ResourceDisk.Format=y ResourceDisk.Filesystem=ext4 ResourceDisk.MountPoint=/mnt/resource ResourceDisk.EnableSwap=y ResourceDisk.SwapSizeMB=2048 ## NOTE: set this to whatever you need it to be.
Anule el registro de la suscripción (si es necesario):
sudo subscription-manager unregister
Ejecute los comandos siguientes para desaprovisionar la máquina virtual y prepararla para el aprovisionamiento en Azure:
Nota:
Si va a migrar una máquina virtual específica y no desea crear una imagen generalizada, omita el paso de desaprovisionamiento.
sudo rm -rf /var/lib/waagent/ sudo rm -f /var/log/waagent.log sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history sudo export HISTSIZE=0
Apague la máquina virtual y convierta el archivo VMDK en un archivo .vdh.
Nota:
Hay un problema conocido en versiones de >=2.2.1 de qemu-img que da como resultado un VHD con formato incorrecto. El problema se corrigió en QEMU 2.6. Recomendamos que use qemu-img 2.2.0 o anterior, o bien actualizar a la versión 2.6 o posterior. Para más información, consulte este sitio web.
Primero convierta la imagen al formato raw:
sudo qemu-img convert -f vmdk -O raw rhel-6.9.vmdk rhel-6.9.raw
Asegúrese de que el tamaño de la imagen sin procesar está alineado con 1 MB. De lo contrario, redondee hacia arriba el tamaño para alinear con 1 MB:
MB=$((1024*1024)) size=$(qemu-img info -f raw --output json "rhel-6.9.raw" | \ gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}') rounded_size=$((($size/$MB + 1)*$MB)) sudo qemu-img resize rhel-6.9.raw $rounded_size
Convierta el disco sin procesar en un disco duro virtual (VHD) de tamaño fijo:
sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-6.9.raw rhel-6.9.vhd
O bien, con la versión de qemu 2.6 o posterior, incluya la opción
force_size
:sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-6.9.raw rhel-6.9.vhd
Uso de VMware en RHEL 7
Cree o edite el archivo
/etc/sysconfig/network
y agregue el siguiente texto:NETWORKING=yes HOSTNAME=localhost.localdomain
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 cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules # Accelerated Networking on Azure exposes a new SRIOV interface to the VM. # This interface is transparentlybonded to the synthetic interface, # so NetworkManager should just ignore any SRIOV interfaces. SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1" EOF
Asegúrese de que el servicio de red se inicia en tiempo de arranque:
sudo systemctl enable network
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
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ámetroGRUB_CMDLINE_LINUX
. Por ejemplo:GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
Esta configuración también asegura que todos los mensajes de la consola se envían al primer puerto serie, lo que puede ayudar al soporte técnico de Azure con los problemas de depuración de errores. Esto también desactiva las nuevas convenciones de nomenclatura de RHEL 7 para NIC. Además, se recomienda quitar los parámetros siguientes:
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.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
Agregue módulos de Hyper-V a initramfs:
Edite
/etc/dracut.conf
y agregue contenido:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
Recompile initramfs:
sudo dracut -f -v
Asegúrese de que el servidor SSH se haya instalado y configurado para iniciarse en el tiempo de arranque. Esta configuración es normalmente el valor predeterminado. Modifique
/etc/ssh/sshd_config
para que incluya la siguiente línea:ClientAliveInterval 180
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
Instale el agente de Linux de Azure:
sudo yum install WALinuxAgent sudo systemctl enable waagent.service
Instale
cloud-init
:Siga los pasos descritos en "Preparación de una máquina virtual de RHEL 7 desde el Administrador de Hyper-V", paso 12, "Instalar
cloud-init
para controlar el aprovisionamiento".Configuración de intercambio:
- No cree un espacio de intercambio en el disco del sistema operativo.
- Siga los pasos descritos en "Preparar una máquina virtual RHEL 7 desde el Administrador de Hyper-V", paso 13, "Configuración de intercambio".
Si quiere anular el registro de la suscripción, ejecute el siguiente comando:
sudo subscription-manager unregister
Desaprovisione siguiendo los pasos descritos en "Preparación de una máquina virtual de RHEL 7 desde el Administrador de Hyper-V", paso 15, "Desaprovisionamiento".
Apague la máquina virtual y convierta el archivo VMDK al formato VHD.
Nota:
Hay un problema conocido en versiones de >=2.2.1 de qemu-img que da como resultado un VHD con formato incorrecto. El problema se corrigió en QEMU 2.6. Recomendamos que use qemu-img 2.2.0 o anterior, o bien actualizar a la versión 2.6 o posterior. Para más información, consulte este sitio web.
Primero convierta la imagen al formato raw:
sudo qemu-img convert -f vmdk -O raw rhel-7.4.vmdk rhel-7.4.raw
Asegúrese de que el tamaño de la imagen sin procesar está alineado con 1 MB. De lo contrario, redondee hacia arriba el tamaño para alinear con 1 MB:
MB=$((1024*1024)) size=$(qemu-img info -f raw --output json "rhel-7.4.raw" | \ gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}') rounded_size=$((($size/$MB + 1)*$MB)) sudo qemu-img resize rhel-7.4.raw $rounded_size
Convierta el disco sin procesar en un disco duro virtual (VHD) de tamaño fijo:
sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-7.4.raw rhel-7.4.vhd
O bien, con la versión de qemu 2.6 o posterior, incluya la opción
force_size
:sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.4.raw rhel-7.4.vhd
Archivo kickstart
En esta sección se muestra cómo preparar una distribución de RHEL 7 a partir de una imagen ISO mediante un archivo kickstart.
RHEL 7 desde un archivo kickstart
Cree un archivo kickstart que incluye el contenido siguiente y guarde el archivo. Para obtener información sobre la instalación Kickstart, consulte la Guía de instalación Kickstart.
# Kickstart for provisioning a RHEL 7 Azure VM # System authorization information auth --enableshadow --passalgo=sha512 # Use graphical install text # Don't run the Setup Agent on first boot firstboot --disable # Keyboard layouts keyboard --vckeymap=us --xlayouts='us' # System language lang en_US.UTF-8 # Network information network --bootproto=dhcp # Root password rootpw --plaintext "to_be_disabled" # System services services --enabled="sshd,waagent,NetworkManager" # System timezone timezone Etc/UTC --isUtc --ntpservers 0.rhel.pool.ntp.org,1.rhel.pool.ntp.org,2.rhel.pool.ntp.org,3.rhel.pool.ntp.org # Partition clearing information clearpart --all --initlabel # Clear the MBR zerombr # Disk partitioning information part /boot --fstype="xfs" --size=500 part / --fstyp="xfs" --size=1 --grow --asprimary # System bootloader configuration bootloader --location=mbr # Firewall configuration firewall --disabled # Enable SELinux selinux --enforcing # Don't configure X skipx # Power down the machine after install poweroff %packages @base @console-internet chrony sudo parted -dracut-config-rescue %end %post --log=/var/log/anaconda/post-install.log #!/bin/bash # Register Red Hat Subscription subscription-manager register --username=XXX --password=XXX --auto-attach --force # Install latest repo update yum update -y # Enable extras repo subscription-manager repos --enable=rhel-7-server-extras-rpms # Install WALinuxAgent yum install -y WALinuxAgent # Unregister Red Hat subscription subscription-manager unregister # Enable waaagent at boot-up systemctl enable waagent # Install cloud-init yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons # Configure waagent for cloud-init sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf echo "Adding mounts and disk_setup to init stage" sed -i '/ - mounts/d' /etc/cloud/cloud.cfg sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg # Disable the root account usermod root -p '!!' # Configure swap using cloud-init echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf cat > /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"] - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.device-timeout=2,x-systemd.requires=cloud-init.service", "0", "0"] EOF # Set the cmdline sed -i 's/^\(GRUB_CMDLINE_LINUX\)=".*"$/\1="console=tty1 console=ttyS0 earlyprintk=ttyS0"/g' /etc/default/grub # Enable SSH keepalive sed -i 's/^#\(ClientAliveInterval\).*$/\1 180/g' /etc/ssh/sshd_config # Build the grub cfg grub2-mkconfig -o /boot/grub2/grub.cfg # Configure network cat << EOF > /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no PERSISTENT_DHCLIENT=yes NM_CONTROLLED=yes EOF sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules # Accelerated Networking on Azure exposes a new SRIOV interface to the VM. # This interface is transparentlybonded to the synthetic interface, # so NetworkManager should just ignore any SRIOV interfaces. SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1" EOF # Deprovision and prepare for Azure if you are creating a generalized image sudo cloud-init clean --logs --seed sudo rm -rf /var/lib/cloud/ sudo rm -rf /var/lib/waagent/ sudo rm -f /var/log/waagent.log sudo waagent -force -deprovision+user rm -f ~/.bash_history export HISTSIZE=0 %end
Coloque el archivo kickstart donde el sistema de la instalación puede acceder a él.
En el Administrador de Hyper-V, cree una nueva máquina virtual. En la página Conectar disco duro virtual, seleccione Adjuntar un disco duro virtual más adelante y complete el Asistente para Crear nueva máquina virtual.
Abra la configuración de máquina virtual:
Adjunte un nuevo disco duro virtual a la máquina virtual. Asegúrese de seleccionar Formato VHD y Tamaño fijo.
Adjunte la imagen ISO de instalación a la unidad de DVD.
Configure el BIOS para que arranque desde el CD.
Inicie la máquina virtual. Cuando aparezca la guía de instalación, seleccione la tecla Tab para configurar las opciones de arranque.
Escriba
inst.ks=<the location of the kickstart file>
al final de las opciones de arranque y seleccione la tecla Entrar.Espere hasta que la instalación se complete. Cuando haya finalizado, la máquina virtual se apaga automáticamente. El VHD de Linux ya está listo para cargarse en Azure.
Problemas conocidos
Se conoce el siguiente problema.
El controlador de Hyper-V no se pudo incluir en el disco RAM inicial al usar un hipervisor de Hyper-V
En algunos casos, los instaladores de Linux pueden no incluir los controladores de Hyper-V en el disco RAM inicial (initrd o initramfs) a menos que Linux detecte que se está ejecutando un entorno de Hyper-V.
Al usar un sistema de virtualización diferente (como VirtualBox o Xen) para preparar la imagen de Linux, es posible que tenga que volver a generar initrd para asegurarse de que al menos los módulos de kernel hv_vmbus
y hv_storvsc
estén disponibles en el disco RAM inicial. Esto es un problema conocido al menos en sistemas basados en el nivel superior de distribución de Red Hat.
Para resolver este problema, agregue los módulos de Hyper-V en initramfs y recompilarlo:
Edite /etc/dracut.conf
y agregue el siguiente contenido:
add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
Recompile initramfs:
sudo dracut -f -v
Para obtener más información, consulte Recompilación de initramfs.
Contenido relacionado
- Ya está listo para usar el disco duro virtual de RHEL para crear nuevas máquinas virtuales en Azure. Si es la primera vez que carga el archivo .vhd en Azure, vea Crear una VM Linux a partir de un disco personalizado.
- Para obtener más información sobre los hipervisores certificados para ejecutar RHEL, visite el sitio web de Red Hat.
- Para obtener más información sobre el uso de imágenes BYOS de RHEL listas para producción, vaya a la página de documentación de Traiga su propia suscripción.