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:
- Ubuntu 18.04/Bionic: bionic-server-cloudimg-amd64-azure.vhd.zip
- Ubuntu 20.04/Focal: focal-server-cloudimg-amd64-azure.vhd.zip
- Ubuntu 22.04/Jammy: jammy-server-cloudimg-amd64-azure.vhd.zip
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.
Seleccione la máquina virtual en el panel central del Administrador de Hyper-V.
Seleccione Conectar para abrir la ventana de la máquina virtual.
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
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
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 llamadaGRUB_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
. 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.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.
Instale
cloud-init
(el agente de aprovisionamiento) y el agente de Linux de Azure (el controlador de extensiones de invitado).Cloud-init
usanetplan
para configurar la red del sistema (durante el aprovisionamiento y cada arranque posterior) ygdisk
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 paquetesNetworkManager
yNetworkManager-gnome
, en caso de que estén instalados.Quite las configuraciones predeterminadas de
cloud-init
y los artefactosnetplan
sobrantes que podrían entrar en conflicto con el aprovisionamiento decloud-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
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
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
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
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.
Seleccione Acción >Apagar en el Administrador de Hyper-V.
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 deConvert-VHD
en Convert-VHD.Para traer una máquina virtual de generación 2 en Azure, siga estos pasos:
Cambie el directorio al directorio
boot EFI
:cd /boot/efi/EFI
Copie el directorio
ubuntu
en un nuevo directorio denominadoboot
:sudo cp -r ubuntu/ boot
Cambie el directorio al directorio “boot” recién creado:
cd boot
Cambie el nombre del archivo
shimx64.efi
:sudo mv shimx64.efi bootx64.efi
Cambie el nombre del archivo
grub.cfg
abootx64.cfg
:sudo mv grub.cfg bootx64.cfg
Contenido relacionado
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.