Przygotowywanie maszyny wirtualnej SLES lub openSUSE Leap dla platformy Azure
Dotyczy: ✔️ Maszyny wirtualne z systemem Linux — elastyczne zestawy ✔️ skalowania dotyczy: ✔️ Ujednolicone zestawy skalowania
W niektórych przypadkach możesz chcieć użyć dostosowanego systemu SUSE Linux Enterprise Server (SLES) lub openSUSE Leap Linux virtual machines (maszyn wirtualnych) w środowisku platformy Azure i mieć możliwość kompilowania tych typów maszyn wirtualnych za pomocą automatyzacji. W tym artykule przedstawiono sposób tworzenia i przekazywania niestandardowego wirtualnego dysku twardego (VHD) platformy Azure zawierającego system operacyjny SUSE Linux.
Wymagania wstępne
W tym artykule założono, że na wirtualnym dysku twardym zainstalowano już system operacyjny SLES lub openSUSE Leap Linux. Istnieje wiele narzędzi do tworzenia plików vhd. Można na przykład użyć rozwiązania wirtualizacji, takiego jak funkcja Hyper-V. Aby uzyskać instrukcje, zobacz Instalowanie funkcji Hyper-V i tworzenie maszyny wirtualnej.
Uwagi dotyczące instalacji programu SLES/openSUSE Leap
- Aby uzyskać więcej wskazówek dotyczących przygotowywania obrazów systemu Linux dla platformy Azure, zobacz Ogólne informacje o instalacji systemu Linux.
- Platforma Azure nie obsługuje plików obrazu dysku twardego systemu Windows (vhdx). Tylko pliki VHD (vhd) są obsługiwane poza maszynami wirtualnymi. Dysk można przekonwertować na format VHD przy użyciu Menedżera funkcji Hyper-V lub
Convert-VHD
polecenia cmdlet. - pomoc techniczna platformy Azure s Gen1 (rozruch systemu BIOS) i maszyny wirtualne Gen2 (rozruch UEFI).
- Moduł jądra tabeli alokacji plików wirtualnych (VFAT) musi być włączony w jądrze.
- Nie konfiguruj partycji wymiany na dysku systemu operacyjnego. Agenta systemu Linux można skonfigurować tak, aby utworzyć plik wymiany na dysku zasobów tymczasowych. Kroki opisane w dalszej części tego artykułu zawierają więcej informacji na temat konfigurowania przestrzeni wymiany.
- Wszystkie wirtualne dyski twarde na platformie Azure muszą mieć rozmiar wirtualny wyrównany do 1 MB. Podczas konwertowania z dysku pierwotnego na dysk VHD upewnij się, że rozmiar dysku pierwotnego to wielokrotność 1 MB przed konwersją. Aby uzyskać więcej informacji, zobacz Ogólne informacje o instalacji systemu Linux.
Uwaga
Program Cloud-init w wersji 21.2 lub nowszej usuwa wymaganie funkcji zdefiniowanej przez użytkownika (UDF). Jednak bez włączonego modułu udf
dysk CD-ROM nie zostanie zamontowany podczas aprowizacji, co uniemożliwia stosowanie niestandardowych danych. Obejściem jest zastosowanie danych użytkownika. Jednak w przeciwieństwie do danych niestandardowych dane użytkownika nie są szyfrowane. Aby uzyskać więcej informacji, zobacz Formaty danych użytkownika w dokumentacji cloud-init.
Korzystanie z programu SUSE Studio
Program SUSE Studio może łatwo tworzyć obrazy SLES i otwierać obrazy leap dla platformy Azure i funkcji Hyper-V oraz zarządzać nimi. SUSE Studio to zalecane podejście do dostosowywania własnych obrazów SLES i openSUSE Leap images.
Alternatywą dla tworzenia własnego wirtualnego dysku twardego jest również opublikowanie obrazów BYOS (bring your own subscription) dla systemu SLES w magazynie maszyn wirtualnych.
Przygotowywanie usług SLES na platformę Azure
W razie potrzeby skonfiguruj moduły platformy Azure i funkcji Hyper-V.
Jeśli funkcja hypervisor oprogramowania nie jest funkcją Hyper-V, inne moduły należy dodać do początkowego dysku RAM (initramfs) w celu pomyślnego rozruchu na platformie Azure.
Edytuj plik /etc/dracut.conf i dodaj następujący wiersz do pliku:
add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
Uruchom polecenie ,
dracut
aby ponownie skompilować plik initramfs:sudo dracut --verbose --force
Skonfiguruj konsolę szeregową.
Aby pomyślnie pracować z konsolą szeregową, należy skonfigurować kilka zmiennych w pliku /etc/defaults/grub i ponownie utworzyć grub na serwerze:
# Add console=ttyS0 and earlyprintk=ttS0 to the variable. # Remove "splash=silent" and "quiet" options. GRUB_CMDLINE_LINUX_DEFAULT="audit=1 no-scroll fbcon=scrollback:0 mitigations=auto security=apparmor crashkernel=228M,high crashkernel=72M,low console=ttyS0 earlyprintk=ttyS0" # Add "console serial" to GRUB_TERMINAL. GRUB_TERMINAL="console serial" # Set the GRUB_SERIAL_COMMAND variable. GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg
Zarejestruj system SUSE Linux Enterprise, aby umożliwić mu pobieranie aktualizacji i instalowanie pakietów.
Zaktualizuj system przy użyciu najnowszych poprawek:
sudo zypper update
Zainstaluj agenta maszyny wirtualnej z systemem Linux platformy Azure (
waagent
) i pakietu cloud-init:sudo SUSEConnect -p sle-module-public-cloud/15.2/x86_64 (SLES 15 SP2) sudo zypper refresh sudo zypper install python-azure-agent sudo zypper install cloud-init
Włącz
waagent
i cloud-init, aby rozpocząć rozruch:sudo systemctl enable waagent sudo systemctl enable cloud-init-local.service sudo systemctl enable cloud-init.service sudo systemctl enable cloud-config.service sudo systemctl enable cloud-final.service sudo systemctl daemon-reload sudo cloud-init clean
Zaktualizuj konfigurację pakietu cloud-init:
cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg datasource_list: [ Azure ] datasource: Azure: apply_network_config: False EOF
sudo cat <<EOF | sudo tee /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 # Make sure mounts and disk_setup are in the init stage: 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
Jeśli chcesz zainstalować, sformatować i utworzyć partycję wymiany, jedną z opcji jest przekazanie konfiguracji cloud-init za każdym razem, gdy tworzysz maszynę wirtualną.
Inną opcją jest użycie dyrektywy cloud-init na obrazie w celu skonfigurowania przestrzeni wymiany za każdym razem, gdy maszyna wirtualna zostanie utworzona:
cat <<EOF | sudo tee -a /etc/systemd/system.conf 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' EOF 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"] - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"] EOF
Wcześniej agent systemu Linux platformy Azure był używany do automatycznego konfigurowania miejsca wymiany przy użyciu lokalnego dysku zasobów dołączonego do maszyny wirtualnej po aprowizacji maszyny wirtualnej na platformie Azure. Ponieważ pakiet cloud-init obsługuje teraz ten krok, nie można użyć agenta systemu Linux platformy Azure do sformatowania dysku zasobu ani utworzenia pliku wymiany. Użyj tych poleceń, aby odpowiednio zmodyfikować plik /etc/waagent.conf :
sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=auto/g' /etc/waagent.conf sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/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
Uwaga
Jeśli używasz wersji cloud-init starszej niż 21.2, upewnij się, że
udf
moduł jest włączony. Usunięcie lub wyłączenie spowoduje niepowodzenie aprowizacji lub rozruchu. Program Cloud-init w wersji 21.2 lub nowszej usuwa wymaganie funkcji zdefiniowanej przez użytkownika.Upewnij się, że plik /etc/fstab odwołuje się do dysku przy użyciu jego identyfikatora UUID (
by-uuid
).Usuń reguły ujścia i pliki konfiguracji karty sieciowej, aby uniknąć generowania reguł statycznych dla interfejsów Ethernet. Te reguły mogą powodować problemy podczas klonowania maszyny wirtualnej na platformie Microsoft Azure lub funkcji Hyper-V.
sudo rm -f /etc/udev/rules.d/70-persistent-net.rules sudo rm -f /etc/udev/rules.d/85-persistent-net-cloud-init.rules sudo rm -f /etc/sysconfig/network/ifcfg-eth*
Zalecamy edycję pliku /etc/sysconfig/network/dhcp i zmianę parametru
DHCLIENT_SET_HOSTNAME
na następujący:DHCLIENT_SET_HOSTNAME="no"
W pliku /etc/sudoers oznacz jako komentarz lub usuń następujące wiersze, jeśli istnieją:
Defaults targetpw # Ask for the password of the target user i.e. root ALL ALL=(ALL) ALL # WARNING! Only use this setting together with 'Defaults targetpw'!
Upewnij się, że serwer Secure Shell (SSH) jest zainstalowany i skonfigurowany do uruchamiania w czasie rozruchu:
sudo systemctl enable sshd
Wyczyść etap cloud-init:
sudo cloud-init clean --seed --logs
Uruchom następujące polecenia, aby usunąć aprowizację maszyny wirtualnej i przygotować ją do aprowizacji na platformie Azure.
Jeśli migrujesz określoną maszynę wirtualną i nie chcesz tworzyć uogólnionego obrazu, pomiń krok anulowania aprowizacji.
sudo rm -f /var/log/waagent.log sudo waagent -force -deprovision+user sudo export HISTSIZE=0 sudo rm -f ~/.bash_history
Przygotowywanie programu openSUSE 15.4+
W środkowym okienku Menedżera funkcji Hyper-V wybierz maszynę wirtualną.
Wybierz pozycję Połącz , aby otworzyć okno dla maszyny wirtualnej.
W terminalu uruchom polecenie
zypper lr
. Jeśli to polecenie zwraca dane wyjściowe podobne do poniższego przykładu, repozytoria są skonfigurowane zgodnie z oczekiwaniami i nie są konieczne żadne korekty. (Numery wersji mogą się różnić).# Alias Nazwisko Włączona Sprawdzanie grupy zasad grupy Odśwież 1 Cloud:Tools_15.4 Chmura:Narzędzia —> Tak (r ) Tak Tak 2 openSUSE_stable_OSS openSUSE_st-> Tak (r ) Tak Tak 3 openSUSE_stable_Updates openSUSE_st-> Tak (r ) Tak Tak Jeśli komunikat "Nie zdefiniowano repozytoriów" z
zypper lr
repozytoriów należy dodać ręcznie.Poniżej przedstawiono przykłady poleceń dodawania tych repozytoriów (wersje i linki mogą się różnić):
sudo zypper ar -f https://download.opensuse.org/update/openSUSE-stable openSUSE_stable_Updates sudo zypper ar -f https://download.opensuse.org/repositories/Cloud:/Tools/15.4 Cloud:Tools_15.4 sudo zypper ar -f https://download.opensuse.org/distribution/openSUSE-stable/repo/oss openSUSE_stable_OSS
Następnie możesz sprawdzić, czy repozytoria zostały dodane, uruchamiając ponownie polecenie
zypper lr
. Jeśli jedno z odpowiednich repozytoriów aktualizacji nie jest włączone, włącz je za pomocą następującego polecenia:sudo zypper mr -e [NUMBER OF REPOSITORY]
Zaktualizuj jądro do najnowszej dostępnej wersji:
sudo zypper up kernel-default
Możesz też zaktualizować system operacyjny przy użyciu wszystkich najnowszych poprawek:
sudo zypper update
Zainstaluj agenta systemu Linux platformy Azure:
sudo zypper install WALinuxAgent
Zmodyfikuj wiersz rozruchu jądra w konfiguracji GRUB, aby uwzględnić inne parametry jądra dla platformy Azure. W tym celu otwórz plik /boot/grub/menu.lst w edytorze tekstów i upewnij się, że domyślne jądro zawiera następujące parametry:
console=ttyS0 earlyprintk=ttyS0
Ta opcja gwarantuje, że wszystkie komunikaty konsoli są wysyłane do pierwszego portu szeregowego, co może pomóc pomoc techniczna platformy Azure w przypadku problemów z debugowaniem. Ponadto usuń następujące parametry z wiersza rozruchu jądra, jeśli istnieją:
libata.atapi_enabled=0 reserve=0x1f0,0x8
Zalecamy edycję pliku /etc/sysconfig/network/dhcp i zmianę parametru
DHCLIENT_SET_HOSTNAME
na następujące ustawienie:DHCLIENT_SET_HOSTNAME="no"
W pliku /etc/sudoers oznacz jako komentarz lub usuń następujące wiersze, jeśli istnieją. Jest to ważny krok.
Defaults targetpw # ask for the password of the target user i.e. root ALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!
Upewnij się, że serwer SSH jest zainstalowany i skonfigurowany do uruchamiania w czasie rozruchu.
Nie twórz miejsca wymiany na dysku systemu operacyjnego.
Agent systemu Linux platformy Azure może automatycznie skonfigurować miejsce wymiany przy użyciu lokalnego dysku zasobów dołączonego do maszyny wirtualnej po aprowizacji na platformie Azure. Dysk zasobów lokalnych jest dyskiem tymczasowym i zostanie opróżniony po anulowaniu aprowizacji maszyny wirtualnej.
Po zainstalowaniu agenta systemu Linux platformy Azure zmodyfikuj parametry w pliku /etc/waagent.conf w następujący sposób:
ResourceDisk.Format=n ResourceDisk.Filesystem=ext4 ResourceDisk.MountPoint=/mnt/resource ResourceDisk.EnableSwap=n ResourceDisk.SwapSizeMB=2048 ## NOTE: set the size to whatever you need it to be.
Upewnij się, że agent systemu Linux platformy Azure działa podczas uruchamiania:
sudo systemctl enable waagent.service
Uruchom następujące polecenia, aby usunąć aprowizację maszyny wirtualnej i przygotować ją do aprowizacji na platformie Azure.
Jeśli migrujesz określoną maszynę wirtualną i nie chcesz tworzyć uogólnionego obrazu, pomiń krok anulowania aprowizacji.
sudo rm -f ~/.bash_history # Remove current user history sudo rm -rf /var/lib/waagent/ sudo rm -f /var/log/waagent.log sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history # Remove root user history sudo export HISTSIZE=0
Wybierz pozycję Akcja>Zamknij w Menedżerze funkcji Hyper-V.
Następne kroki
Teraz możesz używać wirtualnego dysku twardego SUSE Linux do tworzenia nowych maszyn wirtualnych na platformie Azure. Jeśli po raz pierwszy przekazujesz plik vhd na platformę Azure, zobacz Tworzenie maszyny wirtualnej z systemem Linux na podstawie dysku niestandardowego.