kalafoto - Fotolia

Legacy-Anwendungen für die Azure-Migration containerisieren

Das Containerisieren von Legacy-Anwendungen für die Cloud-Migration hat viele Vorteile. In diesem Artikel erklären wir, wie Sie Apps in VMs oder Containern zu Azure migrieren.

Das Aufkommen von Technologien wie Docker und Orchestrierungsschichten wie Azure Kubernetes Service machen es möglich, Legacy-Anwendungen zu containerisieren und in die Cloud zu migrieren. Das ist für viele Unternehmen attraktiv, die ihren IT-Stack modernisieren wollen.

Es gibt viele Vorteile, die mit der Containerisierung einhergehen – Portabilität, Effizienz, Agilität der Entwickler, Skalierung und Sicherheit. Das heißt aber nicht, dass alle Legacy-Anwendungen in einer containerisierten Umgebung funktionieren werden. So sollten Sie zum Beispiel Anwendungen, die auf grafische Benutzeroberflächen (Graphic User Interface, GUI) oder vollständige Windows-Umgebungen angewiesen sind, nicht containerisieren.

Für welche Anwendungen eignet sich die Migration im Container?

Da Container in der Regel nur per Kommandozeile (Command Line Interface, CLI) gesteuert werden, funktionieren Anwendungen, die eine Eingabe über eine grafische Benutzeroberfläche erfordern nicht in Containerumgebungen. Sie sollten besser in virtuellen Maschinen (VMs) laufen, da sie eine traditionelle Windows- oder Linux-Umgebung bieten, wie sie für Container oft zu aufwendig sind.

Dem gegenüber sind Webanwendungen, Kommandozeilen-Tools, Datenbanken und Dienste die besten Kandidaten für eine Containerisierung und einfacher umzusetzen. Diese Tools können problemlos nur mit der Kommandozeile und mit einer minimalen Linux- oder Windows-Container-Umgebung ausgeführt werden. Go-basierte Tools können sogar mit einigen Modifikationen auf dem Scratch Image (5 MB) in Docker laufen. Das ermöglicht eine sehr kleine Laufzeitumgebung.

Wenn Sie Ihre Anwendung nach Microsoft Azure verschieben möchten, gibt es einige Möglichkeiten, Anwendungen zu migrieren. Haben Sie zum Beispiel eine IIS-PHP-Webanwendung, die in einer lokalen Hyper-V-VM läuft, können Sie einen der zwei folgenden Migrationspfade wählen:

  • Migrieren Sie die VM mit Azure Migrate, so dass Azure sie erkennt und in eine Azure-VM überführt.

  • Containerisieren Sie die PHP-Anwendung mit einem Tool wie Docker, laden Sie das Image in die Azure Container Registry (ACR) hoch und verwalten Sie den Container mit Azure Kubernetes Service (AKS).

Der Ablauf traditioneller VM-Migrationen

Bevor wir uns ansehen, wie eine VM in einen Container und dann in AKS migriert wird, lassen Sie uns den traditionellen Migrationsprozess durchgehen.

Öffnen Sie zunächst das Azure Portal, navigieren Sie zu Azure Migrate und klicken Sie auf die Option Server bewerten und migrieren.

Klicken Sie auf Projekt erstellen, um zu beginnen. Geben Sie im Übersichtsfenster die Details ein, wie zum Beispiel die Ressourcengruppe und den Namen des Projekts. Ist das Projekt erstellt, können Sie gegebenenfalls Bewertungs- und Migrationswerkzeuge hinzufügen.

Klicken Sie im Bereich Server im Menü links unter dem Abschnitt Migrationsziele auf Ihr neu erstelltes Migrationsprojekt und die Schaltfläche Ermitteln.

Wählen Sie die aktuelle Virtualisierungsmethode aus, in diesem Beispiel Ja, mit Hyper-V, und dann die Zielregion. Bestätigen Sie diese Einstellungen und wählen Sie Ressourcen erstellen, um fortzufahren.

