Linux előkészítése az Azure-beli képalkotáshoz

Figyelemfelhívás

Ez a cikk a CentOS-ra, egy olyan Linux-disztribúcióra hivatkozik, amely közel áll az élettartam (EOL) állapotához. Fontolja meg a használatát, és ennek megfelelően tervezze meg. További információ: CentOS End Of Life útmutató.

A következőkre vonatkozik: ✔️ Linux rendszerű virtuális gépek rugalmas méretezési ✔️ csoportjai

Az Azure platform szolgáltatásiszint-szerződése (SLA) csak a Linux operációs rendszert futtató virtuális gépekre vonatkozik, ha ön az egyik támogatott disztribúciót használja. A támogatott disztribúciókhoz az Azure Marketplace előre konfigurált Linux-rendszerképeket biztosít. További információkért lásd:

Az Azure-ban futó összes többi disztribúció, beleértve a közösség által támogatott és a nem támogatott disztribúciókat is, előfeltételekkel rendelkezik.

Ez a cikk a Linux-disztribúció Azure-on való futtatásának általános útmutatásával foglalkozik. Ez a cikk nem lehet átfogó, mert minden disztribúció más. Még akkor is, ha megfelel a cikkben leírt összes feltételnek, előfordulhat, hogy jelentősen módosítania kell a Linux rendszert ahhoz, hogy megfelelően fusson.

Általános Linux telepítési megjegyzések

  • Az Azure nem támogatja a Hyper-V virtuális merevlemez (VHDX) formátumot. Azure-támogatás csak rögzített VHD-t. A lemezt a Hyper-V Manager vagy a Convert-VHD parancsmag használatával konvertálhatja VHD formátumba. Ha VirtualBoxot használ, a lemez létrehozásakor az alapértelmezett (dinamikusan lefoglalt) helyett válassza a Rögzített méret lehetőséget.

  • Azure-támogatás Gen1 (BIOS boot) és Gen2 (UEFI boot) virtuális gépeket.

  • A virtuális fájlfoglalási tábla (VFAT) kernelmodulját engedélyezni kell a kernelben.

  • A virtuális merevlemez maximális mérete 1023 GB.

  • A Linux rendszer telepítésekor javasoljuk, hogy a Logikai kötetkezelő (LVM) helyett standard partíciókat használjon. Sok telepítés esetében az LVM az alapértelmezett.

    A standard partíciók használatával elkerülhetők az LVM-névütközések a klónozott virtuális gépekkel, különösen akkor, ha egy operációsrendszer-lemez egy másik azonos virtuális géphez csatlakozik a hibaelhárításhoz. Adatlemezeken használhatja az LVM-et vagy a RAID-et .

  • A felhasználó által definiált függvények (UDF) fájlrendszereinek csatlakoztatásához kerneltámogatás szükséges. Az Azure első indításakor a kiépítési konfiguráció a vendéghez csatolt UDF-formátumú adathordozón keresztül továbbítja a Linux rendszerű virtuális gépnek. Az Azure Linux-ügynöknek csatlakoztatnia kell az UDF fájlrendszert a konfiguráció olvasásához és a virtuális gép üzembe helyezéséhez.

  • A 2.6.37-nél korábbi Linux kernelverziók nem támogatják a nem egységes memóriahozzáférést (NUMA) a nagyobb virtuálisgép-méretekkel rendelkező Hyper-V-n. Ez a probléma elsősorban a felsőbb rétegbeli Red Hat 2.6.32-kernelt használó régebbi disztribúciókat érinti. A javítás a Red Hat Enterprise Linux (RHEL) 6.6 -ban (kernel-2.6.32-504) történt.

    A 2.6.37-nél régebbi egyéni kerneleket vagy 2.6.32-504-nél régebbi RHEL-alapú kerneleket futtató rendszereknek be kell állítaniuk a rendszerindítási paramétert numa=off a grub.conf kernel parancssorában. További információ: Red Hat KB 436883.

  • Ne konfiguráljon felcserélési partíciót az operációsrendszer-lemezen. Konfigurálhatja a Linux-ügynököt egy felcserélési fájl létrehozására az ideiglenes erőforráslemezen, a cikk későbbi részében leírtak szerint.

  • Az Azure összes virtuális merevlemezének 1 MB-ra (1024 x 1024 bájt) igazított virtuális méretnek kell lennie. Amikor nyers lemezről VHD-re konvertál, győződjön meg arról, hogy a nyers lemez mérete az átalakítás előtt 1 MB többszöröse, a cikk későbbi részében leírtak szerint.

  • Használja a legfrissebb terjesztési verziót, csomagokat és szoftvereket.

  • Távolítsa el a felhasználókat és a rendszerfiókokat, a nyilvános kulcsokat, a bizalmas adatokat, a szükségtelen szoftvereket és alkalmazásokat.

