Compartir vía


Preparación de una máquina virtual Ubuntu para Azure

Se aplica a: ✔️ máquinas virtuales Linux ✔️ conjuntos de escalado flexibles

Ubuntu ahora publica discos duros virtuales de Azure (VHD) oficiales para su descarga en la página web de imágenes en la nube de Ubuntu. Si necesita crear su propia imagen de Ubuntu especializada para Azure en lugar de usar el procedimiento manual siguiente, comience con estos VHD de trabajo conocidos y personalícelos, según sea necesario. Siempre puede encontrar las versiones de imagen más recientes en las siguientes ubicaciones:

Requisitos previos

En este artículo se da por supuesto que ya ha instalado un sistema operativo Ubuntu Linux en un disco duro virtual. Existen varias herramientas para crear archivos .vhd. Un ejemplo es una solución de virtualización como Hyper-V. Para obtener instrucciones, consulte Instalación del rol de Hyper-V y configuración de una máquina virtual (VM).

Notas de instalación de Ubuntu

  • Para obtener más sugerencias sobre cómo preparar Linux para Azure, consulte Notas generales de instalación de Linux.
  • El formato VHDX no se admite en Azure, solo el VHD fijo. Puede convertir el disco al formato VHD mediante el Administrador de Hyper-V o el cmdlet Convert-VHD.
  • Al instalar el sistema Linux, se recomienda usar particiones estándar en lugar de Administrador de volúmenes lógicos (LVM), que suele ser el valor predeterminado para muchas instalaciones. Estas particiones estándar impiden 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 SO a otra máquina virtual para solucionar problemas. LVM o RAID también se pueden usar en discos de datos.
  • No cree una partición ni un archivo de intercambio en el disco del SO. Puede configurar el agente de aprovisionamiento cloud-init para crear un archivo de intercambio o una partición de intercambio en el disco de recursos temporal. Para obtener más información sobre este proceso, consulte 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, consulte Notas de instalación de Linux.

Pasos manuales

Nota:

Antes de intentar crear su propia imagen personalizada de Ubuntu para Azure, considere la posibilidad de usar las imágenes precompiladas y probadas de la página web de imágenes en la nube de Ubuntu en su lugar.

  1. Seleccione la máquina virtual en el panel central del Administrador de Hyper-V.

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

  3. Sustituya los repositorios actuales de la imagen para utilizar el repositorio de Azure de Ubuntu.

    Antes de editar /etc/apt/sources.list, se recomienda realizar una copia de seguridad:

    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
    
    sudo sed -i 's#http://archive\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list
    sudo sed -i 's#http://[a-z][a-z]\.archive\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list
    sudo sed -i 's#http://security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list
    sudo sed -i 's#http://[a-z][a-z]\.security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list
    sudo apt-get update
    
  4. Ahora, las imágenes de Ubuntu de Azure usan el kernel adaptado a Azure. Actualice el sistema operativo al kernel más reciente adaptado a Azure e instale las herramientas de Linux de Azure (incluidas las dependencias de Hyper-V):

    sudo apt update
    sudo apt install linux-azure linux-image-azure linux-headers-azure linux-tools-common linux-cloud-tools-common linux-tools-azure linux-cloud-tools-azure
    sudo apt full-upgrade
    sudo reboot
    
  5. Modifique la línea de arranque del kernel de GRUB para incluir parámetros de kernel adicionales para Azure. Para realizar este paso, abra /etc/default/grub en un editor de texto, busque la variable llamada GRUB_CMDLINE_LINUX_DEFAULT (o agréguela si fuera necesario) y edítela para incluir los parámetros siguientes:

    GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300 quiet splash"
    
  6. Guarde este archivo y ciérrelo, y ejecute sudo update-grub. Este paso 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.

  7. 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.

  8. Instale cloud-init (el agente de aprovisionamiento) y el agente de Linux de Azure (el controlador de extensiones de invitado). Cloud-init usa netplan para configurar la red del sistema (durante el aprovisionamiento y cada arranque posterior) y gdisk para crear particiones en los discos del recurso.

    sudo apt update
    sudo apt install cloud-init gdisk netplan.io walinuxagent && systemctl stop walinuxagent
    

    Nota:

    El paquete walinuxagent puede eliminar los paquetes NetworkManager y NetworkManager-gnome, en caso de que estén instalados.

  9. Quite las configuraciones predeterminadas de cloud-init y los artefactos netplan sobrantes que podrían entrar en conflicto con el aprovisionamiento de cloud-init en Azure:

    sudo rm -f /etc/cloud/cloud.cfg.d/50-curtin-networking.cfg /etc/cloud/cloud.cfg.d/curtin-preserve-sources.cfg /etc/cloud/cloud.cfg.d/99-installer.cfg /etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg
    sudo rm -f /etc/cloud/ds-identify.cfg
    sudo rm -f /etc/netplan/*.yaml
    
  10. Configure cloud-init para aprovisionar el sistema mediante el origen de datos de Azure:

    cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg
    datasource_list: [ Azure ]
    EOF
    
    cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/90-azure.cfg
    system_info:
       package_mirrors:
         - arches: [i386, amd64]
           failsafe:
             primary: http://archive.ubuntu.com/ubuntu
             security: http://security.ubuntu.com/ubuntu
           search:
             primary:
               - http://azure.archive.ubuntu.com/ubuntu/
             security: []
         - arches: [armhf, armel, default]
           failsafe:
             primary: http://ports.ubuntu.com/ubuntu-ports
             security: http://ports.ubuntu.com/ubuntu-ports
    EOF
    
    cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg
    reporting:
      logging:
        type: log
      telemetry:
        type: hyperv
    EOF
    
  11. Configure el agente de Linux de Azure para que se base en cloud-init para realizar el aprovisionamiento. Para obtener más información sobre estas opciones, consulte el proyecto WALinuxAgent.

    sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/g' /etc/waagent.conf
    sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=y/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
    
    cat <<EOF | sudo tee -a /etc/waagent.conf
    # For Azure Linux agent version >= 2.2.45, this is the option to configure,
    # enable, or disable the provisioning behavior of the Linux agent.
    # Accepted values are auto (default), waagent, cloud-init, or disabled.
    # A value of auto means that the agent will rely on cloud-init to handle
    # provisioning if it is installed and enabled, which in this case it will.
    Provisioning.Agent=auto
    EOF
    
  12. Limpie cloud-init y los registros y artefactos en tiempo de ejecución del agente de Linux de Azure:

    sudo cloud-init clean --logs --seed
    sudo rm -rf /var/lib/cloud/
    sudo systemctl stop walinuxagent.service
    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    
  13. Desaprovisione la máquina virtual y prepárela para el aprovisionamiento en Azure.

    Nota:

    Para generalizar la imagen, el comando sudo waagent -force -deprovision+user intenta limpiar el sistema y hacer que sea adecuado para el nuevo aprovisionamiento. La opción +user elimina la última cuenta de usuario aprovisionada y los datos asociados.

    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    

    Advertencia

    El desaprovisionamiento mediante el comando anterior no garantiza que la imagen se borre de toda la información confidencial y sea adecuada para la redistribución.

  14. Seleccione Acción >Apagar en el Administrador de Hyper-V.

  15. Azure solo acepta VHD de tamaño fijo. Si el disco del SO de la VM no es un VHD de tamaño fijo, use el cmdlet Convert-VHD de PowerShell y especifique la opción -VHDType Fixed. Para obtener más información, consulte los documentos de Convert-VHD en Convert-VHD.

  16. Para traer una máquina virtual de generación 2 en Azure, siga estos pasos:

    1. Cambie el directorio al directorio boot EFI:

      cd /boot/efi/EFI
      
    2. Copie el directorio ubuntu en un nuevo directorio denominado boot:

      sudo cp -r ubuntu/ boot
      
    3. Cambie el directorio al directorio “boot” recién creado:

      cd boot
      
    4. Cambie el nombre del archivo shimx64.efi:

      sudo mv shimx64.efi bootx64.efi
      
    5. Cambie el nombre del archivo grub.cfg a bootx64.cfg:

      sudo mv grub.cfg bootx64.cfg
      

Ya está listo para usar el VHD de Ubuntu Linux 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.