Sobald das Projekt erstellt ist, erhalten Sie Zugriff auf einen Link zum Herunterladen des Hyper-V-Replikationsanbieters (AzureSiteRecoveryProvider.exe), der auf Ihrem Hyper-V-Zielserver installiert wird. Darüber hinaus erhalten Sie eine generierte Registrierungsschlüssel-Importdatei.

Haben Sie die ausführbaren Dateien installiert und den Schlüssel angegeben, verbindet sich der Dienst automatisch mit Azure und listet die verbundenen Server auf. Solange Sie jedoch nicht auf Registrierung abschließen klicken, werden im Hauptbildschirm von Azure Migrate keine für die Migration verfügbaren VMs angezeigt. Der Erkennungsprozess kann einige Zeit in Anspruch nehmen, daher lohnt es sich, bis zu einer Stunde zu warten, bevor Sie fortfahren, um sicherzustellen, dass Azure alles gefunden hat.

Azure zeigt Ihnen eine Liste mit allen gefundenen Hyper-V-Servern, aus der Sie für die Migration auswählen können.

Unter dem Link Replizieren im Migrations-Tool können Sie die Einstellungen und VMs für die Migration auswählen. Sobald Sie eine Replikation starten, wird die Ziel-Hyper-V-VM als herkömmliche VM in die Azure-Umgebung migriert.

Webanwendungen containerisieren

Eine traditionelle VM-Migration ist also nicht schwer, wenn auch zeitaufwändig. Der Nachteil ist, dass Sie nun die gleiche VM in Azure haben wie in Ihrer lokalen Hyper-V-Umgebung. Außerdem haben Sie wahrscheinlich die gleichen Managementprobleme, wie in der Vergangenheit.

Um Ihre hypothetische IIS-PHP-Anwendung zu migrieren, könnten Sie auch Azure Web Apps nutzen, und diese Anwendung in einen PaaS-ähnlichen Dienst verschieben. Es kann jedoch sein, dass das für Sie nicht funktioniert, weil Ihre Anwendung spezielle Anforderungen hat oder weil sie Teil einer größeren Anwendungsinfrastruktur ist. Sie möchten Sie also weiter als eigenen Container verwalten.

Glücklicherweise sind die meisten IIS-Webanwendungen nur eine Sammlung von Code. Das macht es einfach, einen Docker-Container für eine PHP-Anwendung zu erstellen. In der folgenden Anleitung verwenden wir als Beispiel den Container trafex/alpine-nginx-php7 (Abbildung 1), den Sie unter folgendem Link finden.

Abbildung 1: Installation des nginx-Containers auf Alpine Linux.
Abbildung 1: Installation des nginx-Containers auf Alpine Linux.

Navigieren wir zur localhost-Adresse erfahren wir, dass der Container vom Port 8080 auf dem Container zum Port 80 auf der lokalen Maschine abgebildet wir und sehen den phpinfo()-Befehl.

Abbildung 2: Informationen zum Container werden auf der localhost-Seite angezeigt.
Abbildung 2: Informationen zum Container werden auf der localhost-Seite angezeigt.

Migrieren Sie die containerisierte Anwendung nach AKS

Um diesen Container zu AKS zu migrieren, müssen Sie im ersten Schritt eine AKS-Instanz aufsetzen.

Navigieren Sie in Azure zu Kubernetes-Dienste und klicken Sie auf die Option Hinzufügen, dann Kubernetes-Cluster hinzufügen. Da dieses Cluster nur ein Beispiel ist, weisen wir ihm nur wenig Ressourcen zu. Richtige Produktionsinstanzen sollten in mehreren Zonen für Control-Plane-Redundanz verfügbar sein. Sie sollten auch mehrere Knoten enthalten.

Abbildung 3: So sollte der Bildschirm nach dem erfolgreichen Erstellen eines Kubernetes-Clusters in Azure aussehen.
Abbildung 3: So sollte der Bildschirm nach dem erfolgreichen Erstellen eines Kubernetes-Clusters in Azure aussehen.

