Przygotowywanie maszyny wirtualnej z systemem Ubuntu dla platformy Azure

Dotyczy: ✔️ Maszyny wirtualne z systemem Linux — elastyczne zestawy skalowania ✔️

System Ubuntu publikuje teraz oficjalne dyski VHD platformy Azure do pobrania pod adresem https://cloud-images.ubuntu.com/. Jeśli musisz utworzyć własny wyspecjalizowany obraz ubuntu dla platformy Azure, a nie użyć poniższej procedury ręcznej, zaleca się rozpoczęcie od tych znanych wirtualnych dysków twardych i dostosowywanie zgodnie z potrzebami. Najnowsze wersje obrazów można zawsze znaleźć w następujących lokalizacjach:

Wymagania wstępne

W tym artykule założono, że system operacyjny Ubuntu Linux został już zainstalowany na wirtualnym dysku twardym. Istnieje wiele narzędzi do tworzenia plików vhd, na przykład rozwiązania wirtualizacji, takiego jak Hyper-V. Aby uzyskać instrukcje, zobacz Instalowanie roli funkcji Hyper-V i Konfigurowanie maszyny wirtualnej.

Informacje o instalacji systemu Ubuntu

  • Zobacz również Ogólne informacje o instalacji systemu Linux, aby uzyskać więcej wskazówek dotyczących przygotowywania systemu Linux na platformę Azure.
  • Format 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 Convert-VHD polecenia cmdlet.
  • Podczas instalowania systemu Linux zaleca się używanie partycji standardowych, a nie LVM (często domyślnych dla wielu instalacji). Pozwoli to uniknąć konfliktów nazw LVM z sklonowanymi maszynami wirtualnymi, szczególnie jeśli dysk systemu operacyjnego kiedykolwiek musi być dołączony do innej maszyny wirtualnej w celu rozwiązywania problemów. LvM lub RAID może być używany na dyskach danych, jeśli jest to preferowane.
  • Nie konfiguruj partycji wymiany ani pliku swap na dysku systemu operacyjnego. Agent aprowizacji cloud-init można skonfigurować do tworzenia pliku wymiany lub partycji wymiany na dysku tymczasowego zasobu. Więcej informacji na ten temat można znaleźć w poniższych krokach.
  • Wszystkie wirtualne dyski twarde na platformie Azure muszą mieć rozmiar wirtualny wyrównany do 1 MB. Podczas konwertowania z dysku nieprzetworzonego na dysk VHD należy upewnić się, że rozmiar nieprzetworzonego dysku to wielokrotność 1 MB przed konwersją. Aby uzyskać więcej informacji, zobacz Informacje o instalacji systemu Linux.

Kroki ręczne

Uwaga

Przed podjęciem próby utworzenia własnego niestandardowego obrazu systemu Ubuntu dla platformy Azure rozważ użycie wstępnie utworzonych i przetestowanych obrazów.https://cloud-images.ubuntu.com/

  1. W środkowym okienku Menedżera funkcji Hyper-V wybierz maszynę wirtualną.

  2. Kliknij Połączenie, aby otworzyć okno dla maszyny wirtualnej.

  3. Zastąp bieżące repozytoria na obrazie, aby użyć repozytorium platformy Azure systemu Ubuntu.

    Przed edycją /etc/apt/sources.listzaleca się utworzenie kopii zapasowej:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo sed -i 's#http://archive\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list
sudo sed -i 's#http://[a-z][a-z]\.archive\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list
sudo sed -i 's#http://security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list
sudo sed -i 's#http://[a-z][a-z]\.security\.ubuntu\.com/ubuntu#http://azure\.archive\.ubuntu\.com/ubuntu#g' /etc/apt/sources.list
sudo apt-get update
  1. Obrazy platformy Ubuntu Azure korzystają teraz z jądra dostosowanego do platformy Azure. Zaktualizuj system operacyjny do najnowszego jądra dostosowanego do platformy Azure i zainstaluj narzędzia systemu Linux platformy Azure (w tym zależności funkcji Hyper-V), uruchamiając następujące polecenia:
sudo apt update
sudo apt install linux-azure linux-image-azure linux-headers-azure linux-tools-common linux-cloud-tools-common linux-tools-azure linux-cloud-tools-azure
sudo apt full-upgrade
sudo reboot
  1. Zmodyfikuj wiersz rozruchu jądra dla programu Grub, aby uwzględnić dodatkowe parametry jądra dla platformy Azure. Aby to zrobić, otwórz /etc/default/grub w edytorze tekstów, znajdź zmienną o nazwie GRUB_CMDLINE_LINUX_DEFAULT (lub dodaj ją w razie potrzeby) i zmodyfikuj ją, aby uwzględnić następujące parametry:
GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300 quiet splash"