Feljegyzés

A Cloud-init 21.2-es vagy újabb verziója eltávolítja az UDF-követelményt. A modul engedélyezése nélkül udf azonban a CD-ROM nem fog csatlakoztatni a kiépítés során, ami megakadályozza az egyéni adatok alkalmazását. A megkerülő megoldás a felhasználói adatok alkalmazása. Az egyéni adatokkal ellentétben azonban a felhasználói adatok nincsenek titkosítva. További információ: Felhasználói adatformátumok a cloud-init dokumentációjában.

Kernelmodulok telepítése Hyper-V nélkül

Az Azure a Hyper-V hipervizoron fut, ezért a Linuxhoz bizonyos kernelmodulok futtatására van szükség az Azure-ban. Ha a Hyper-V-n kívül létrehozott virtuális géppel rendelkezik, előfordulhat, hogy a Linux-telepítők nem tartalmazzák a Hyper-V illesztőprogramjait a kezdeti RAM-lemezen (initrd vagy initramfs), hacsak a virtuális gép nem észleli, hogy Hyper-V környezetben fut.

Ha egy másik virtualizálási rendszert (például VirtualBoxot vagy KVM-et) használ a Linux-rendszerkép előkészítéséhez, előfordulhat, hogy újra kell építenie az initrdet, hogy legalább a hv_vmbushv_storvsc kezdeti RAM-lemezen elérhetőek legyenek a kernelmodulok. Ez az ismert probléma a felsőbb rétegbeli Red Hat-disztribúción alapuló rendszerekre és esetleg másokra is igaz.

Az initrd vagy initramfs rendszerkép újraépítésének mechanizmusa az eloszlástól függően változhat. Tekintse meg a terjesztési dokumentációt vagy a megfelelő eljárás támogatását. Íme egy példa az initrd segédprogram használatával történő újraépítésére mkinitrd :

  1. A meglévő initrd rendszerkép biztonsági mentése:

    cd /boot
    sudo cp initrd-`uname -r`.img  initrd-`uname -r`.img.bak
    
  2. Az initrd újraépítése az és hv_storvsc a hv_vmbus kernelmodulok használatával:

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

Virtuális merevlemezek átméretezése

Az Azure-beli VHD-rendszerképek virtuális méretének 1 MB-hoz kell igazodnia. A Hyper-V-ben létrehozott virtuális merevlemezek általában megfelelően vannak igazítva. Ha a VHD nincs megfelelően igazítva, a következő példához hasonló hibaüzenet jelenhet meg, amikor a VHD-ből próbál képet létrehozni:

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

Ebben az esetben méretezze át a virtuális gépet a Hyper-V Manager konzol vagy a Resize-VHD PowerShell parancsmag használatával. Ha nem Windows-környezetben fut, javasoljuk, hogy a VHD konvertálását (ha szükséges) és átméretezését használja qemu-img .

Feljegyzés

A QEMU 2.2.1-es verziójának qemu-img-ben és néhány későbbi verzióban ismert hiba található, amely helytelenül formázott VHD-t eredményez. A probléma a QEMU 2.6-ban lett kijavítva. Javasoljuk, hogy a 2.2.0-s vagy korábbi verziót vagy a 2.6-os vagy újabb verziót használja.

  1. A VHD közvetlen átméretezése olyan eszközökkel, mint qemu-imgvbox-manage például a kikötés nélküli virtuális merevlemez. Javasoljuk, hogy először konvertálja a VHD-t nyers lemezképgé az alábbi kód használatával.

    Ha a virtuálisgép-rendszerkép nyers lemezképként lett létrehozva, kihagyhatja ezt a lépést. A virtuálisgép-rendszerkép nyers lemezképként való létrehozása az alapértelmezett néhány hipervizorban, például a KVM-ben.

    sudo qemu-img convert -f vpc -O raw MyLinuxVM.vhd MyLinuxVM.raw
    
  2. Számítsa ki a lemezkép szükséges méretét, hogy a virtuális méret 1 MB-ra legyen igazítva. A következő Bash-rendszerhéj-szkript a lemezkép virtuális méretének meghatározására, qemu-img info majd a következő 1 MB-ra számítja ki a méretet:

    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. A nyers lemez átméretezése a következő használatával $rounded_size:

    sudo qemu-img resize MyLinuxVM.raw $rounded_size
    
  4. Konvertálja vissza a nyers lemezt rögzített méretű VHD-vé:

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

    Vagy a QEMU 2.6 előtti verziói esetén távolítsa el a force_size következő lehetőséget:

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

Linux kernelkövetelmények