Sobald Sie Ihren Kubernetes-Cluster haben, erstellen Sie eine ACR-Registry, zu der Sie den Container hinzufügen. Dazu suchen Sie im Azure-Portal Containerregistrierungen und klicken auf Hinzufügen.

Haben Sie eine neue Container-Registry erstellt, besteht der nächste Schritt darin, sie über das Azure CLI mit einem AKS-Cluster zu verbinden (Abbildung 4).

Abbildung 4: Im CLI verbinden Sie die Container-Registry mit dem AKS-Cluster.
Abbildung 4: Im CLI verbinden Sie die Container-Registry mit dem AKS-Cluster.

Nun müssen Sie der ACR ein Image hinzufügen, um die Registry für die Verwendung in AKS verfügbar zu machen. Verknüpfen Sie zunächst Ihr Image in Docker mit dem URI (Uniform Resource Identifier) Ihrer Registry. Dadurch erkennt der Docker-Push-Befehl, wohin er das Image senden soll.

Wenn Sie ein lokales Image in die ACR schieben möchten, können Sie dies mit dem Befehl docker push tun, nachdem Sie sich in der ACR angemeldet haben (Abbildung 5).

Abbildung 5: So senden Sie ein lokales Image an die ACR.
Abbildung 5: So senden Sie ein lokales Image an die ACR.

In der Auflistung der Container im Repository können Sie sehen, dass Ihr neu gepushter Container nun verfügbar ist (Abbildung 6).

Abbildung 6: Prüfen Sie in der CLI, ob der neue Container verfügbar ist.
Abbildung 6: Prüfen Sie in der CLI, ob der neue Container verfügbar ist.

Container im AKS bereitstellen

Bevor Sie Ihren Container bereitstellen, vergewissern Sie sich, dass Sie über Anmeldeinformationen für AKS verfügen. Sie erreichen dies, indem Sie untenstehenden Code verwenden, um die Berechtigungskonfiguration zu erstellen. Dadurch wird die Datei .kube\config ausgefüllt, die den Befehl kubectl informiert.

Als Nächstes erstellen Sie eine einfache YAML-Datei, die Kubernetes mitteilt, wo das Image abgerufen und wie es bereitgestellt werden soll.

apiVersion: apps/v1

kind: Deployment

metadata:

  name: alpine-nginx-php7-deployment

  labels:

    app: alpine-nginx-php7-deployment

spec:

  replicas: 1

  selector:

    matchLabels:

      app: alpine-nginx-php7

  template:

    metadata:

      labels:

        app: alpine-nginx-php7

    spec:

      containers:

      - name: alpine-nginx-php7

        image: lctestregistry.azurecr.io/alpine-nginx-php7:latest

        ports:

        - containerPort: 80

Stellen Sie dann diesen Container mit dem Befehl kubectl bereit, indem Sie die zuvor erstellte YAML-Datei anwenden.

Abbildung 7: Stellen Sie den Container unter Angabe der YAML-Datei bereit.
Abbildung 7: Stellen Sie den Container unter Angabe der YAML-Datei bereit.

Sie können nun sehen, dass der Container im Kubernetes-Cluster läuft, entweder mit dem Befehl kubectl get pods, wie oben zu sehen, oder in der GUI, wie in Abbildung 8.

Abbildung 8: Azure zeigt an, dass der Container im Cluster aktiv ist und läuft.
Abbildung 8: Azure zeigt an, dass der Container im Cluster aktiv ist und läuft.

In diesem Artikel haben wir nur einige wenige der vielen Möglichkeiten aufgezeigt, um Legacy-Anwendungen zu containerisieren und in AKS bereitzustellen, aber sie zeigen beispielhaft, was es dabei zu beachten gilt und wie Sie vorgehen können.

Jede Anwendung ist anders, aber mit den Schritten aus unserer Anleitung können Sie zumindest damit beginnen, nach der besten Option für Ihre Bereitstellung zu suchen.

Erfahren Sie mehr über Containervirtualisierung

ComputerWeekly.de

Close