Preparación de una máquina virtual SLES u openSUSE Leap para Azure
Se aplica a: ✔️ Máquinas virtuales Linux ✔️ Conjuntos de escalado flexibles Se aplica a: ✔️ Conjuntos de escalado uniformes
En algunos casos, es posible que quiera usar máquinas virtuales (VM) de SUSE Linux Enterprise Server (SLES) personalizadas o de openSUSE Leap Linux en su entorno de Azure y poder compilar estos tipos de máquinas virtuales a través de la automatización. En este artículo se indica cómo crear y cargar un disco duro virtual (VHD) personalizado de Azure que contiene un sistema operativo SUSE Linux.
Requisitos previos
En este artículo se asume que ya ha instalado un SLES u openSUSE Leap en un disco duro virtual. Existen varias herramientas para crear archivos .vhd. Por ejemplo, puede usar una solución de virtualización como Hyper-V. Para obtener instrucciones, consulte Instalación de Hyper-V y creación de una máquina Virtual.
Notas sobre la instalación de SLES/openSUSE Leap
- Consulte Notas generales sobre la instalación de Linux para obtener consejos sobre la preparación de imágenes de Linux para Azure.
- Azure no admite archivos de imagen de disco duro (.vhdx) de Windows. Solo se admiten archivos VHD (.vhd) fuera de las máquinas virtuales. Puede convertir el disco al formato VHD mediante el Administrador de Hyper-V o el cmdlet
Convert-VHD
. - Azure admite máquinas virtuales de Gen1 (arranque del BIOS) y Gen2 (arranque UEFI).
- El módulo del kernel de la tabla de asignación de archivos virtuales (VFAT) debe estar habilitado en el kernel.
- No configure una partición de intercambio en el disco del SO. Es posible configurar el agente de Linux para crear un archivo de intercambio en el disco de recursos temporal. Los pasos que se indican más adelante en este artículo proporcionan más información sobre cómo configurar el espacio de intercambio.
- En Azure, todos los discos duros virtuales deben tener un tamaño virtual alineado con 1 MB. Al convertir un disco sin formato en un disco duro virtual, asegúrese de que su tamaño es un múltiplo de 1 MB antes de la conversión. Para obtener más información, consulte las Notas generales sobre la instalación de Linux.
Nota:
La versión 21.2 o posterior de Cloud-init quita el requisito de función definida por el usuario (UDF). Pero sin el módulo udf
habilitado, 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 de usuario. Sin embargo, 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 en la documentación de cloud-init.
Uso de SUSE Studio
SUSE Studio puede crear y administrar fácilmente sus imágenes de SLES y openSUSE Leap para Hyper-V y Azure. SUSE Studio es el enfoque recomendado para personalizar sus propias imágenes SLES y openSUSE Leap.
Como alternativa a la creación de su propio VHD, SUSE también publica imágenes de BYOS (Siglas en inglés de "traiga su propia suscripción") para SLES en VM Depot.
Preparación de SLES para Azure
Configure los módulos de Azure y Hyper-V si es necesario.
Si el hipervisor de software no es Hyper-V, es necesario agregar otros módulos al disco RAM inicial (initramfs) para arrancar correctamente en Azure.
Edite el archivo /etc/dracut.conf y agregue la siguiente línea al archivo:
add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
Ejecute el comando
dracut
para recompilar el archivo initramfs:sudo dracut --verbose --force
Configuración de la consola serie.
Para trabajar correctamente con la consola serie, debe configurar varias variables en el archivo /etc/defaults/grub y volver a crear GRUB en el servidor:
# Add console=ttyS0 and earlyprintk=ttS0 to the variable. # Remove "splash=silent" and "quiet" options. GRUB_CMDLINE_LINUX_DEFAULT="audit=1 no-scroll fbcon=scrollback:0 mitigations=auto security=apparmor crashkernel=228M,high crashkernel=72M,low console=ttyS0 earlyprintk=ttyS0" # Add "console serial" to GRUB_TERMINAL. GRUB_TERMINAL="console serial" # Set the GRUB_SERIAL_COMMAND variable. GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg
Registre el sistema de SUSE Linux Enterprise para permitir que descargue actualizaciones e instale paquetes.
Actualice el sistema con las revisiones más recientes:
sudo zypper update
Instale el agente de máquina virtual Linux de Azure (
waagent
) y cloud-init:sudo SUSEConnect -p sle-module-public-cloud/15.2/x86_64 (SLES 15 SP2) sudo zypper refresh sudo zypper install python-azure-agent sudo zypper install cloud-init
Habilite
waagent
y cloud-init para que se inicien en el arranque:sudo systemctl enable waagent sudo systemctl enable cloud-init-local.service sudo systemctl enable cloud-init.service sudo systemctl enable cloud-config.service sudo systemctl enable cloud-final.service sudo systemctl daemon-reload sudo cloud-init clean
Actualice la configuración de cloud-init:
cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg datasource_list: [ Azure ] datasource: Azure: apply_network_config: False EOF
sudo cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/05_logging.cfg # 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 # Make sure mounts and disk_setup are in the init stage: 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
Si desea montar, dar formato y crear una partición de intercambio, una opción es pasar una configuración de cloud-init cada vez que cree una máquina virtual.
Otra opción es usar una directiva cloud-init en la imagen para configurar el espacio de intercambio cada vez que se crea la máquina virtual:
cat <<EOF | sudo tee -a /etc/systemd/system.conf 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' EOF cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/00-azure-swap.cfg #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.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"] EOF
Antes, el agente Linux de Azure se usaba para configurar automáticamente un espacio de intercambio mediante el disco de recursos local que se asocia a la máquina virtual, después de que la máquina virtual se aprovisione en Azure. Como ahora es cloud-init quien administra este paso; no tiene que usar el agente de Linux de Azure para formatear el disco de recursos ni crear el archivo de intercambio. Use estos comandos para modificar /etc/waagent.conf adecuadamente:
sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=auto/g' /etc/waagent.conf sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/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 usa una versión de cloud-init anterior a la 21.2, asegúrese de que el módulo
udf
está habilitado. Al quitarlo o deshabilitarlo, se producirá un error de aprovisionamiento o de arranque. La versión 21.2 o posterior de Cloud-init quita el requisito de UDF.Asegúrese de que el archivo /etc/fstab hace referencia al disco mediante su UUID (
by-uuid
).Quite las reglas udev y los archivos de configuración del adaptador de red para evitar generar reglas estáticas para las interfaces Ethernet. Estas reglas pueden causar problemas al clonar una máquina virtual en Microsoft Azure o Hyper-V.
sudo rm -f /etc/udev/rules.d/70-persistent-net.rules sudo rm -f /etc/udev/rules.d/85-persistent-net-cloud-init.rules sudo rm -f /etc/sysconfig/network/ifcfg-eth*
Le recomendamos editar el archivo /etc/sysconfig/network/dhcp y cambiar el parámetro
DHCLIENT_SET_HOSTNAME
por lo siguiente:DHCLIENT_SET_HOSTNAME="no"
En el archivo /etc/sudoers, convierta en comentario o quite las líneas siguientes, si existen:
Defaults targetpw # Ask for the password of the target user i.e. root ALL ALL=(ALL) ALL # WARNING! Only use this setting together with 'Defaults targetpw'!
Asegúrese de que el servidor Secure Shell (SSH) se haya instalado y configurado para iniciarse en el tiempo de arranque:
sudo systemctl enable sshd
Limpie la fase cloud-init:
sudo cloud-init clean --seed --logs
Ejecute los comandos siguientes para desaprovisionar la máquina virtual y prepararla para aprovisionarse en Azure.
Si va a migrar una máquina virtual específica y no desea crear una imagen generalizada, omita el paso de desaprovisionamiento.
sudo rm -f /var/log/waagent.log sudo waagent -force -deprovision+user sudo export HISTSIZE=0 sudo rm -f ~/.bash_history
Preparación de openSUSE 15.4 y versiones posteriores
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.
En un terminal, ejecute el comando
zypper lr
. Si este comando devuelve una salida similar al ejemplo siguiente, los repositorios se configuran según lo previsto y no es necesario realizar ningún ajuste. (Los números de versión pueden variar).# Alias Nombre habilitado Comprobación de GPG Actualizar 1 Cloud:Tools_15.4 Cloud:Tools-> Sí (r ) Sí Sí 2 openSUSE_stable_OSS openSUSE_st-> Sí (r ) Sí Sí 3 openSUSE_stable_Updates openSUSE_st-> Sí (r ) Sí Sí Si el mensaje "No hay repositorios definidos" aparece desde
zypper lr
, los repositorios se deben agregar manualmente.A continuación, se muestran ejemplos de comandos para agregar estos repositorios (las versiones y vínculos pueden variar):
sudo zypper ar -f https://download.opensuse.org/update/openSUSE-stable openSUSE_stable_Updates sudo zypper ar -f https://download.opensuse.org/repositories/Cloud:/Tools/15.4 Cloud:Tools_15.4 sudo zypper ar -f https://download.opensuse.org/distribution/openSUSE-stable/repo/oss openSUSE_stable_OSS
Puede verificar entonces que se han agregado los repositorios al volver a ejecutar el comando
zypper lr
. Si no hay repositorios de actualizaciones pertinentes habilitados, habilítelos con el comando siguiente:sudo zypper mr -e [NUMBER OF REPOSITORY]
Actualice el kernel a la versión más reciente disponible:
sudo zypper up kernel-default
O para actualizar el sistema operativo con todas las revisiones más recientes:
sudo zypper update
Instale el Agente de Linux de Azure:
sudo zypper install WALinuxAgent
Modifique la línea de arranque de kernel de su configuración GRUB para que incluya otros parámetros de kernel para Azure. Para ello, abra /boot/grub/menu.lst en un editor de texto y asegúrese de que el kernel predeterminado incluye los parámetros siguientes:
console=ttyS0 earlyprintk=ttyS0
Esta opció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. Además, elimine los parámetros siguientes de la línea de arranque de kernel, si es que están:
libata.atapi_enabled=0 reserve=0x1f0,0x8
Se recomienda editar el archivo /etc/sysconfig/network/dhcp y cambiar el parámetro
DHCLIENT_SET_HOSTNAME
por el siguiente valor:DHCLIENT_SET_HOSTNAME="no"
En el archivo /etc/sudoers, convierta en comentario o quite las líneas siguientes, si existen. Este es un paso importante.
Defaults targetpw # ask for the password of the target user i.e. root ALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!
Asegúrese de que el servidor SSH se haya instalado y configurado para iniciarse en el tiempo de arranque.
No cree un espacio de intercambio en el disco del sistema operativo.
El agente de Linux de Azure puede configurar automáticamente un espacio de intercambio usando el disco de recursos local que se adjunta a la máquina virtual después de aprovisionarse en Azure. El disco de recursos local es un disco temporal y se vaciará cuando la máquina virtual se desaprovisione.
Después de instalar el agente Linux de Azure, modifique los parámetros en /etc/waagent.conf de la siguiente manera:
ResourceDisk.Format=n ResourceDisk.Filesystem=ext4 ResourceDisk.MountPoint=/mnt/resource ResourceDisk.EnableSwap=n ResourceDisk.SwapSizeMB=2048 ## NOTE: set the size to whatever you need it to be.
Asegúrese de que el Agente de Linux de Azure se ejecute al inicio:
sudo systemctl enable waagent.service
Ejecute los comandos siguientes para desaprovisionar la máquina virtual y prepararla para aprovisionarse en Azure.
Si va a migrar una máquina virtual específica y no desea crear una imagen generalizada, omita el paso de desaprovisionamiento.
sudo rm -f ~/.bash_history # Remove current user history sudo rm -rf /var/lib/waagent/ sudo rm -f /var/log/waagent.log sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history # Remove root user history sudo export HISTSIZE=0
Seleccione Acción >Apagar en el Administrador de Hyper-V.
Pasos siguientes
Ya está listo para usar el VHD de SUSE 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.