Informatie voor door de community ondersteunde en niet-goedgekeurde distributies

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

De SLA van het Azure-platform is alleen van toepassing op virtuele machines waarop het Linux-besturingssysteem wordt uitgevoerd wanneer een van de goedgekeurde distributies wordt gebruikt. Voor deze goedgekeurde distributies zijn vooraf geconfigureerde Linux-installatiekopieën beschikbaar in de Azure Marketplace.

Alle andere, niet-Azure Marketplace distributies die worden uitgevoerd in Azure, hebben een aantal vereisten. Dit artikel kan niet volledig zijn, omdat elke distributie anders is. Zelfs als u aan alle onderstaande criteria voldoet, moet u mogelijk uw Linux-systeem aanzienlijk aanpassen om het goed te laten werken.

Dit artikel is gericht op algemene richtlijnen voor het uitvoeren van uw Linux-distributie in Azure.

Algemene opmerkingen bij de installatie van Linux

  1. De Hyper-V-indeling voor virtuele harde schijven (VHDX) wordt niet ondersteund in 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 standaardwaarde (dynamisch toegewezen) bij het maken van de schijf.

  2. Azure ondersteunt Virtuele machines van Gen1 (BIOS-opstart) & Gen2 (UEFI-opstart).

  3. De maximaal toegestane grootte voor de VHD is 1023 GB.

  4. Wanneer u het Linux-systeem installeert, raden we u aan standaardpartities te gebruiken in plaats van Logical Volume Manager (LVM), wat de standaardinstelling is voor veel installaties. Als u standaardpartities gebruikt, voorkomt u LVM-naamconflicten met gekloonde VM's, met name als er ooit een besturingssysteemschijf is gekoppeld aan een andere identieke VM voor probleemoplossing. LVM of RAID kan worden gebruikt op gegevensschijven.

  5. Kernelondersteuning voor het koppelen van UDF-bestandssystemen is noodzakelijk. Bij de eerste opstart in Azure wordt de inrichtingsconfiguratie doorgegeven aan de Linux-VM met behulp van media met UDF-indeling die zijn gekoppeld aan de gast. De Azure Linux-agent moet het UDF-bestandssysteem koppelen om de configuratie te lezen en de VM in te richten.

  6. Linux-kernelversies ouder dan 2.6.37 bieden geen ondersteuning voor NUMA op Hyper-V met grotere VM's. Dit probleem is voornamelijk van invloed op oudere distributies met behulp van de upstream Red Hat 2.6.32-kernel en 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 die ouder zijn dan 2.6.32-504, moeten de opstartparameter numa=off instellen op de kernelopdrachtregel in grub.conf. Zie Red Hat KB 436883 voor meer informatie.

  7. Configureer geen wisselpartitie op de besturingssysteemschijf. De Linux-agent kan worden geconfigureerd om een wisselbestand te maken op de tijdelijke resourceschijf, zoals beschreven in de volgende stappen.

  8. Alle VHD's in Azure moeten een virtuele grootte hebben die is uitgelijnd op 1 MB (1024 × 1024 bytes). Bij het converteren 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 beschreven in de volgende stappen.

  9. Gebruik de meest recente distributieversie, pakketten en software.

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

Kernelmodules installeren zonder Hyper-V

Azure wordt uitgevoerd op de Hyper-V-hypervisor. Linux vereist dus dat bepaalde kernelmodules in Azure worden uitgevoerd. 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 ramdisk (initrd of initramfs), tenzij de VM detecteert dat deze wordt uitgevoerd in een Hyper-V-omgeving. Wanneer u een ander virtualisatiesysteem (zoals VirtualBox, KVM, enzovoort) gebruikt om uw Linux-installatiekopieën voor te bereiden, moet u mogelijk de initrd opnieuw opbouwen zodat ten minste de hv_vmbus en hv_storvsc kernelmodules beschikbaar zijn op de eerste ramdisk. Dit bekende probleem geldt voor systemen die zijn gebaseerd op de upstream Red Hat-distributie, en mogelijk andere.

Het mechanisme voor het opnieuw opbouwen van de initrd- of initramfs-installatiekopieën kan variëren, afhankelijk van de distributie. Raadpleeg de documentatie of ondersteuning van uw distributie voor de juiste procedure. Hier volgt een voorbeeld voor het opnieuw opbouwen van de 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 de initrd opnieuw op met de hv_vmbus kernelmodules en hv_storvsc :

    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 uitgelijnd op 1 MB. Normaal gesproken worden VHD's die zijn gemaakt met Hyper-V correct uitgelijnd. Als de VHD niet juist is uitgelijnd, wordt er mogelijk een foutbericht weergegeven dat vergelijkbaar is met het volgende wanneer u probeert een installatiekopieën van uw VHD te maken.

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 het formaat van de VM met behulp van de Hyper-V Manager-console of de PowerShell-cmdlet Resize-VHD . Als u niet in een Windows-omgeving werkt, raden we u aan om te converteren qemu-img (indien nodig) en het formaat van de VHD te wijzigen.