A Hyper-V és az Azure Linux Integration Services (LIS) illesztőprogramjai közvetlenül a felsőbb rétegbeli Linux-kernelhez kerülnek. Számos olyan disztribúció, amely tartalmaz egy újabb Linux-kernelverziót (például 3.x), már elérhetőek ezek az illesztőprogramok, vagy más módon biztosítják ezeknek az illesztőprogramoknak a háttérrendszerverzióit a kernelekkel.

A LIS-illesztőprogramok folyamatosan frissülnek a felsőbb rétegbeli kernelben új javításokkal és funkciókkal. Ha lehetséges, javasoljuk, hogy futtasson egy támogatott disztribúciót , amely tartalmazza ezeket a javításokat és frissítéseket.

Ha az RHEL 6.0-6.3-ás verzióját futtatja, telepítenie kell a Hyper-V legújabb LIS-illesztőprogramjait. Az RHEL 6.4+-tól (és származékaitól) kezdve a LIS-illesztőprogramok már benne vannak a kernelben, így nincs szükség további telepítési csomagokra.

Ha egyéni kernelre van szükség, javasoljuk a legújabb kernelverziót (például 3.8+). A saját kernelt karbantartó disztribúciók vagy szállítók esetében rendszeresen vissza kell adnia a LIS-illesztőprogramokat a felsőbb rétegbeli kernelből az egyéni kernelbe.

Még ha már viszonylag új kernelverziót futtat, javasoljuk, hogy kövesse nyomon a LIS-illesztőprogramok minden felsőbb rétegbeli javítását, és szükség szerint végezze el a visszaküldésüket. A LIS-illesztőprogram forrásfájljainak helyei a Linux kernel forrásfában található MAINTAINERS fájlban vannak megadva:

    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/

A virtuális gép aktív kernelének tartalmaznia kell a következő javításokat. Ez a lista nem lehet teljes az összes disztribúció esetében.

Azure Linux-ügynök

Az Azure Linux-ügynök (waagent) kiépít egy Linux rendszerű virtuális gépet az Azure-ban. A legújabb verziójú, jelentéssel kapcsolatos problémákat vagy lekéréses kérelmeket a Linux-ügynök GitHub-adattárában kaphatja meg.

Íme néhány szempont az Azure Linux-ügynök használatához:

  • A Linux-ügynök az Apache 2.0 licenc alatt jelenik meg. Számos disztribúció már .rpm vagy .deb csomagokat biztosít az ügynök számára. Ezeket a csomagokat egyszerűen telepítheti és frissítheti.
  • Az Azure Linux-ügynökhöz a Python 2.6+-os verzióra van szükség.
  • Az ügynöknek szüksége van a modulra python-pyasn1 is. A legtöbb disztribúció külön csomagként biztosítja ezt a modult a telepítéshez.
  • Bizonyos esetekben előfordulhat, hogy az Azure Linux-ügynök nem kompatibilis a NetworkManagerrel. A disztribúciók által biztosított számos csomag (.rpm vagy .deb) konfigurálja a NetworkManagert ütközésként a waagent csomaghoz. Ezekben az esetekben az ügynök eltávolítja a NetworkManagert a Linux-ügynökcsomag telepítésekor.
  • Az Azure Linux-ügynöknek a minimálisan támogatott verziónál vagy annál nagyobbnak kell lennie.

Feljegyzés

Győződjön meg arról, hogy a modulok és vfat a udf modulok engedélyezve vannak. A udf modul letiltása kiépítési hibát fog okozni. A modul letiltása kiépítési vfat és rendszerindítási hibákat is okozhat. A Cloud-init 21.2-es vagy újabb verziója az UDF megkövetelése nélkül is kiépítheti a virtuális gépeket, ha mindkét feltétel létezik:

  • A virtuális gépet nyilvános SSH-kulcsokkal és nem jelszavakkal hozta létre.
  • Nem adott meg egyéni adatokat.

