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

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

Ahora Ubuntu publica discos duros virtuales de Azure oficiales que se pueden descargar en https://cloud-images.ubuntu.com/. Si necesita crear su propia imagen especializada de Ubuntu para Azure, en vez de usar el siguiente procedimiento manual se recomienda comenzar con estos VHD, ya conocidos y funcionales, y personalizarlos según sea necesario. Las versiones más recientes de las imágenes siempre se encuentran en las siguientes ubicaciones:

Requisitos previos

Se da por hecho que ya ha instalado un sistema operativo Ubuntu Linux en un disco duro virtual. Existen varias herramientas para crear archivos .vhd; por ejemplo, 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.

Notas de instalación de Ubuntu

  • Consulte también Notas generales sobre la instalación de Linux para obtener más consejos sobre la preparación de Linux para Azure.
  • 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 utilizar las particiones estándar en lugar de LVM (que a menudo viene de manera predeterminada en muchas instalaciones). De este modo se impedirá 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 se pueden utilizar en discos de datos si así se prefiere.
  • No cree una partición ni un archivo de intercambio en el disco del SO. El agente de aprovisionamiento de cloud-init se puede configurar para crear una partición o archivo de intercambio en el disco de recursos temporal. Puede encontrar más información al respecto en los pasos que vienen a continuación.
  • En Azure, todos los discos duros virtuales deben tener un tamaño virtual alineado con 1 MB. Al convertir un disco sin procesar en un disco duro virtual, tiene que asegurarse de que su tamaño es un múltiplo de 1 MB antes de la conversión. Para más información, consulte Notas sobre la instalación de Linux.

Pasos manuales

Nota:

Antes de intentar crear su propia imagen personalizada de Ubuntu para Azure, considere la posibilidad de utilizar las imágenes pregeneradas y probadas de https://cloud-images.ubuntu.com/ en su lugar.

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

  2. Haga clic en 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
  1. 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) mediante la ejecución de los siguientes comandos:
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
  1. Modifique la línea de arranque de kernel para que Grub incluya los parámetros de kernel adicionales para Azure. Para ello, 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"

Guarde este archivo y ciérrelo, y ejecute sudo update-grub. Así se asegurará de 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.

  1. Asegúrese de que el servidor SSH se haya instalado y configurado para iniciarse en el tiempo de arranque. Este es normalmente el valor predeterminado.

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

  1. Quite las configuraciones predeterminadas de cloud-init y los artefactos netplan sobrantes que puedan 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
  1. 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
  1. Configure el agente de Linux de Azure para que se base en cloud-init para realizar el aprovisionamiento. Consulte el proyecto de WALinuxAgent para obtener más información sobre estas opciones.
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
  1. 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
  1. Ejecute los comandos siguientes para desaprovisionar la máquina virtual y prepararla para aprovisionarse 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.

Advertencia

Desaprovisionar usando el comando anterior no garantiza que la imagen esté limpia de toda la información sensible y sea adecuada para su redistribución.

sudo waagent -force -deprovision+user
sudo rm -f ~/.bash_history
  1. Haga clic en Acción> Apagar en el Administrador de Hyper-V.

  2. 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. Eche un vistazo a los documentos de Convert-VHD aquí: Convert-VHD.

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

  4. Cambie el directorio al directorio EFI de arranque:

cd /boot/efi/EFI
  1. Copie el directorio de Ubuntu en un nuevo directorio denominado “boot”:
sudo cp -r ubuntu/ boot
  1. Cambie el directorio al directorio “boot” recién creado:
cd boot
  1. Cambie el nombre del archivo shimx64.efi:
sudo mv shimx64.efi bootx64.efi
  1. Cambie el nombre del archivo grub.cfg a bootx64.cfg:
sudo mv grub.cfg bootx64.cfg

Pasos siguientes

Ya está listo para usar el disco duro virtual de Ubuntu para crear nuevas máquinas virtuales de Azure. Si es la primera vez que carga el archivo .vhd en Azure, vea Crear una VM Linux a partir de un disco personalizado.