Notitie

Er is een bekende fout in qemu-img versies >=2.2.1 die resulteert in een onjuist geformatteerde VHD. Het probleem is opgelost in QEMU 2.6. U wordt aangeraden 2.2.0 of lager of 2.6 of hoger te gebruiken qemu-img .

  1. Als u de grootte van de VHD rechtstreeks wijzigt met behulp van hulpprogramma's zoals qemu-img of vbox-manage , kan dit leiden tot een niet-opstartbare VHD. U wordt aangeraden eerst de VHD te converteren naar een RAW-schijfinstallatiekopieën. Als de VM-installatiekopieën zijn gemaakt als een RAW-schijfinstallatiekopieën (de standaardinstelling voor sommige hypervisors, zoals KVM), kunt u deze stap overslaan.

    qemu-img convert -f vpc -O raw MyLinuxVM.vhd MyLinuxVM.raw
    
  2. Bereken de vereiste grootte van de schijfkopie, zodat de virtuele grootte is uitgelijnd op 1 MB. Het volgende Bash Shell-script gebruikt qemu-img info om de virtuele grootte van de schijfkopieë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 de bovenstaande set.

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

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

    Of verwijder de force_size optie met qemu-versies vóór 2.6.

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

Vereisten voor Linux-kernel

De LIS-stuurprogramma's (Linux Integration Services) 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. Deze stuurprogramma's worden voortdurend bijgewerkt in de upstream-kernel met nieuwe oplossingen en functies, dus wanneer mogelijk raden we u aan een goedgekeurde distributie uit te voeren die deze fixes en updates bevat.

Als u een variant van Red Hat Enterprise Linux-versies 6.0 tot en met 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 en zijn er dus 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 de LIS-stuurprogramma's regelmatig backporteren van de upstream-kernel naar uw aangepaste kernel. Zelfs als u al een relatief recente kernelversie uitvoert, raden we u ten zeerste aan om upstream-oplossingen in de LIS-stuurprogramma's bij te houden en deze indien nodig te backporteren. De locaties van de bronbestanden van het LIS-stuurprogramma worden opgegeven in het MAINTAINERS-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 volgende patches moeten worden opgenomen in de kernel. Deze lijst kan niet volledig zijn voor alle distributies.

De Azure Linux-agent

De Azure Linux-agentwaagent richt een virtuele Linux-machine in Azure in. U kunt de nieuwste versie, bestandsproblemen of pull-aanvragen indienen bij de GitHub-opslagplaats van de Linux-agent.

  • De Linux-agent wordt uitgebracht onder de Apache 2.0-licentie. Veel distributies bieden al RPM- of .deb-pakketten voor de agent en deze pakketten kunnen eenvoudig worden geïnstalleerd en bijgewerkt.
  • Voor de Azure Linux-agent is Python v2.6+ vereist.
  • Voor de agent is ook de module python-pyasn1 vereist. 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 RPM/deb-pakketten die door distributies worden geleverd, configureren NetworkManager als een conflict met het waagent-pakket. In deze gevallen wordt NetworkManager verwijderd wanneer u het Linux-agentpakket installeert.
  • De Azure Linux-agent moet op of boven de minimaal ondersteunde versie zijn.

Notitie

Zorg ervoor dat de modules udf en vfat zijn ingeschakeld. Het uitschakelen van de UDF-module veroorzaakt een inrichtingsfout. Het uitschakelen van de VFAT-module veroorzaakt zowel inrichtings- als opstartfouten. Cloud-init >= 21.2 kan VM's inrichten zonder UDF als: 1) de VM is gemaakt met openbare SSH-sleutels en niet met een wachtwoord en 2) er geen aangepaste gegevens zijn opgegeven.

