Informacje dotyczące dystrybucji obsługiwanych przez społeczność i nieobsługiwanych
Dotyczy: ✔️ Maszyny wirtualne z systemem Linux — elastyczne zestawy ✔️ skalowania
Umowa SLA platformy Azure dotyczy maszyn wirtualnych z systemem operacyjnym Linux tylko wtedy, gdy jest używana jedna z zatwierdzonych dystrybucji . W przypadku tych zatwierdzonych dystrybucji wstępnie skonfigurowane obrazy systemu Linux są udostępniane w Azure Marketplace.
- System Linux na platformie Azure — zatwierdzone dystrybucje
- Obsługa obrazów systemu Linux na platformie Microsoft Azure
Wszystkie inne, nie Azure Marketplace, dystrybucje działające na platformie Azure mają szereg wymagań wstępnych. Ten artykuł nie może być kompleksowy, ponieważ każda dystrybucja jest inna. Nawet jeśli spełniasz wszystkie poniższe kryteria, może być konieczne znaczne dostosowanie systemu Linux, aby działał prawidłowo.
Ten artykuł koncentruje się na ogólnych wskazówkach dotyczących uruchamiania dystrybucji systemu Linux na platformie Azure.
Ogólne uwagi dotyczące instalacji systemu Linux
Format wirtualnego dysku twardego funkcji Hyper-V (VHDX) nie jest obsługiwany na platformie Azure, tylko stały dysk VHD. Dysk można przekonwertować na format VHD przy użyciu Menedżera funkcji Hyper-V lub polecenia cmdlet Convert-VHD . Jeśli używasz usługi VirtualBox, wybierz pozycję Stały rozmiar zamiast domyślnego (dynamicznie przydzielonego) podczas tworzenia dysku.
Platforma Azure obsługuje maszyny wirtualne Gen1 (rozruch systemu BIOS) & Gen2 (rozruch UEFI).
Moduł jądra vfat musi być włączony w jądrze
Maksymalny rozmiar dysku VHD wynosi 1023 GB.
Podczas instalowania systemu Linux zaleca się używanie partycji standardowych, a nie Menedżera woluminów logicznych (LVM), który jest domyślny dla wielu instalacji. Użycie partycji standardowych pozwala uniknąć konfliktów nazw LVM z sklonowanymi maszynami wirtualnymi, szczególnie jeśli dysk systemu operacyjnego jest kiedykolwiek dołączony do innej identycznej maszyny wirtualnej na potrzeby rozwiązywania problemów. LvM lub RAID mogą być używane na dyskach danych.
Obsługa jądra na potrzeby instalowania systemów plików UDF jest wymagana. Podczas pierwszego rozruchu na platformie Azure konfiguracja aprowizacji jest przekazywana do maszyny wirtualnej z systemem Linux przy użyciu nośnika sformatowanego przez użytkownika dołączonego do gościa. Agent systemu Linux platformy Azure musi zainstalować system plików UDF, aby odczytać jego konfigurację i aprowizować maszynę wirtualną.
Wersje jądra systemu Linux wcześniejsze niż 2.6.37 nie obsługują NUMA w funkcji Hyper-V o większych rozmiarach maszyn wirtualnych. Ten problem dotyczy głównie starszych dystrybucji przy użyciu nadrzędnego jądra Red Hat 2.6.32 i został rozwiązany w systemie Red Hat Enterprise Linux (RHEL) 6.6 (jądro-2.6.32-504). Systemy z niestandardowymi jądrami starszymi niż 2.6.37 lub jądrami opartymi na systemie RHEL starszymi niż 2.6.32-504 muszą ustawić parametr
numa=off
rozruchowy w wierszu polecenia jądra w pliku grub.conf. Aby uzyskać więcej informacji, zobacz Red Hat KB 436883.Nie konfiguruj partycji wymiany na dysku systemu operacyjnego. Agenta systemu Linux można skonfigurować do utworzenia pliku wymiany na tymczasowym dysku zasobów, zgodnie z opisem w poniższych krokach.
Wszystkie wirtualne dyski twarde na platformie Azure muszą mieć rozmiar wirtualny wyrównany do 1 MB (1024 × 1024 bajtów). Podczas konwertowania z dysku pierwotnego na dysk VHD należy upewnić się, że rozmiar dysku pierwotnego jest wielokrotność 1 MB przed konwersją, zgodnie z opisem w poniższych krokach.
Korzystaj z najnowszej wersji dystrybucji, pakietów i oprogramowania.
Usuwanie użytkowników i kont systemowych, kluczy publicznych, poufnych danych, niepotrzebnego oprogramowania i aplikacji.
Uwaga
(Cloud-init >= 21.2 usuwa wymaganie udf. Jednak bez włączonego modułu udf usługa cdrom nie będzie instalować podczas aprowizacji uniemożliwiającej stosowanie danych niestandardowych. Obejściem tego problemu jest zastosowanie niestandardowych danych przy użyciu danych użytkownika, jednak w przeciwieństwie do niestandardowych danych użytkownika nie jest szyfrowane. https://cloudinit.readthedocs.io/en/latest/topics/format.html
Instalowanie modułów jądra bez funkcji Hyper-V
Platforma Azure działa na funkcji hypervisor funkcji Hyper-V, więc system Linux wymaga uruchamiania niektórych modułów jądra na platformie Azure. Jeśli masz maszynę wirtualną utworzoną poza funkcją Hyper-V, instalatory systemu Linux mogą nie uwzględniać sterowników funkcji Hyper-V w początkowym dysku ramdisk (initrd lub initramfs), chyba że maszyna wirtualna wykryje, że jest uruchomiona w środowisku funkcji Hyper-V. W przypadku korzystania z innego systemu wirtualizacji (takiego jak VirtualBox, KVM itd.) w celu przygotowania obrazu systemu Linux może być konieczne ponowne skompilowanie initrd, aby co najmniej moduły hv_vmbus i hv_storvsc jądra są dostępne na początkowym dysku ramdisk. Ten znany problem dotyczy systemów opartych na nadrzędnej dystrybucji red hat, a być może innych.
Mechanizm odbudowy obrazu initrd lub initramfs może się różnić w zależności od rozkładu. Zapoznaj się z dokumentacją dystrybucji lub pomocą techniczną dotyczącą odpowiedniej procedury. Oto jeden przykład ponownego kompilowania initrd przy użyciu mkinitrd
narzędzia :
Tworzenie kopii zapasowej istniejącego obrazu initrd:
sudo cd /boot sudo cp initrd-`uname -r`.img initrd-`uname -r`.img.bak
Skompiluj moduły
initrd
za pomocą modułówhv_vmbus
ihv_storvsc
jądra:sudo mkinitrd --preload=hv_storvsc --preload=hv_vmbus -v -f initrd-`uname -r`.img `uname -r`
Zmiana rozmiaru wirtualnych dysków twardych
Obrazy wirtualnego dysku twardego na platformie Azure muszą mieć rozmiar wirtualny wyrównany do 1 MB. Zazwyczaj wirtualne dyski twarde utworzone przy użyciu funkcji Hyper-V są poprawnie wyrównane. Jeśli wirtualny dysk twardy nie jest poprawnie wyrównany, podczas próby utworzenia obrazu z dysku VHD może zostać wyświetlony komunikat o błędzie podobny do poniższego.
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).
W takim przypadku zmień rozmiar maszyny wirtualnej przy użyciu konsoli Menedżera funkcji Hyper-V lub polecenia cmdlet programu PowerShell Resize-VHD . Jeśli nie korzystasz ze środowiska systemu Windows, zalecamy użycie polecenia qemu-img
do konwersji (w razie potrzeby) i zmiany rozmiaru dysku VHD.
Uwaga
Istnieje znana usterka w wersjach>qemu-img =2.2.1, która powoduje niewłaściwie sformatowany dysk VHD. Problem został rozwiązany w QEMU 2.6. Zalecamy użycie qemu-img
wersji 2.2.0 lub starszej albo 2.6 lub nowszej.
Zmiana rozmiaru dysku VHD bezpośrednio przy użyciu narzędzi, takich jak
qemu-img
lubvbox-manage
może spowodować, że dysk VHD jest nie do rozruchu. Zalecamy najpierw przekonwertowanie dysku VHD na obraz dysku RAW. Jeśli obraz maszyny wirtualnej został utworzony jako obraz dysku RAW (wartość domyślna dla niektórych funkcji hypervisor, takich jak KVM), możesz pominąć ten krok.sudo qemu-img convert -f vpc -O raw MyLinuxVM.vhd MyLinuxVM.raw
Oblicz wymagany rozmiar obrazu dysku, aby rozmiar wirtualny był wyrównany do 1 MB. Poniższy skrypt powłoki bash używa
qemu-img info
do określenia wirtualnego rozmiaru obrazu dysku, a następnie oblicza rozmiar do następnego 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"
Zmień rozmiar nieprzetworzonego dysku przy użyciu
$rounded_size
ustawienia powyżej.sudo qemu-img resize MyLinuxVM.raw $rounded_size
Teraz przekonwertuj dysk RAW z powrotem na dysk VHD o stałym rozmiarze.
sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc MyLinuxVM.raw MyLinuxVM.vhd
Ewentualnie, jeśli wersje qemu są wcześniejsze niż 2.6, usuń
force_size
opcję .sudo qemu-img convert -f raw -o subformat=fixed -O vpc MyLinuxVM.raw MyLinuxVM.vhd
Wymagania jądra systemu Linux
Sterowniki usług Linux Integration Services (LIS) dla funkcji Hyper-V i platformy Azure są przekazywane bezpośrednio do nadrzędnego jądra systemu Linux. Wiele dystrybucji, które obejmują najnowszą wersję jądra systemu Linux (na przykład 3.x), mają te sterowniki już dostępne lub w inny sposób zapewniają wsteczne wersje tych sterowników z ich jądrami. Te sterowniki są stale aktualizowane w jądrze nadrzędnym przy użyciu nowych poprawek i funkcji, więc jeśli to możliwe, zalecamy uruchomienie zatwierdzonej dystrybucji , która obejmuje te poprawki i aktualizacje.
Jeśli używasz wariantu systemu Red Hat Enterprise Linux w wersji 6.0 do 6.3, musisz zainstalować najnowsze sterowniki LIS dla funkcji Hyper-V. Począwszy od RHEL 6.4+ (i pochodnych) sterowniki LIS są już dołączone do jądra i dlatego nie są potrzebne żadne dodatkowe pakiety instalacyjne.
Jeśli wymagane jest niestandardowe jądro, zalecamy użycie najnowszej wersji jądra (na przykład 3.8 lub nowszej). W przypadku dystrybucji lub dostawców, którzy utrzymują własne jądro, należy regularnie przywracać sterowniki LIS z nadrzędnego jądra do niestandardowego jądra. Nawet jeśli używasz już stosunkowo najnowszej wersji jądra, zdecydowanie zalecamy śledzenie wszelkich poprawek nadrzędnych w sterownikach LIS i backportuj je zgodnie z potrzebami. Lokalizacje plików źródłowych sterowników LIS są określone w pliku MAINTAINERS w drzewie źródłowym jądra systemu Linux:
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/
Następujące poprawki muszą być uwzględnione w jądrze. Nie można ukończyć tej listy dla wszystkich dystrybucji.
- ata_piix: odroczenie dysków do sterowników funkcji Hyper-V domyślnie
- storvsc: konto pakietów przesyłanych w ścieżce RESET
- storvsc: unikaj używania WRITE_SAME
- storvsc: Wyłącz funkcję ZAPISU SAME dla sterowników karty hosta RAID i wirtualnych kart hosta
- storvsc: poprawka wyłuszczenia wskaźnika NULL
- storvsc: błędy buforu pierścieniowego mogą spowodować zablokowanie operacji we/wy
- scsi_sysfs: ochrona przed podwójnym wykonywaniem __scsi_remove_device
Agent platformy Azure dla systemu Linux
Agent waagent
systemu Linux platformy Azure aprowizuje maszynę wirtualną z systemem Linux na platformie Azure. Najnowszą wersję, problemy z plikami lub żądania ściągnięcia można uzyskać w repozytorium GitHub agenta systemu Linux.
- Agent systemu Linux jest udostępniany w ramach licencji apache 2.0. Wiele dystrybucji zapewnia już pakiety RPM lub .deb dla agenta, a te pakiety można łatwo zainstalować i zaktualizować.
- Agent systemu Linux platformy Azure wymaga języka Python w wersji 2.6 lub nowszej.
- Agent wymaga również modułu python-pyasn1. Większość dystrybucji udostępnia ten moduł jako oddzielny pakiet do zainstalowania.
- W niektórych przypadkach agent systemu Linux platformy Azure może nie być zgodny z rozwiązaniem NetworkManager. Wiele pakietów RPM/deb dostarczanych przez dystrybucje konfiguruje NetworkManager jako konflikt z pakietem waagent. W takich przypadkach program NetworkManager zostanie odinstalowany podczas instalowania pakietu agenta systemu Linux.
- Agent systemu Linux platformy Azure musi być w wersji minimalnej lub nowszej.
Uwaga
Upewnij się, że moduły "udf" i "vfat" są włączone. Wyłączenie modułu UDF spowoduje niepowodzenie aprowizacji. Wyłączenie modułu VFAT spowoduje zarówno błędy aprowizacji, jak i rozruchu. Cloud-init >= 21.2 może aprowizować maszyny wirtualne bez konieczności stosowania funkcji UDF, jeśli: 1) maszyna wirtualna została utworzona przy użyciu kluczy publicznych SSH, a nie hasła i 2) nie podano żadnych danych niestandardowych.
Ogólne wymagania systemowe systemu Linux
Zmodyfikuj wiersz rozruchu jądra w programie GRUB lub GRUB2, aby uwzględnić następujące parametry, tak aby wszystkie komunikaty konsoli zostały wysłane do pierwszego portu szeregowego. Te komunikaty mogą pomóc pomoc techniczna platformy Azure w debugowaniu wszelkich problemów.
GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
Zalecamy również usunięcie następujących parametrów, jeśli istnieją.
rhgb quiet crashkernel=auto
Graficzny i cichy rozruch nie jest przydatny w środowisku chmury, w którym chcemy, aby wszystkie dzienniki były wysyłane do portu szeregowego. W
crashkernel
razie potrzeby można pozostawić tę opcję skonfigurowaną, ale należy pamiętać, że ten parametr zmniejsza ilość dostępnej pamięci na maszynie wirtualnej o co najmniej 128 MB, co może być problematyczne w przypadku mniejszych rozmiarów maszyn wirtualnych.Po zakończeniu edycji /etc/default/grub uruchom następujące polecenie, aby ponownie skompilować konfigurację grub:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Dodaj moduły funkcji Hyper-V zarówno initrd, jak i initramfs , korzystając z instrukcji
dracut
lubmkinitramfs
.Initramfs
sudo 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
Initrd
sudo 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
Upewnij się, że serwer SSH jest zainstalowany i skonfigurowany do uruchamiania w czasie rozruchu. Ta konfiguracja jest zwykle domyślna.
Zainstaluj agenta systemu Linux platformy Azure. Agent systemu Linux platformy Azure jest wymagany do aprowizowania obrazu systemu Linux na platformie Azure. Wiele dystrybucji zapewnia agenta jako pakiet RPM lub .deb (pakiet jest zazwyczaj nazywany WALinuxAgent lub walinuxagent). Agent można również zainstalować ręcznie, wykonując kroki opisane w przewodniku po agencie systemu Linux.
Uwaga
Upewnij się, że moduły "udf" i "vfat" są włączone.
Blocklisting
lub usunięcie modułu udf spowoduje niepowodzenie aprowizacji.Blocklisting
lub usunięcie modułu vfat spowoduje zarówno błędy aprowizacji, jak i rozruchu. (_Cloud-init >= 21.2 usuwa wymaganie udf. Przeczytaj więcej szczegółów w dokumencie)Zainstaluj agenta systemu Linux platformy Azure, pakietu cloud-init i innych niezbędnych narzędzi, uruchamiając następujące polecenie:
Red Hat/Centos
sudo yum install -y WALinuxAgent 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
Następnie włącz agenta i pakiet cloud-init we wszystkich dystrybucjach przy użyciu:
sudo systemctl enable waagent.service sudo systemctl enable cloud-init.service
Zamiana: nie twórz miejsca wymiany na dysku systemu operacyjnego.
Agent systemu Linux platformy Azure lub usługa Cloud-init może służyć do konfigurowania miejsca wymiany przy użyciu dysku zasobów lokalnych. Ten dysk zasobów jest dołączony do maszyny wirtualnej po aprowizacji na platformie Azure. Dysk zasobów lokalnych jest dyskiem tymczasowym i może zostać opróżniony po anulowaniu aprowizacji maszyny wirtualnej. W poniższych blokach pokazano, jak skonfigurować tę zamianę.
Agent systemu Linux platformy Azure zmodyfikuj następujące parametry w pliku /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.
Cloud-init Konfigurowanie pakietu cloud-init w celu obsługi aprowizacji:
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
Skonfiguruj narzędzie Cloud-init do utworzenia zamiany.
Aby sformatować i utworzyć zamianę, dostępne są 2 opcje:
Przekaż to jako konfigurację cloud-init za każdym razem, gdy tworzysz maszynę wirtualną za pomocą polecenia
customdata
. Jest to zalecana metoda.Użyj dyrektywy cloud-init pieczonej na obrazie, która zrobi to za każdym razem, gdy maszyna wirtualna zostanie utworzona.
Utwórz plik cfg, aby skonfigurować zamianę przy użyciu narzędzia 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
Skonfiguruj inicjowanie obsługi administracyjnej w chmurze:
Skonfiguruj usługę waagent dla pakietu 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
Jeśli migrujesz określoną maszynę wirtualną i nie chcesz tworzyć uogólnionego obrazu, ustaw
Provisioning.Agent=disabled
go w/etc/waagent.conf
konfiguracji.Konfigurowanie instalacji:
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
Konfigurowanie źródła danych platformy 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
W przypadku skonfigurowania usuń istniejący plik swapfile:
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
Konfigurowanie rejestrowania 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
Anulowanie aprowizacji.
Przestroga
Jeśli migrujesz określoną maszynę wirtualną i nie chcesz tworzyć uogólnionego obrazu, pomiń krok anulowania aprowizacji. Uruchomienie polecenia waagent -force -deprovision+user spowoduje, że maszyna źródłowa będzie bezużyteczna. Ten krok jest przeznaczony tylko do utworzenia uogólnionego obrazu.
Uruchom następujące polecenia, aby usunąć aprowizę maszyny wirtualnej.
sudo rm -f /var/log/waagent.log sudo cloud-init clean sudo -force -deprovision+user sudo rm -f ~/.bash_history sudo export HISTSIZE=0
Uwaga
W usłudze Virtualbox może zostać wyświetlony następujący błąd po uruchomieniu
waagent -force -deprovision
polecenia[Errno 5] Input/output error
. Ten komunikat o błędzie nie jest krytyczny i można go zignorować.Zamknij maszynę wirtualną i przekaż wirtualny dysk twardy na platformę Azure.