Linux voorbereiden voor imaging in Azure

Let op

In dit artikel wordt verwezen naar CentOS, een Linux-distributie die de status End Of Life (EOL) nadert. Houd rekening met uw gebruik en plan dienovereenkomstig. Zie de Richtlijnen voor het einde van de levensduur van CentOS voor meer informatie.

Van toepassing op: ✔️ Flexibele schaalsets voor Linux-VM's ✔️

De Sla (Service Level Agreement) van het Azure-platform is alleen van toepassing op virtuele machines (VM's) waarop het Linux-besturingssysteem wordt uitgevoerd wanneer u een van de goedgekeurde distributies gebruikt. Voor goedgekeurde distributies biedt Azure Marketplace vooraf geconfigureerde Linux-installatiekopieën. Zie voor meer informatie:

Alle andere distributies die worden uitgevoerd in Azure, met inbegrip van door de community ondersteunde en niet-goedgekeurde distributies, hebben enkele vereisten.

Dit artikel is gericht op algemene richtlijnen voor het uitvoeren van uw Linux-distributie in Azure. Dit artikel kan niet uitgebreid zijn, omdat elke distributie anders is. Zelfs als u voldoet aan alle criteria die in dit artikel worden beschreven, moet u mogelijk uw Linux-systeem aanzienlijk aanpassen om het goed uit te voeren.

Algemene opmerkingen bij de installatie van Linux

  • Azure biedt geen ondersteuning voor de indeling van de virtuele harde schijf (VHDX) van Hyper-V. ondersteuning voor Azure alleen vaste VHD. U kunt de schijf converteren naar VHD-indeling met Hyper-V-beheer of de cmdlet Convert-VHD . Als u VirtualBox gebruikt, selecteert u Vaste grootte in plaats van de standaardgrootte (dynamisch toegewezen) wanneer u de schijf maakt.

  • ondersteuning voor Azure s Gen1 (BIOS boot) en Gen2 (UEFI boot) virtuele machines.

  • De VFAT-kernelmodule (Virtual File Allocation Table) moet zijn ingeschakeld in de kernel.

  • De maximale grootte die is toegestaan voor de VHD is 1023 GB.

  • Wanneer u het Linux-systeem installeert, wordt u aangeraden standaardpartities te gebruiken in plaats van LVM (Logical Volume Manager). LVM is de standaardinstelling voor veel installaties.

    Door standaardpartities te gebruiken, voorkomt u conflicten met de LVM-naam met gekloonde VM's, met name als een besturingssysteemschijf ooit is gekoppeld aan een andere identieke VM voor probleemoplossing. U kunt LVM of RAID gebruiken op gegevensschijven.

  • Kernelondersteuning voor het koppelen van door de gebruiker gedefinieerde functie (UDF) bestandssystemen is nodig. Bij het opstarten in Azure wordt de inrichtingsconfiguratie doorgegeven aan de Virtuele Linux-machine via UDF-geformatteerde media die zijn gekoppeld aan de gast. De Azure Linux-agent moet het UDF-bestandssysteem koppelen om de configuratie ervan te lezen en de VM in te richten.

  • Linux-kernelversies ouder dan 2.6.37 bieden geen ondersteuning voor Numa (Non-Uniform Memory Access) op Hyper-V met grotere VM-grootten. Dit probleem is voornamelijk van invloed op oudere distributies die gebruikmaken van de upstream Red Hat 2.6.32-kernel. Het is opgelost in Red Hat Enterprise Linux (RHEL) 6.6 (kernel-2.6.32-504).

    Systemen met aangepaste kernels die ouder zijn dan 2.6.37 of RHEL-kernels ouder dan 2.6.32-504, moeten de opstartparameter numa=off instellen op de kernel-opdrachtregel in grub.conf. Zie Red Hat KB 436883 voor meer informatie.

  • Configureer geen wisselpartitie op de besturingssysteemschijf. U kunt de Linux-agent configureren voor het maken van een wisselbestand op de tijdelijke resourceschijf, zoals verderop in dit artikel wordt beschreven.

  • Alle VHD's in Azure moeten een virtuele grootte hebben die is afgestemd op 1 MB (1024 x 1024 bytes). Wanneer u converteert van een onbewerkte schijf naar VHD, moet u ervoor zorgen dat de grootte van de onbewerkte schijf vóór de conversie een veelvoud van 1 MB is, zoals verderop in dit artikel wordt beschreven.

  • Gebruik de meest recente distributieversie, pakketten en software.

  • Verwijder gebruikers en systeemaccounts, openbare sleutels, gevoelige gegevens, onnodige software en toepassingen.

Notitie

Cloud-init versie 21.2 of hoger verwijdert de UDF-vereiste. Maar zonder dat de udf module is ingeschakeld, wordt de CD-ROM niet bevestigd tijdens het inrichten, waardoor de aangepaste gegevens niet kunnen worden toegepast. Een tijdelijke oplossing is het toepassen van gebruikersgegevens. In tegenstelling tot aangepaste gegevens worden gebruikersgegevens echter niet versleuteld. Zie de indelingen van gebruikersgegevens in de cloud-init-documentatie voor meer informatie.

Kernelmodules installeren zonder Hyper-V

Azure wordt uitgevoerd op de Hyper-V-hypervisor, dus voor Linux moeten bepaalde kernelmodules worden uitgevoerd in Azure. Als u een VIRTUELE machine hebt die buiten Hyper-V is gemaakt, bevatten de Linux-installatieprogramma's mogelijk niet de stuurprogramma's voor Hyper-V in de eerste RAM-schijf (initrd of initramfs), tenzij de VM detecteert dat deze wordt uitgevoerd in een Hyper-V-omgeving.

Wanneer u een ander virtualisatiesysteem (zoals VirtualBox of KVM) gebruikt om uw Linux-installatiekopieën voor te bereiden, moet u mogelijk initrd opnieuw bouwen, zodat ten minste de hv_vmbus modules en hv_storvsc kernelmodules beschikbaar zijn op de eerste RAM-schijf. Dit bekende probleem is bedoeld voor systemen op basis van de upstream Red Hat-distributie en mogelijk andere.

Het mechanisme voor het herbouwen van de initrd- of initramfs-installatiekopieën kan variëren, afhankelijk van de verdeling. Raadpleeg de documentatie of ondersteuning van uw distributie voor de juiste procedure. Hier volgt een voorbeeld voor het herbouwen van initrd met behulp van het mkinitrd hulpprogramma:

  1. Maak een back-up van de bestaande initrd-installatiekopieën:

    cd /boot
    sudo cp initrd-`uname -r`.img  initrd-`uname -r`.img.bak
    
  2. Bouw initrd opnieuw met behulp van de hv_vmbus modules en hv_storvsc kernelmodules:

    sudo mkinitrd --preload=hv_storvsc --preload=hv_vmbus -v -f initrd-`uname -r`.img `uname -r`
    

Grootte van VHD's wijzigen

VHD-installatiekopieën in Azure moeten een virtuele grootte hebben die is afgestemd op 1 MB. Normaal gesproken worden VHD's die zijn gemaakt via Hyper-V correct uitgelijnd. Als de VHD niet correct is uitgelijnd, wordt er mogelijk een foutbericht weergegeven dat lijkt op het volgende voorbeeld wanneer u probeert een installatiekopieën te maken op basis van uw VHD:

The VHD http://<mystorageaccount>.blob.core.windows.net/vhds/MyLinuxVM.vhd has an unsupported virtual size of 21475270656 bytes. The size must be a whole number (in MBs).

In dit geval wijzigt u de grootte van de VIRTUELE machine met behulp van de Hyper-V-beheerconsole of de PowerShell-cmdlet Resize-VHD . Als u niet in een Windows-omgeving werkt, raden we u aan qemu-img om de VHD te converteren (indien nodig) en het formaat van de VHD te wijzigen.

Notitie

Er is een bekende fout in qemu-img voor QEMU versie 2.2.1 en een aantal latere versies die resulteert in een onjuist opgemaakte VHD. Het probleem is opgelost in QEMU 2.6. U wordt aangeraden versie 2.2.0 of lager te gebruiken of versie 2.6 of hoger te gebruiken.

  1. Het formaat van de VHD rechtstreeks wijzigen met behulp van hulpprogramma's zoals qemu-img of vbox-manage kan leiden tot een niet-opstartbare VHD. U wordt aangeraden eerst de VHD te converteren naar een onbewerkte schijfinstallatiekopieën met behulp van de volgende code.

    Als de VM-installatiekopieën zijn gemaakt als een installatiekopieën van onbewerkte schijven, kunt u deze stap overslaan. Het maken van de VM-installatiekopieën als een onbewerkte schijfinstallatiekopieën is de standaardinstelling in sommige hypervisors, zoals KVM.

    sudo qemu-img convert -f vpc -O raw MyLinuxVM.vhd MyLinuxVM.raw
    
  2. Bereken de vereiste grootte van de schijfinstallatiekopieën zodat de virtuele grootte is uitgelijnd op 1 MB. Het volgende Bash-shellscript gebruikt qemu-img info om de virtuele grootte van de schijfinstallatiekopieën te bepalen en berekent vervolgens de grootte tot de volgende 1 MB:

    rawdisk="MyLinuxVM.raw"
    vhddisk="MyLinuxVM.vhd"
    
    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "$rawdisk" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    
    rounded_size=$(((($size+$MB-1)/$MB)*$MB))
    
    echo "Rounded Size = $rounded_size"
    
  3. Wijzig het formaat van de onbewerkte schijf met behulp van $rounded_size:

    sudo qemu-img resize MyLinuxVM.raw $rounded_size
    
  4. Converteer de onbewerkte schijf terug naar een VHD met een vaste grootte:

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc MyLinuxVM.raw MyLinuxVM.vhd
    

    Of verwijder de optie met QEMU-versies vóór 2.6 force_size :

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc MyLinuxVM.raw MyLinuxVM.vhd
    

Vereisten voor Linux-kernel

De Linux Integration Services-stuurprogramma's (LIS) voor Hyper-V en Azure worden rechtstreeks bijgedragen aan de upstream Linux-kernel. Veel distributies met een recente Linux-kernelversie (zoals 3.x) hebben deze stuurprogramma's al beschikbaar of bieden op een andere manier backported versies van deze stuurprogramma's met hun kernels.

LIS-stuurprogramma's worden voortdurend bijgewerkt in de upstream kernel met nieuwe fixes en functies. Indien mogelijk raden we u aan een goedgekeurde distributie uit te voeren die deze fixes en updates bevat.

Als u een variant van RHEL-versies 6.0 tot 6.3 gebruikt, moet u de nieuwste LIS-stuurprogramma's voor Hyper-V installeren. Vanaf RHEL 6.4+ (en derivaten) zijn de LIS-stuurprogramma's al opgenomen in de kernel, dus u hebt geen extra installatiepakketten nodig.

Als een aangepaste kernel vereist is, raden we een recente kernelversie aan (zoals 3.8+). Voor distributies of leveranciers die hun eigen kernel onderhouden, moet u regelmatig backporteren van de LIS-stuurprogramma's van de upstream-kernel naar uw aangepaste kernel.

Zelfs als u al een relatief recente kernelversie uitvoert, raden we u ten zeerste aan om eventuele upstreamfixes in de LIS-stuurprogramma's bij te houden en deze indien nodig te backporteren. De locaties van de LIS-stuurprogrammabronbestanden worden opgegeven in het ONDERHOUDERS-bestand in de Linux-kernelbronstructuur:

    F:    arch/x86/include/asm/mshyperv.h
    F:    arch/x86/include/uapi/asm/hyperv.h
    F:    arch/x86/kernel/cpu/mshyperv.c
    F:    drivers/hid/hid-hyperv.c
    F:    drivers/hv/
    F:    drivers/input/serio/hyperv-keyboard.c
    F:    drivers/net/hyperv/
    F:    drivers/scsi/storvsc_drv.c
    F:    drivers/video/fbdev/hyperv_fb.c
    F:    include/linux/hyperv.h
    F:    tools/hv/

De actieve kernel van de virtuele machine moet de volgende patches bevatten. Deze lijst kan niet worden voltooid voor alle distributies.

Azure Linux Agent

De Azure Linux-agent (waagent) richt een virtuele Linux-machine in Azure in. U kunt de nieuwste versie ophalen, problemen melden of pull-aanvragen indienen in de GitHub-opslagplaats van de Linux-agent.

Hier volgen enkele overwegingen voor het gebruik van de Azure Linux-agent:

  • De Linux-agent wordt uitgebracht onder de Apache 2.0-licentie. Veel distributies bieden al .rpm- of .deb-pakketten voor de agent. U kunt deze pakketten eenvoudig installeren en bijwerken.
  • Voor de Azure Linux-agent is Python v2.6+ vereist.
  • De agent vereist ook de python-pyasn1 module. De meeste distributies bieden deze module als een afzonderlijk pakket dat moet worden geïnstalleerd.
  • In sommige gevallen is de Azure Linux-agent mogelijk niet compatibel met NetworkManager. Veel van de pakketten (.rpm of .deb) die door distributies worden geleverd, configureren NetworkManager als een conflict met het waagent pakket. In deze gevallen wordt NetworkManager door de agent verwijderd wanneer u het Linux-agentpakket installeert.
  • De Azure Linux-agent moet de minimaal ondersteunde versie hebben.

Notitie

Zorg ervoor dat de udf modules vfat zijn ingeschakeld. Als u de udf module uitschakelt, treedt er een inrichtingsfout op. Als u de vfat module uitschakelt, worden zowel inrichtings- als opstartfouten veroorzaakt. Cloud-init versie 21.2 of hoger kan VM's inrichten zonder UDF als beide voorwaarden bestaan:

  • U hebt de virtuele machine gemaakt met behulp van openbare SSH-sleutels en geen wachtwoorden.
  • U hebt geen aangepaste gegevens opgegeven.

Algemene Systeemvereisten voor Linux

  1. Wijzig de kernel-opstartlijn in GRUB of GRUB2 om de volgende parameters op te nemen, zodat alle consoleberichten naar de eerste seriële poort worden verzonden. Deze berichten kunnen helpen ondersteuning voor Azure bij het opsporen van fouten.

    GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    U wordt ook aangeraden de volgende parameters te verwijderen als deze bestaan:

    rhgb quiet crashkernel=auto
    

    Grafisch en stil opstarten is niet handig in een cloudomgeving, waarbij u alle logboeken naar de seriële poort wilt verzenden. U kunt de crashkernel geconfigureerde optie indien nodig laten, maar met deze parameter wordt de hoeveelheid beschikbaar geheugen in de VIRTUELE machine met ten minste 128 MB verminderd. Het verminderen van het beschikbare geheugen kan problematisch zijn voor kleinere VM-grootten.

  2. Nadat u klaar bent met bewerken /etc/default/grub, voert u de volgende opdracht uit om de GRUB-configuratie opnieuw te bouwen:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  3. Voeg de Hyper-V-module voor initramfs toe met behulp van dracut:

    cd /boot
    sudo cp initramfs-<kernel-version>.img <kernel-version>.img.bak
    sudo dracut -f -v initramfs-<kernel-version>.img <kernel-version> --add-drivers "hv_vmbus hv_netvsc hv_storvsc"
    sudo grub-mkconfig -o /boot/grub/grub.cfg
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    

    Voeg de Hyper-V-module voor initrd toe met behulp van mkinitramfs:

    cd /boot
    sudo cp initrd.img-<kernel-version>  initrd.img-<kernel-version>.bak
    sudo mkinitramfs -o initrd.img-<kernel-version> <kernel-version>  --with=hv_vmbus,hv_netvsc,hv_storvsc
    sudo update-grub
    
  4. Zorg ervoor dat de SSH-server is geïnstalleerd en geconfigureerd om te starten tijdens het opstarten. Deze configuratie is meestal de standaardinstelling.

  5. Installeer de Azure Linux-agent.

    De Azure Linux-agent is vereist voor het inrichten van een Linux-installatiekopieën in Azure. Veel distributies bieden de agent als een .rpm- of .deb-pakket. Het pakket wordt meestal genoemd WALinuxAgent of walinuxagent. U kunt de agent ook handmatig installeren door de stappen in de Handleiding voor De Linux-agent van Azure te volgen.

    Notitie

    Zorg ervoor dat de udf modules vfat zijn ingeschakeld. Als u ze verwijdert of uitschakelt, treedt er een inrichtings- of opstartfout op. Cloud-init versie 21.2 of hoger verwijdert de UDF-vereiste.

    Installeer de Azure Linux-agent, cloud-init en andere benodigde hulpprogramma's door een van de volgende opdrachten uit te voeren.

    Gebruik deze opdracht voor Red Hat of CentOS:

    sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    Gebruik deze opdracht voor Ubuntu/Debian:

    sudo apt install walinuxagent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    Gebruik deze opdracht voor SUSE:

    sudo zypper install python-azure-agent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    Schakel vervolgens de agent en cloud-init in voor alle distributies:

    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  6. Maak geen wisselruimte op de besturingssysteemschijf.

    U kunt de Azure Linux-agent of cloud-init gebruiken om wisselruimte te configureren via de lokale resourceschijf. Deze resourceschijf is gekoppeld aan de VIRTUELE machine na het inrichten in Azure. De lokale resourceschijf is een tijdelijke schijf en kan worden geleegd wanneer de vm ongedaan wordt gemaakt. In de volgende blokken ziet u hoe u deze swap configureert.

    Als u Azure Linux Agent kiest, wijzigt u de volgende parameters in /etc/waagent.conf:

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048    ## NOTE: Set this to your desired size.
    

    Als u cloud-init kiest, configureert u cloud-init om de inrichting af te handelen:

    sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-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
    

    Als u cloud-init wilt configureren voor het opmaken en maken van wisselruimte, hebt u twee opties:

    • Geef elke keer dat u een VIRTUELE customdatamachine maakt door in een cloud-init-configuratie. We raden deze methode aan.
    • Gebruik een cloud-init-instructie in de installatiekopieën om wisselruimte te configureren telkens wanneer de virtuele machine wordt gemaakt.

    Maak een CFG-bestand om wisselruimte te configureren met behulp van cloud-init:

    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
    
  7. Configureer cloud-init voor het afhandelen van de inrichting:

    1. Configureren waagent voor cloud-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
      

      Als u een specifieke virtuele machine migreert en geen gegeneraliseerde installatiekopieën wilt maken, stelt Provisioning.Agent=disabled u deze in de configuratie /etc/waagent.conf in.

    2. Koppels configureren:

      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
      
      
    3. Configureer de Azure-gegevensbron:

      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
      
    4. Verwijder het bestaande wisselbestand als u er een hebt geconfigureerd:

      if [[ -f /mnt/resource/swapfile ]]; then
      echo "Removing swapfile" #RHEL uses a swap file by default
      swapoff /mnt/resource/swapfile
      rm /mnt/resource/swapfile -f
      fi
      
    5. Cloud-init-logboekregistratie configureren:

      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
      
  8. Voer de volgende opdrachten uit om de inrichting van de virtuele machine ongedaan te maken.

    Let op

    Als u een specifieke virtuele machine migreert en geen gegeneraliseerde installatiekopieën wilt maken, slaat u de inrichtingsstap over. Als u de opdracht waagent -force -deprovision+user uitvoert, wordt de bronmachine onbruikbaar. Deze stap is alleen bedoeld om een gegeneraliseerde installatiekopieën te maken.

    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
    

    In VirtualBox ziet u mogelijk een foutbericht nadat u deze opdracht hebt [Errno 5] Input/output erroruitgevoerdwaagent -force -deprovision. Dit foutbericht is niet kritiek en u kunt dit negeren.

  9. Sluit de virtuele machine af en upload de VHD naar Azure.

Volgende stappen

Een Virtuele Linux-machine maken op basis van een aangepaste schijf met behulp van de Azure CLI