Příprava Linuxu na vytváření imisí v Azure
Upozornění
Tento článek odkazuje na CentOS, což je linuxová distribuce se stavem Konec životnosti (EOL). Zvažte své použití a odpovídajícím způsobem naplánujte. Další informace najdete v doprovodných materiálech CentOS End Of Life.
Platí pro: ✔️ Flexibilní škálovací sady virtuálních počítačů s Linuxem ✔️
Smlouva o úrovni služeb (SLA) platformy Azure se vztahuje na virtuální počítače, na kterých běží operační systém Linux, jenom když používáte některou ze schválených distribucí. Pro schválené distribuce poskytuje Azure Marketplace předkonfigurované image Linuxu. Další informace naleznete v tématu:
Všechny ostatní distribuce běžící v Azure, včetně komunitních a nepodporovaných distribucí, mají určité požadavky.
Tento článek se zaměřuje na obecné pokyny pro spuštění distribuce Linuxu v Azure. Tento článek nemůže být vyčerpávající, protože každá distribuce se liší. I když splňujete všechna kritéria, která tento článek popisuje, možná budete muset výrazně upravit systém Linux, aby mohl správně běžet.
Obecné poznámky k instalaci Linuxu
Azure nepodporuje formát virtuálního pevného disku Hyper-V (VHDX). podpora Azure pouze pevný virtuální pevný disk. Disk můžete převést na formát VHD pomocí Správce technologie Hyper-V nebo rutiny Convert-VHD . Pokud používáte VirtualBox, vyberte při vytváření disku pevnou velikost místo výchozí (dynamicky přidělené).
podpora Azure s Gen1 (spouštění systému BIOS) a virtuální počítače Gen2 (spouštění UEFI).
Modul jádra virtuální tabulky přidělování souborů (VFAT) musí být v jádru povolený.
Maximální povolená velikost virtuálního pevného disku je 1 023 GB.
Při instalaci systému Linux doporučujeme místo Správce logických svazků (LVM) používat standardní oddíly. LVM je výchozím nastavením pro mnoho instalací.
Použití standardních oddílů zabrání konfliktům názvů LVM s klonovanými virtuálními počítači, zejména pokud je disk s operačním systémem někdy připojený k jinému identickému virtuálnímu počítači pro řešení potíží. LvM nebo RAID můžete použít na datových discích.
Je nutná podpora jádra pro připojení uživatelem definovaných systémů souborů (UDF). Při prvním spuštění v Azure se konfigurace zřizování předá virtuálnímu počítači s Linuxem prostřednictvím média formátovaného uživatelem definovaného uživatelem, které jsou připojené k hostu. Agent Azure Linux musí připojit systém souborů UDF ke čtení konfigurace a zřízení virtuálního počítače.
Verze jádra Linuxu starší než 2.6.37 nepodporují ne uniformní přístup k paměti (NUMA) v Hyper-V s většími velikostmi virtuálních počítačů. Tento problém se týká především starších distribucí, které používají upstreamové jádro Red Hat 2.6.32. Opravili jsme ho v Red Hat Enterprise Linuxu (RHEL) 6.6 (jádro-2.6.32-504).
Systémy, na kterých běží vlastní jádra starší než 2.6.37 nebo jádra založená na RHEL starších než 2.6.32-504, musí nastavit spouštěcí parametr
numa=off
na příkazovém řádku jádra v grub.conf. Další informace naleznete v článku Red Hat KB 436883.Nenakonfigurujte prohození oddílu na disku s operačním systémem. Agenta pro Linux můžete nakonfigurovat tak, aby na dočasném disku prostředku vytvořil prohozený soubor, jak je popsáno dále v tomto článku.
Všechny virtuální pevné disky v Azure musí mít virtuální velikost zarovnanou na 1 MB (1024 × 1024 bajtů). Při převodu z nezpracovaného disku na virtuální pevný disk se ujistěte, že před převodem je velikost nezpracovaného disku násobkem 1 MB, jak je popsáno dále v tomto článku.
Používejte nejaktuálnější distribuční verzi, balíčky a software.
Odeberte uživatele a systémové účty, veřejné klíče, citlivá data, nepotřebný software a aplikace.
Poznámka:
Cloud-init verze 21.2 nebo novější odebere požadavek na UDF. udf
Bez povolení modulu se ale disk CD-ROM během zřizování nepřipevní, což zabrání použití vlastních dat. Alternativním řešením je použít uživatelská data. Na rozdíl od vlastních dat se ale uživatelská data nešifrují. Další informace najdete v tématu Formáty dat uživatele v dokumentaci ke cloud-init.
Instalace modulů jádra bez Technologie Hyper-V
Azure běží na hypervisoru Hyper-V, takže Linux vyžaduje, aby se v Azure spouštěly určité moduly jádra. Pokud máte virtuální počítač vytvořený mimo Hyper-V, nemusí instalační programy pro Linux do počátečního disku RAM (initrd nebo initramfs) zahrnovat ovladače pro Hyper-V, pokud virtuální počítač nezjistí, že je spuštěný v prostředí Hyper-V.
Pokud k přípravě image Linuxu používáte jiný virtualizační systém (například VirtualBox nebo KVM), možná budete muset znovu sestavit inicializační moduly, aby byly na počátečním disku RAM k dispozici alespoň hv_vmbus
moduly jádra hv_storvsc
. Tento známý problém se týká systémů založených na nadřazené distribuci Red Hatu a případně i u jiných.
Mechanismus opětovného sestavení inicializační image nebo image initramfs se může lišit v závislosti na distribuci. Správné postupy najdete v dokumentaci nebo podpoře vaší distribuce. Tady je jeden příklad opětovného sestavení initrd pomocí mkinitrd
nástroje:
Zálohujte existující image initrd:
cd /boot sudo cp initrd-`uname -r`.img initrd-`uname -r`.img.bak
Znovu sestavte initrd pomocí
hv_vmbus
modulů jádra ahv_storvsc
modulů jádra:sudo mkinitrd --preload=hv_storvsc --preload=hv_vmbus -v -f initrd-`uname -r`.img `uname -r`
Změna velikosti virtuálních pevných disků
Image virtuálního pevného disku v Azure musí mít virtuální velikost zarovnanou na 1 MB. Virtuální pevné disky vytvořené prostřednictvím technologie Hyper-V jsou obvykle správně zarovnané. Pokud virtuální pevný disk není správně zarovnaný, může se při pokusu o vytvoření image z virtuálního pevného disku zobrazit chybová zpráva podobná následujícímu příkladu:
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).
V takovém případě změňte velikost virtuálního počítače pomocí konzoly Správce technologie Hyper-V nebo rutiny PowerShellu Pro změnu velikosti virtuálního pevného disku . Pokud nepoužíváte prostředí Windows, doporučujeme použít qemu-img
k převodu (v případě potřeby) a změně velikosti virtuálního pevného disku.
Poznámka:
V qemu-img pro QEMU verze 2.2.1 a některých novějších verzích existuje známá chyba, která vede k nesprávnému formátování virtuálního pevného disku. Problém byl opravený v QEMU 2.6. Doporučujeme použít verzi 2.2.0 nebo starší nebo verzi 2.6 nebo novější.
Změna velikosti virtuálního pevného disku přímo pomocí nástrojů, jako
qemu-img
je například nebovbox-manage
může vést k nebooovatelnému virtuálnímu pevného disku. Doporučujeme nejprve převést virtuální pevný disk na image nezpracovaného disku pomocí následujícího kódu.Pokud byla image virtuálního počítače vytvořená jako image nezpracovaného disku, můžete tento krok přeskočit. Vytvoření image virtuálního počítače jako image nezpracovaného disku je výchozí v některých hypervisorech, jako je například KVM.
sudo qemu-img convert -f vpc -O raw MyLinuxVM.vhd MyLinuxVM.raw
Vypočítejte požadovanou velikost image disku tak, aby byla virtuální velikost zarovnaná na 1 MB. Následující skript prostředí Bash používá
qemu-img info
k určení virtuální velikosti image disku a pak vypočítá velikost na dalších 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"
Změňte velikost nezpracovaného disku pomocí
$rounded_size
:sudo qemu-img resize MyLinuxVM.raw $rounded_size
Převeďte nezpracovaný disk zpět na virtuální pevný disk s pevnou velikostí:
sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc MyLinuxVM.raw MyLinuxVM.vhd
Nebo s verzemi QEMU před 2.6 odeberte
force_size
možnost:sudo qemu-img convert -f raw -o subformat=fixed -O vpc MyLinuxVM.raw MyLinuxVM.vhd
Požadavky na jádro Linuxu
Ovladače linuxových integračních služeb (LIS) pro Hyper-V a Azure se přispívají přímo k upstreamovém jádru Linuxu. Řada distribucí, které obsahují nedávnou verzi jádra Linuxu (například 3.x), mají tyto ovladače již k dispozici nebo jinak poskytují backportované verze těchto ovladačů s jejich jádry.
Ovladače LIS se neustále aktualizují v upstreamovém jádru novými opravami a funkcemi. Pokud je to možné, doporučujeme spustit schválenou distribuci , která obsahuje tyto opravy a aktualizace.
Pokud používáte variantu RHEL verze 6.0 až 6.3, musíte nainstalovat nejnovější ovladače LIS pro Hyper-V. Počínaje RHEL 6.4+ (a deriváty) jsou ovladače LIS již součástí jádra, takže nepotřebujete další instalační balíčky.
Pokud se vyžaduje vlastní jádro, doporučujeme nejnovější verzi jádra (například 3.8+). U distribucí nebo dodavatelů, kteří si udržují vlastní jádro, musíte pravidelně vracet ovladače LIS z upstreamového jádra do vlastního jádra.
I když už používáte relativně nedávnou verzi jádra, důrazně doporučujeme sledovat všechny upstreamové opravy v ovladačích LIS a podle potřeby je vyportovat zpět. Umístění zdrojových souborů ovladače LIS jsou uvedena v souboru MAINTAINERS ve zdrojovém stromu jádra Linuxu:
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/
Aktivní jádro virtuálního počítače musí obsahovat následující opravy. Tento seznam nelze dokončit pro všechna rozdělení.
- ata_piix: Odložit disky na ovladače Hyper-V ve výchozím nastavení
- storvsc: Účet pro přenášené pakety v cestě RESET
- storvsc: vyhněte se používání WRITE_SAME
- storvsc: Zakázání funkce WRITE SAME pro ovladače raid a virtuálního hostitelského adaptéru
- storvsc: Oprava dereference ukazatele NULL
- storvsc: Selhání vyrovnávací paměti okruhu můžou vést k zablokování vstupně-výstupních operací
- scsi_sysfs: Ochrana před dvojitým spuštěním __scsi_remove_device
Azure Linux Agent
Agent Azure Linux (waagent
) zřídí virtuální počítač s Linuxem v Azure. Nejnovější verzi, nahlášení problémů nebo odeslání žádostí o přijetí změn můžete získat v úložišti GitHub agenta Linuxu.
Tady je několik aspektů použití agenta Azure Linuxu:
- Agent Pro Linux se vydává pod licencí Apache 2.0. Mnoho distribucí již pro agenta poskytuje balíčky .rpm nebo .deb. Tyto balíčky můžete snadno nainstalovat a aktualizovat.
- Agent Azure Linux vyžaduje Python verze 2.6 nebo novější.
- Agent také vyžaduje
python-pyasn1
modul. Většina distribucí poskytuje tento modul jako samostatný balíček, který se má nainstalovat. - V některých případech nemusí být agent Azure Linux kompatibilní se správcem NetworkManager. Mnoho balíčků (.rpm nebo .deb) poskytovaných distribucemi konfiguruje NetworkManager jako konflikt s balíčkem
waagent
. V těchto případech agent odinstaluje NetworkManager při instalaci balíčku agenta Pro Linux. - Agent Azure Linux musí mít minimální podporovanou verzi nebo vyšší.
Poznámka:
Ujistěte se, udf
že jsou povolené moduly a vfat
moduly. Zakázání udf
modulu způsobí selhání zřizování. Zakázání vfat
modulu způsobí selhání zřizování i spouštění. Cloud-init verze 21.2 nebo novější může zřídit virtuální počítače bez nutnosti definované uživatelem, pokud existují obě tyto podmínky:
- Virtuální počítač jste vytvořili pomocí veřejných klíčů SSH a ne hesel.
- Nezadali jste žádná vlastní data.
Obecné požadavky na systém Linux
Upravte spouštěcí řádek jádra v GRUB nebo GRUB2 tak, aby obsahoval následující parametry, aby se všechny zprávy konzoly odesílaly na první sériový port. Tyto zprávy můžou pomoct podpora Azure s laděním jakýchkoli problémů.
GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
Pokud existují, doporučujeme odebrat také následující parametry:
rhgb quiet crashkernel=auto
Grafické a tiché spouštění není užitečné v cloudovém prostředí, kde chcete všechny protokoly odesílat na sériový port. V případě potřeby můžete tuto možnost ponechat
crashkernel
nakonfigurovanou, ale tento parametr snižuje množství dostupné paměti na virtuálním počítači alespoň o 128 MB. Snížení dostupné paměti může být problematické pro menší velikosti virtuálníchpočítačůchPo dokončení úprav /etc/default/grub spusťte následující příkaz a znovu sestavte konfiguraci GRUB:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Přidejte modul Hyper-V pro initramfs pomocí
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
Přidejte modul Hyper-V pro initrd pomocí
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
Ujistěte se, že je server SSH nainstalovaný a nakonfigurovaný tak, aby se spustil při spuštění. Tato konfigurace je obvykle výchozí.
Nainstalujte agenta Azure Linux.
Pro zřízení image Linuxu v Azure se vyžaduje agent Azure Pro Linux. Mnoho distribucí poskytuje agenta jako balíček .rpm nebo .deb. Balíček je obvykle volána
WALinuxAgent
nebowalinuxagent
. Agenta můžete také nainstalovat ručně pomocí kroků v průvodci agentem Azure Linux.Poznámka:
Ujistěte se,
udf
že jsou povolené moduly avfat
moduly. Odebrání nebo zakázání způsobí selhání zřizování nebo spuštění. Cloud-init verze 21.2 nebo novější odebere požadavek na UDF.Spuštěním jednoho z následujících příkazů nainstalujte agenta Azure Linux, cloud-init a další nezbytné nástroje.
Tento příkaz použijte pro Red Hat nebo CentOS:
sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
Tento příkaz použijte pro Ubuntu/Debian:
sudo apt install walinuxagent cloud-init cloud-utils-growpart gdisk hyperv-daemons
Pro SUSE použijte tento příkaz:
sudo zypper install python-azure-agent cloud-init cloud-utils-growpart gdisk hyperv-daemons
Pak povolte agenta a cloud-init ve všech distribucích:
sudo systemctl enable waagent.service sudo systemctl enable cloud-init.service
Nevytvávejte místo prohození na disku s operačním systémem.
Pomocí agenta Azure Linux nebo cloud-init můžete nakonfigurovat prohození místa přes místní disk prostředku. Tento disk prostředku se po zřízení v Azure připojí k virtuálnímu počítači. Místní disk prostředku je dočasný disk a může se vyprázdnit při zrušení zřízení virtuálního počítače. Následující bloky ukazují, jak tuto prohození nakonfigurovat.
Pokud zvolíte agenta Azure Linux, upravte v souboru /etc/waagent.conf následující parametry:
ResourceDisk.Format=y ResourceDisk.Filesystem=ext4 ResourceDisk.MountPoint=/mnt/resource ResourceDisk.EnableSwap=y ResourceDisk.SwapSizeMB=2048 ## NOTE: Set this to your desired size.
Pokud zvolíte cloud-init, nakonfigurujte cloud-init pro zpracování zřizování:
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
Pokud chcete nakonfigurovat cloud-init pro formátování a vytvoření prohození prostoru, máte dvě možnosti:
- Předání konfigurace cloud-init pokaždé, když vytvoříte virtuální počítač prostřednictvím
customdata
. Tuto metodu doporučujeme. - Ke konfiguraci prohození prostoru při každém vytvoření virtuálního počítače použijte direktivu cloud-init v imagi.
Vytvořte soubor .cfg pro konfiguraci prohození prostoru pomocí 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
- Předání konfigurace cloud-init pokaždé, když vytvoříte virtuální počítač prostřednictvím
Nakonfigurujte cloud-init pro zpracování zřizování:
Konfigurace
waagent
pro 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
Pokud migrujete konkrétní virtuální počítač a nechcete vytvořit generalizovanou image, nastavte
Provisioning.Agent=disabled
ji v konfiguraci /etc/waagent.conf .Konfigurace připojení:
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
Konfigurace zdroje dat Azure:
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
Pokud jste nakonfigurovali existující prohození souboru, odeberte ho:
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
Konfigurace protokolování cloud-init:
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
Spuštěním následujících příkazů zrušte zřízení virtuálního počítače.
Upozornění
Pokud migrujete konkrétní virtuální počítač a nechcete vytvořit generalizovanou image, přeskočte krok zrušení zřízení. Spuštěním příkazu
waagent -force -deprovision+user
se vykreslí nepoužitelný zdrojový počítač. Tento krok je určený pouze k vytvoření generalizované image.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
Ve Službě VirtualBox se může zobrazit chybová zpráva po spuštění
waagent -force -deprovision
příkazu[Errno 5] Input/output error
. Tato chybová zpráva není kritická a můžete ji ignorovat.Vypněte virtuální počítač a nahrajte virtuální pevný disk do Azure.
Další kroky
Vytvoření virtuálního počítače s Linuxem z vlastního disku pomocí Azure CLI