A Linux általános rendszerkövetelményei

  1. Módosítsa a rendszermag rendszerindító sorát a GRUB-ban vagy a GRUB2-ben, hogy az tartalmazza a következő paramétereket, hogy az összes konzolüzenet az első soros portra legyen elküldve. Ezek az üzenetek segíthetnek Azure-támogatás a hibák hibakeresésében.

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

    Azt is javasoljuk , hogy távolítsa el a következő paramétereket, ha léteznek:

    rhgb quiet crashkernel=auto
    

    A grafikus és csendes rendszerindítás nem hasznos felhőkörnyezetekben, ahol minden naplót a soros portra szeretne küldeni. Szükség esetén meghagyhatja a crashkernel beállítást konfigurálva, de ez a paraméter legalább 128 MB-kal csökkenti a virtuális gépen rendelkezésre álló memória mennyiségét. Kisebb virtuálisgép-méretek esetén a rendelkezésre álló memória csökkentése problémás lehet.

  2. Miután befejezte a szerkesztést /etc/default/grub, futtassa a következő parancsot a GRUB-konfiguráció újraépítéséhez:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  3. Adja hozzá az initramfs Hyper-V modult a következő használatával 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
    

    Adja hozzá a Hyper-V modult az initrdhez a következő használatával 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. Győződjön meg arról, hogy az SSH-kiszolgáló telepítve van, és úgy van konfigurálva, hogy indításkor induljon el. Ez a konfiguráció általában az alapértelmezett.

  5. Telepítse az Azure Linux-ügynököt.

    Az Azure Linux-ügynök szükséges egy Linux-rendszerkép Azure-beli kiépítéséhez. Számos disztribúció .rpm vagy .deb csomagként biztosítja az ügynököt. A csomagot általában meghívják WALinuxAgent vagy walinuxagent. Az ügynököt manuálisan is telepítheti az Azure Linux-ügynök útmutatójának lépéseit követve.

    Feljegyzés

    Győződjön meg arról, hogy a modulok és vfat a udf modulok engedélyezve vannak. Az eltávolításuk vagy letiltásuk kiépítési vagy rendszerindítási hibát fog okozni. A Cloud-init 21.2-es vagy újabb verziója eltávolítja az UDF-követelményt.

    Telepítse az Azure Linux-ügynököt, a cloud-initet és más szükséges segédprogramokat az alábbi parancsok egyikének futtatásával.

    Használja ezt a parancsot Red Hat vagy CentOS esetén:

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

    Használja ezt a parancsot az Ubuntu/Debian esetében:

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

    Használja ezt a parancsot a SU-hoz Standard kiadás:

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

    Ezután engedélyezze az ügynököt és a cloud-initet az összes disztribúción:

    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  6. Ne hozzon létre felcserélési helyet az operációsrendszer-lemezen.

    Az Azure Linux-ügynök vagy a cloud-init használatával konfigurálhatja a helycserét a helyi erőforráslemezen keresztül. Ez az erőforráslemez az Azure-beli üzembe helyezés után csatlakozik a virtuális géphez. A helyi erőforráslemez ideiglenes lemez, és a virtuális gép megszüntetésekor kiüríthető. Az alábbi blokkok bemutatják a felcserélés konfigurálását.

    Ha az Azure Linux-ügynököt választja, módosítsa a következő paramétereket a /etc/waagent.conf fájlban:

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

    Ha a cloud-initet választja, konfigurálja a cloud-initet a kiépítés kezeléséhez:

    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
    

    Ha a cloud-initet a felcserélési terület formázására és létrehozására szeretné konfigurálni, két lehetősége van:

    • Adja át a cloud-init konfigurációt minden alkalommal, amikor virtuális gépet hoz létre.customdata Ezt a módszert javasoljuk.
    • A lemezképen egy cloud-init direktívával konfigurálhatja a felcserélési területet minden alkalommal, amikor a virtuális gép létrejön.

    Hozzon létre egy .cfg-fájlt a felcserélési terület cloud-init használatával történő konfigurálásához:

    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. A cloud-init konfigurálása a kiépítés kezeléséhez:

    1. A cloud-init konfigurálása waagent :

      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
      

      Ha egy adott virtuális gépet migrál, és nem szeretne általánosított rendszerképet létrehozni, állítsa be Provisioning.Agent=disabled a /etc/waagent.conf konfigurációban.

    2. Csatlakoztatások konfigurálása:

      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. Az Azure-adatforrás konfigurálása:

      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. Ha konfigurált egyet, távolítsa el a meglévő felcserélési fájlt:

      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 naplózás konfigurálása:

      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. Futtassa az alábbi parancsokat a virtuális gép kivonásához.

    Figyelemfelhívás

    Ha egy adott virtuális gépet migrál, és nem szeretne általánosított rendszerképet létrehozni, hagyja ki a leépítési lépést. A parancs waagent -force -deprovision+user futtatása használhatatlanná teszi a forrásgépet. Ez a lépés csak általánosított rendszerkép létrehozására szolgál.

    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
    

    A VirtualBoxon a futtatás waagent -force -deprovision után hibaüzenet jelenhet meg.[Errno 5] Input/output error Ez a hibaüzenet nem kritikus, és figyelmen kívül hagyhatja.

  9. Állítsa le a virtuális gépet, és töltse fel a VHD-t az Azure-ba.

Következő lépések

Linux rendszerű virtuális gép létrehozása egyéni lemezről az Azure CLI használatával