Linux voorbereiden voor imaging in Azure
Let op
Dit artikel verwijst naar CentOS, een Linux-distributie met de EOL-status (End Of Life). 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:
- Goedgekeurde Linux-distributies in Azure
- Ondersteuning voor Linux- en opensource-technologie in Azure
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:
Maak een back-up van de bestaande initrd-installatiekopieën:
cd /boot sudo cp initrd-`uname -r`.img initrd-`uname -r`.img.bak
Bouw initrd opnieuw met behulp van de
hv_vmbus
modules enhv_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.
Het formaat van de VHD rechtstreeks wijzigen met behulp van hulpprogramma's zoals
qemu-img
ofvbox-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
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"
Wijzig het formaat van de onbewerkte schijf met behulp van
$rounded_size
:sudo qemu-img resize MyLinuxVM.raw $rounded_size
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.
- ata_piix: schijven standaard uitstellen naar de Hyper-V-stuurprogramma's
- storvsc: Account voor in-transit pakketten in het PAD RESET
- storvsc: vermijd het gebruik van WRITE_SAME
- storvsc: WRITE SAME uitschakelen voor RAID- en virtuele hostadapterstuurprogramma's
- storvsc: fix null-aanwijzer
- storvsc: ringbufferfouten kunnen leiden tot I/O-bevriezen
- scsi_sysfs: bescherming tegen dubbele uitvoering van __scsi_remove_device
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
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.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
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
Zorg ervoor dat de SSH-server is geïnstalleerd en geconfigureerd om te starten tijdens het opstarten. Deze configuratie is meestal de standaardinstelling.
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
ofwalinuxagent
. 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
modulesvfat
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
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-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 cloud-init wilt configureren voor het opmaken en maken van wisselruimte, hebt u twee opties:
- Geef elke keer dat u een VIRTUELE
customdata
machine 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:
echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' | sudo tee -a /etc/systemd/system.conf 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/resource"] - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"] EOF
- Geef elke keer dat u een VIRTUELE
Configureer cloud-init voor het afhandelen van de inrichting:
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.Koppels configureren:
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
Configureer de Azure-gegevensbron:
echo "Allow only Azure datasource, disable fetching network setting via IMDS" cat << EOF | sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg datasource_list: [ Azure ] datasource: Azure: apply_network_config: False EOF
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
Cloud-init-logboekregistratie configureren:
echo "Add console log file" cat << EOF | sudo tee -a /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
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 error
uitgevoerdwaagent -force -deprovision
. Dit foutbericht is niet kritiek en u kunt dit negeren.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