Příprava Linuxu na vytváření imisí v Azure

Upozornění

Tento článek odkazuje na CentOS, linuxovou distribuci, která se blíží stavu 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:

  1. Zálohujte existující image initrd:

    cd /boot
    sudo cp initrd-`uname -r`.img  initrd-`uname -r`.img.bak
    
  2. Znovu sestavte initrd pomocí hv_vmbus modulů jádra a hv_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ší.

  1. Změna velikosti virtuálního pevného disku přímo pomocí nástrojů, jako qemu-img je například nebo vbox-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
    
  2. 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"
    
  3. Změňte velikost nezpracovaného disku pomocí $rounded_size:

    sudo qemu-img resize MyLinuxVM.raw $rounded_size
    
  4. 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í.

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

  1. 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čůch

  2. Po 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
    
  3. 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
    
  4. 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í.

  5. 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 nebo walinuxagent. 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 a vfat 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
    
  6. 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-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
    

    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:

    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. Nakonfigurujte cloud-init pro zpracování zřizování:

    1. 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 .

    2. Konfigurace připojení:

      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. Konfigurace zdroje dat Azure:

      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. 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
      
    5. Konfigurace protokolování cloud-init:

      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. 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.

  9. 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