Algemene Linux-systeemvereisten

  1. Wijzig de kernel-opstartregel 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 ondersteuning voor Azure helpen bij het opsporen van eventuele problemen.

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

    We raden u ook aan de volgende parameters te verwijderen als deze bestaan.

    rhgb quiet crashkernel=auto
    

    Grafisch en stil opstarten is niet nuttig in een cloudomgeving, waar alle logboeken naar de seriële poort worden verzonden. De crashkernel optie kan indien nodig geconfigureerd blijven, maar houd er rekening mee dat deze parameter de hoeveelheid beschikbaar geheugen in de VM met ten minste 128 MB vermindert, wat problematisch kan zijn voor kleinere VM-grootten.

  2. Nadat u klaar bent met het bewerken van /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 Hyper-V-modules toe, zowel initrd- als initramfs-instructies (Dracut).

  4. Initrd of initramfs Initramfs opnieuw opbouwen

    cp /boot/initramfs-$(uname -r).img /boot/initramfs-[latest kernel version ].img.bak 
    dracut -f -v /boot/initramfs-[latest kernel version ].img  [depending on the version of grub] 
    grub-mkconfig -o /boot/grub/grub.cfg 
    grub2-mkconfig -o /boot/grub2/grub.cfg 
    

    Initrd

    mv /boot/[initrd kernel] /boot/[initrd kernel]-old 
    mkinitrd /boot/initrd.img-[initrd kernel]-generic /boot/[initrd kernel]-generic-old 
    update-initramfs -c -k [initrd kernel] 
    update-grub 
    
  5. Zorg ervoor dat de SSH-server is geïnstalleerd en geconfigureerd om te starten tijdens het opstarten. Deze configuratie is meestal de standaardconfiguratie.

  6. Installeer de Azure Linux-agent. De Azure Linux-agent is vereist voor het inrichten van een Linux-installatiekopie in Azure. Veel distributies bieden de agent als een RPM- of .deb-pakket (het pakket wordt meestal WALinuxAgent of walinuxagent genoemd). De agent kan ook handmatig worden geïnstalleerd door de stappen in de Handleiding voor Linux-agents te volgen.

    Installeer de Azure Linux-agent, cloud-init en andere benodigde hulpprogramma's door de volgende opdracht uit te voeren:

    Redhat/Centos

    sudo yum install -y [waagent] cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    Ubuntu/Debian

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

    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 met behulp van:

    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  7. Maak geen wisselruimte op de besturingssysteemschijf. De Azure Linux-agent kan automatisch wisselruimte configureren met behulp van de lokale resourceschijf die is gekoppeld aan de VM na het inrichten in Azure. De lokale resourceschijf is een tijdelijke schijf en kan worden leeggehaald wanneer de inrichting van de virtuele machine ongedaan wordt gemaakt. Nadat u de Azure Linux-agent hebt geïnstalleerd, wijzigt u indien nodig 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.
    
  8. Cloud-init configureren voor het afhandelen van de inrichting:

    1. Waagent configureren voor cloud-init:
      sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf
      sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
      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 u in Provisioning.Agent=disabled de /etc/waagent.conf configuratie in.
    2. Koppels configureren:
      echo "Adding mounts and disk_setup to init stage"
      sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
      sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
      sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
      sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
      
    3. Azure-gegevensbron configureren:
      echo "Allow only Azure datasource, disable fetching network setting via IMDS"
      cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF
      datasource_list: [ Azure ]
      datasource:
         Azure:
           apply_network_config: False
      EOF
      
    4. Indien geconfigureerd, verwijdert u het bestaande wisselbestand:
      if [[ -f /mnt/resource/swapfile ]]; then
      echo "Removing swapfile" #RHEL uses a swapfile by defaul
      swapoff /mnt/resource/swapfile
      rm /mnt/resource/swapfile -f
      fi
      
  9. Cloud-init-logboekregistratie configureren:

    echo "Add console log file"
    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
    
  10. Wisselconfiguratie. Maak geen wisselruimte op de besturingssysteemschijf. Voorheen configureerde de Azure Linux-agent automatisch wisselruimte met behulp van de lokale resourceschijf die is gekoppeld aan de virtuele machine nadat de virtuele machine is ingericht in Azure. Dit wordt nu echter afgehandeld door cloud-init. U moet de Linux-agent niet gebruiken om de resourceschijf te formatteren en het wisselbestand te maken. Wijzig de volgende parameters in /etc/waagent.conf op de juiste manier:

    ResourceDisk.Format=n
    ResourceDisk.EnableSwap=n
    

    Als u wilt koppelen, formatteren en wisselen wilt maken, kunt u het volgende doen: 1. Geef dit door als een cloud-init-configuratie telkens wanneer u een virtuele machine maakt via customdata. Dit is de aanbevolen methode. 2. Gebruik een cloud-init-instructie die is ingebouwd in de installatiekopieën die dit doen telkens wanneer de virtuele machine wordt gemaakt.

           echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
           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"]
             - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
           EOF
    
         ```
    
    
  11. Inrichting ongedaan maken.

    Waarschuwing

    Als u een specifieke virtuele machine migreert en geen gegeneraliseerde installatiekopieën wilt maken, slaat u de stap voor het ongedaan maken van de inrichting 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.

    Voer de volgende opdrachten uit om de inrichting van de virtuele machine ongedaan te maken.

    # sudo rm -f /var/log/waagent.log
    # sudo cloud-init clean
    # waagent -force -deprovision+user
    # rm -f ~/.bash_history
    # export HISTSIZE=0
    # logout
    

    Notitie

    In Virtualbox ziet u mogelijk de volgende fout na het uitvoeren waagent -force -deprovision , met de tekst [Errno 5] Input/output error. Dit foutbericht is niet kritiek en kan worden genegeerd.

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

Volgende stappen

Maak een Virtuele Linux-machine op basis van een aangepaste schijf met de Azure CLI.