Zapisz i zamknij ten plik, a następnie uruchom polecenie sudo update-grub. Dzięki temu wszystkie komunikaty konsoli będą wysyłane do pierwszego portu szeregowego, co może pomóc pomocy technicznej platformy Azure w rozwiązywaniu problemów z debugowaniem.

  1. Upewnij się, że serwer SSH jest zainstalowany i skonfigurowany do uruchamiania w czasie rozruchu. Jest to zwykle wartość domyślna.

  2. Zainstaluj pakiet cloud-init (agent aprowizacji) i agenta systemu Linux platformy Azure (program obsługi rozszerzeń gościa). Narzędzie Cloud-init używa netplan do konfigurowania konfiguracji sieci systemowej (podczas aprowizacji i każdego kolejnego rozruchu) oraz gdisk do partycjonowania dysków zasobów.

sudo apt update
sudo apt install cloud-init gdisk netplan.io walinuxagent && systemctl stop walinuxagent

Uwaga

Pakiet walinuxagent może usunąć NetworkManager pakiety i NetworkManager-gnome , jeśli są zainstalowane.

  1. Usuń domyślne konfiguracje cloud-init i netplan pozostałe artefakty, które mogą powodować konflikt z aprowizacją typu cloud-init na platformie Azure:
sudo rm -f /etc/cloud/cloud.cfg.d/50-curtin-networking.cfg /etc/cloud/cloud.cfg.d/curtin-preserve-sources.cfg /etc/cloud/cloud.cfg.d/99-installer.cfg /etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg
sudo rm -f /etc/cloud/ds-identify.cfg
sudo rm -f /etc/netplan/*.yaml
  1. Konfigurowanie pakietu cloud-init w celu aprowizacji systemu przy użyciu źródła danych platformy Azure:
cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg
datasource_list: [ Azure ]
EOF

cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/90-azure.cfg
system_info:
   package_mirrors:
     - arches: [i386, amd64]
       failsafe:
         primary: http://archive.ubuntu.com/ubuntu
         security: http://security.ubuntu.com/ubuntu
       search:
         primary:
           - http://azure.archive.ubuntu.com/ubuntu/
         security: []
     - arches: [armhf, armel, default]
       failsafe:
         primary: http://ports.ubuntu.com/ubuntu-ports
         security: http://ports.ubuntu.com/ubuntu-ports
EOF

cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/10-azure-kvp.cfg
reporting:
  logging:
    type: log
  telemetry:
    type: hyperv
EOF
  1. Skonfiguruj agenta systemu Linux platformy Azure, aby polegał na inicjowaniu obsługi administracyjnej w chmurze. Zapoznaj się z projektem WALinuxAgent, aby uzyskać więcej informacji na temat tych opcji.
sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/g' /etc/waagent.conf
sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=y/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
cat <<EOF | sudo tee -a /etc/waagent.conf
# For Azure Linux agent version >= 2.2.45, this is the option to configure,
# enable, or disable the provisioning behavior of the Linux agent.
# Accepted values are auto (default), waagent, cloud-init, or disabled.
# A value of auto means that the agent will rely on cloud-init to handle
# provisioning if it is installed and enabled, which in this case it will.
Provisioning.Agent=auto
EOF
  1. Czyszczenie artefaktów i dzienników środowiska uruchomieniowego agenta systemu Linux platformy Azure w chmurze i agenta platformy Azure:
sudo cloud-init clean --logs --seed
sudo rm -rf /var/lib/cloud/
sudo systemctl stop walinuxagent.service
sudo rm -rf /var/lib/waagent/
sudo rm -f /var/log/waagent.log
  1. Uruchom następujące polecenia, aby usunąć aprowizację maszyny wirtualnej i przygotować ją do aprowizacji na platformie Azure:

Uwaga

Polecenie sudo waagent -force -deprovision+user uogólnia obraz, próbując oczyścić system i przygotować go do ponownej aprowizacji. Opcja +user usuwa ostatnie aprowizowane konto użytkownika i skojarzone dane.

Ostrzeżenie

Anulowanie aprowizacji przy użyciu powyższego polecenia nie gwarantuje, że obraz jest czyszczone ze wszystkich poufnych informacji i nadaje się do redystrybucji.

sudo waagent -force -deprovision+user
sudo rm -f ~/.bash_history
  1. Kliknij pozycję Akcja —> zamknij w Menedżerze funkcji Hyper-V.

  2. Platforma Azure akceptuje tylko dyski VHD o stałym rozmiarze. Jeśli dysk systemu operacyjnego maszyny wirtualnej nie jest dyskiem VHD o stałym rozmiarze, użyj Convert-VHD polecenia cmdlet programu PowerShell i określ -VHDType Fixed opcję. Zapoznaj się z dokumentami Convert-VHD w tym miejscu: Convert-VHD.

  3. Aby przenieść maszynę wirtualną generacji 2 na platformę Azure, wykonaj następujące kroki:

  4. Zmień katalog na katalog EFI rozruchowego:

cd /boot/efi/EFI
  1. Skopiuj katalog ubuntu do nowego katalogu o nazwie boot:
sudo cp -r ubuntu/ boot
  1. Zmień katalog na katalog rozruchowy nowo utworzona:
cd boot
  1. Zmień nazwę pliku shimx64.efi:
sudo mv shimx64.efi bootx64.efi
  1. Zmień nazwę pliku grub.cfg na bootx64.cfg:
sudo mv grub.cfg bootx64.cfg

Następne kroki

Teraz możesz używać wirtualnego dysku twardego z systemem Ubuntu 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.