Vorbereiten eines virtuellen Ubuntu-Computers für Azure

Gilt für: ✔️ Linux-VMs ✔️ Flexible Skalierungsgruppen

Ubuntu veröffentlicht jetzt auf https://cloud-images.ubuntu.com/ offizielle Azure-VHDs zum Herunterladen. Wenn Sie Ihr eigenes spezialisiertes Ubuntu-Image für Azure erstellen müssen, empfiehlt es sich, mit diesen bekannten, funktionierenden VHDs zu beginnen und sie nach Bedarf anzupassen, statt das manuelle Verfahren unten anzuwenden. Die neuesten Versionen des Images können sich immer an folgenden Speicherorten befinden:

Voraussetzungen

In diesem Artikel wird davon ausgegangen, dass Sie bereits ein Ubuntu Linux-Betriebssystem auf einer virtuellen Festplatte installiert haben. Sie können VHD-Dateien mit unterschiedlichen Tools erstellen, beispielsweise mit einer Virtualisierungslösung wie Hyper-V. Anweisungen hierzu finden Sie unter Installieren der Hyper-V-Rolle und Konfigurieren eines virtuellen Computers.

Installationshinweise zu Ubuntu

  • Beachten Sie auch den Artikelabschnitt Allgemeine Linux-Systemanforderungen, in dem weitere Tipps zur Vorbereitung von Linux für Azure enthalten sind.
  • Das VHDX-Format wird in Azure nicht unterstützt, dafür jedoch virtuelle Festplatten mit fester Größe. Sie können den Datenträger mit dem Hyper-V-Manager oder dem Cmdlet Convert-VHD in das VHD-Format konvertieren.
  • Beim Installieren des Linux-Systems empfiehlt es sich, anstelle von LVM (bei vielen Installationen oftmals voreingestellt) die Standardpartitionen zu verwenden. Dadurch lässt sich vermeiden, dass ein LVM-Namenskonflikt mit geklonten virtuellen Computern auftritt, besonders dann, wenn ein BS-Datenträger zu Fehlerbehebungszwecken mit einem anderen virtuellen Computer verbunden wird. LVM oder RAID können wahlweise auf Datenträgern verwendet werden.
  • Konfigurieren Sie keine Auslagerungspartition auf einem Betriebssystemdatenträger. Der Bereitstellungs-Agent für die Cloudinitialisierung kann so konfiguriert werden, dass er eine Auslagerungsdatei oder eine Auslagerungspartition auf dem temporären Ressourcendatenträger erstellt. Weitere Informationen dazu finden Sie in den folgenden Schritten.
  • Alle VHDs in Azure benötigen eine virtuelle Größe, die auf 1 MB ausgerichtet ist. Beim Konvertieren von einem unformatierten Datenträger in VHD müssen Sie sicherstellen, dass die Größe des unformatierten Datenträgers ein Vielfaches von 1 MB vor der Konvertierung beträgt. Weitere Informationen finden Sie in den Linux-Installationshinweisen.

Manuelle Schritte

Hinweis

Ziehen Sie vor dem Erstellen Ihres eigenen benutzerdefinierten Ubuntu-Images für Azure stattdessen die Verwendung eines vorgefertigten und getesteten Images von https://cloud-images.ubuntu.com/ in Betracht.

  1. Wählen Sie den virtuellen Computer im mittleren Fensterbereich des Hyper-V-Managers.

  2. Klicken Sie auf Verbinden , um das Fenster für den virtuellen Computer zu öffnen.

  3. Ersetzen Sie die aktuellen Repositorys im Image, um die Azure-Repositorys von Ubuntu zu verwenden.

    Vor der Bearbeitung von /etc/apt/sources.list sollten Sie eine Sicherung erstellen:

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. Die Ubuntu Azure-Images verwenden jetzt den für Azure angepassten Kernel. Aktualisieren Sie das Betriebssystem auf den neuesten, für Azure angepassten Kernel, und installieren Sie Azure Linux-Tools (einschließlich Hyper-V-Abhängigkeiten), indem Sie die folgenden Befehle ausführen:
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. Modifizieren Sie die Boot-Zeile des Kernels für Grub, um zusätzliche Kernel-Parameter für Azure einzubinden. Öffnen Sie dafür /etc/default/grub in einem Texteditor. Suchen Sie nach der Variablen GRUB_CMDLINE_LINUX_DEFAULT (oder fügen Sie diese gegebenenfalls hinzu), und bearbeiten Sie sie, um die folgenden Parameter einzubinden:
GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300 quiet splash"

Speichern und schließen Sie diese Datei. Führen Sie danach sudo update-grub aus. Dadurch wird sichergestellt, dass alle Konsolennachrichten zum ersten seriellen Port gesendet werden. Dieser kann Azure bei der Behebung von Fehlern in technischer Hinsicht unterstützen.

  1. Stellen Sie sicher, dass der SSH-Server installiert und konfiguriert ist, damit er beim Booten hochfährt. Dies ist für gewöhnlich die Standardeinstellung.

  2. Installieren Sie die Cloudinitialisierung (den Bereitstellungs-Agent) und den Azure Linux-Agent (den Handler für Gasterweiterungen). Die Cloudinitialisierung konfiguriert mit netplan die Konfiguration des Systemnetzwerks (während der Bereitstellung und jedem nachfolgenden Start) und gdisk partitioniert Ressourcendatenträger.

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

Hinweis

Das Paket walinuxagent entfernt unter Umständen die Pakete NetworkManager und NetworkManager-gnome, falls sie installiert sind.

  1. Entfernen Sie die Standardkonfigurationen für cloud-init und die restlichen netplan-Artefakte, die möglicherweise mit der cloud-init-Bereitstellung in Azure in Konflikt stehen:
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. Konfigurieren Sie die Cloudinitialisierung, um das System mithilfe der Azure-Datenquelle bereitzustellen:
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. Konfigurieren Sie den Azure Linux-Agent so, dass er die Bereitstellung mit der Cloudinitialisierung durchführt. Um weitere Informationen zu diesen Optionen zu erhalten, werfen Sie einen Blick auf das WALinuxAgent-Projekt.
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. Bereinigen Sie die Runtimeartefakte und Protokolle von Cloudinitialisierung und Azure Linux-Agent:
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. Führen Sie die folgenden Befehle aus, um den virtuellen Computer zurückzusetzen und ihn für die Bereitstellung in Azure vorzubereiten:

Hinweis

Der Befehl sudo waagent -force -deprovision+user generalisiert das Image, indem versucht wird, das System zu bereinigen und für die erneute Bereitstellung vorzubereiten. Die +user-Option löscht das zuletzt bereitgestellte Benutzerkonto und die zugehörigen Daten.

Warnung

Die Aufhebung der Bereitstellung mit obigem Befehl garantiert nicht, dass alle vertraulichen Informationen aus dem Image gelöscht werden und das Image für eine weitere Verteilung geeignet ist.

sudo waagent -force -deprovision+user
sudo rm -f ~/.bash_history
  1. Klicken Sie im Hyper-V-Manager auf Aktion -> Herunterfahren.

  2. Azure akzeptiert nur VHDs mit fester Größe. Wenn der Betriebssystem-Datenträger des virtuellen Computers keine VHD mit fester Größe ist, verwenden Sie das PowerShell-Cmdlet Convert-VHD, und geben Sie die Option -VHDType Fixed an. Sehen Sie sich hier die Dokumentation zu Convert-VHD an: Convert-VHD.

  3. Führen Sie die folgenden Schritte aus, um eine VM der Generation 2 in Azure zu bringen:

  4. Ändern Sie das Verzeichnis in das EFI-Startverzeichnis:

cd /boot/efi/EFI
  1. Kopieren Sie das Verzeichnis „ubuntu“ in ein neues Verzeichnis namens „boot“:
sudo cp -r ubuntu/ boot
  1. Ändern Sie das Verzeichnis in das neu erstellte boot-Verzeichnis:
cd boot
  1. Benennen Sie die shimx64.efi-Datei um:
sudo mv shimx64.efi bootx64.efi
  1. Benennen Sie die Datei „grub.cfg“ in „bootx64.cfg“ um:
sudo mv grub.cfg bootx64.cfg

Nächste Schritte

Sie können jetzt mit Ihrer Ubuntu-Linux-VHD-Datei neue virtuelle Azure-Computer in Azure erstellen. Wenn Sie zum ersten Mal die VHD-Datei in Azure hochladen, lesen Sie den Artikel Erstellen eines virtuellen Linux-Computers aus einem benutzerdefinierten Datenträger mithilfe der Azure CLI 2.0.