Bereitstellen einer Java-Anwendung mit Open Liberty oder WebSphere Liberty in einem Azure Kubernetes Service (AKS)-Cluster
Dieser Artikel demonstriert Folgendes:
- Führen Sie Ihre Java-, Java EE-, Jakarta EE- oder MicroProfile-Anwendung in der Open Liberty- oder IBM WebSphere Liberty-Runtime aus.
- Erstellen Sie das Docker-Image der Anwendung mithilfe von Open Liberty- oder WebSphere Liberty-Containerimages.
- Stellen Sie die containerisierte Anwendung in einem AKS-Cluster (Azure Kubernetes Service) mit dem Open Liberty-Operator oder WebSphere Liberty-Operator bereit.
Der Open Liberty-Operator vereinfacht die Bereitstellung und Verwaltung von Anwendungen, die in Kubernetes-Clustern ausgeführt werden. Mit dem Open Liberty- oder WebSphere Liberty-Operator können Sie auch komplexere Vorgänge ausführen, wie z. B. das Sammeln von Ablaufverfolgungen und Sicherungskopien.
Dieser Artikel nutzt das Azure Marketplace-Angebot für Open Liberty oder WebSphere Liberty, um Ihre Umstellung auf AKS zu beschleunigen. Das Angebot stellt automatisch einige Azure-Ressourcen bereit, u. a.:
- Eine Azure Container Registry-Instanz
- Ein AKS-Cluster.
- Eine AGIC-Instanz (Application Gateway Ingress Controller, Application Gateway-Eingangsdatencontroller)
- Den Open Liberty-Operator und den WebSphere Liberty-Operator
- Optional ein Containerimage, das Liberty und Ihre Anwendung enthält
Wenn Sie eine manuelle Schritt-für-Schritt-Anleitung zum Ausführen von Liberty in AKS bevorzugen, finden Sie weitere Informationen unter Manuelles Bereitstellen einer Java-Anwendung mit Open Liberty oder WebSphere Liberty in einem Azure Kubernetes Service-Cluster (AKS).
Dieser Artikel soll Ihnen helfen, schnell zur Bereitstellung zu gelangen. Vor dem Wechsel in die Produktion sollten Sie sich die IBM-Dokumentation zur Optimierung von Liberty ansehen.
Wenn Sie an Feedback oder daran interessiert sind, eng mit dem Entwicklungsteam, das die WebSphere-Lösungen für Azure entwickelt, an Ihren Migrationsszenarios zu arbeiten, füllen Sie diese kurze Umfrage zur WebSphere-Migration aus, und geben Sie Ihre Kontaktinformationen an. Das Team aus Programmmanagern, Architekten und Technikern wird sich umgehend mit Ihnen in Verbindung setzen, um eine enge Zusammenarbeit zu initiieren.
Voraussetzungen
- Eine Azure-Subscription. Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.
- Bereiten Sie einen lokalen Computer mit installiertem UNIX-ähnlichem Betriebssystem vor, z. B. Ubuntu, Azure Linux, macOS oder Windows-Subsystem für Linux.
- Installieren Sie die Azure-Befehlszeilenschnittstelle zum Ausführen von Azure CLI-Befehlen.
- Melden Sie sich mit dem Befehl az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Weitere Anmeldemöglichkeiten finden Sie unter Anmeldung bei Azure mit Azure CLI.
- Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden und Verwalten von Erweiterungen mit der Azure CLI.
- Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen. Für diesen Artikel ist mindestens Version 2.31.0 der Azure CLI erforderlich.
- Installieren einer Java Standard Edition -Implementierung (SE), Version 17 oder höher (z. B . Eclipse Open J9)
- Installieren Sie Maven 3.5.0 oder höher.
- Installieren Sie Docker für Ihr Betriebssystem.
- Stellen Sie sicher, dass Git installiert ist.
- Stellen Sie sicher, dass Ihnen im Abonnement entweder die
Owner
-Rolle oder dieContributor
- undUser Access Administrator
-Rolle zugewiesen wurde. Sie können dies überprüfen, indem Sie die Schritte unter Rollenzuweisungen für einen Benutzer oder eine Gruppe auflisten befolgen.
Die folgenden Schritte führen Sie zum Erstellen einer Liberty-Laufzeitumgebung in AKS
Die folgenden Schritte führen Sie zum Erstellen einer Liberty-Laufzeitumgebung in AKS. Nachdem Sie diese Schritte ausgeführt haben, verfügen Sie über eine Container Registry-Instanz und einen AKS-Cluster für die Bereitstellung Ihrer containerisierten Anwendung.
Öffnen Sie das Azure-Portal. Geben Sie im Suchfeld oben auf der Seite IBM Liberty in AKS ein. Wenn die Vorschläge angezeigt werden, wählen Sie die einzige Übereinstimmung im Abschnitt Marketplace aus.
Sie können auch direkt zum Angebot gehen.
Klicken Sie auf Erstellen.
Im Bereich Grundlagen:
Eine neue Ressourcengruppe erstellen. Da Ressourcengruppen innerhalb eines Abonnements eindeutig sein müssen, wählen Sie einen eindeutigen Namen aus. Eine einfache Möglichkeit, eindeutige Namen zu erhalten, besteht darin, eine Kombination aus Ihren Initialen, dem heutigen Datum und einem Bezeichner zu verwenden, z. B.
ejb0913-java-liberty-project-rg
.Wählen Sie als Region die Option USA, Osten aus.
Erstellen Sie eine Umgebungsvariable in Ihrer Shell für die Ressourcengruppennamen für den Cluster und die Datenbank:
export RESOURCE_GROUP_NAME=<your-resource-group-name>
Wählen Sie Weiter aus. Im Bereich AKS können Sie optional einen vorhandenen AKS-Cluster und eine Container Registry-Instanz auswählen, anstatt die Bereitstellung zu veranlassen, neue zu erstellen. Mit dieser Auswahl können Sie das Sidecar-Muster nutzen, wie im Azure Architecture Center gezeigt. Sie können auch die Einstellungen für die Größe und Anzahl der virtuellen Computer im AKS-Knotenpool anpassen.
Behalten Sie für die Zwecke dieses Artikels einfach alle Standardwerte in diesem Bereich bei.
Wählen Sie Weiter aus. Wählen Sie im Bereich Lastenausgleich neben Mit Azure Application Gateway verbinden? die Option Ja aus. In diesem Bereich können Sie die folgenden Bereitstellungsoptionen anpassen:
Sie können die Werte für Virtuelles Netzwerk und Subnetz optional mit dem virtuellen Netzwerk und dem Subnetz anpassen, in dem die Bereitstellung die Ressourcen platziert. Bei den verbleibenden Werte müssen die Standardwerte nicht geändert werden.
Unter TLS/SSL-Zertifikat können Sie das TLS/SSL-Zertifikat von Azure Application Gateway angeben. Übernehmen Sie die Standardwerte, damit das Angebot ein selbstsigniertes Zertifikat generiert.
Gehen Sie nicht mit einem selbstsignierten Zertifikat in die Produktion. Weitere Informationen zu selbstsignierten Zertifikaten finden Sie unter Erstellen eines selbstsignierten öffentlichen Zertifikats zum Authentifizieren Ihrer Anwendung.
Sie können die Cookie-basierte Affinität aktivieren, auch bekannt als Sticky Sessions. In diesem Artikel werden persistente Sitzungen verwendet. Achten Sie daher darauf, diese Option auszuwählen.
Wählen Sie Weiter aus. In diesem Artikel werden im Bereich Operator und Anwendung alle Standardwerte verwendet. Sie können jedoch die folgenden Bereitstellungsoptionen anpassen:
- Sie können den WebSphere Liberty-Operator bereitstellen, indem Sie Ja für die Option IBM unterstützt? auswählen. Durch Belassen der Standardeinstellung Nein wird der Open Liberty Operator bereitgestellt.
- Sie können eine Anwendung für den ausgewählten Operator bereitstellen, indem Sie Ja für die Option Anwendung bereitstellen? auswählen. Wenn Sie die Standardeinstellung Nein belassen, wird keine Anwendung bereitgestellt.
Wählen Sie Überprüfen + erstellen, um Ihre ausgewählten Optionen zu bestätigen. Wenn im Bereich Überprüfen + erstellen nach dem Überprüfungsdurchlauf die Option Erstellen angezeigt wird, wählen Sie diese Option aus.
Die Bereitstellung kann bis zu 20 Minuten dauern. Während Sie auf den Abschluss der Bereitstellung warten, können Sie die Schritte im Abschnitt Erstellen einer Azure SQL-Datenbankinstanz ausführen. Kehren Sie nach dem Abschluss dieses Abschnitts hierher zurück, und fahren Sie fort.
Erfassen Sie ausgewählte Informationen aus der Bereitstellung
Wenn Sie den Bereich Bereitstellung wird durchgeführt verlassen haben, zeigen Ihnen die folgenden Schritte, wie Sie zu diesem Bereich zurückkehren. Wenn Sie sich noch in dem Bereich befinden, in dem Ihre Bereitstellung wurde abgeschlossen. angezeigt wird, wechseln Sie zur neu erstellten Ressourcengruppe, und fahren Sie mit dem dritten Schritt fort.
Wählen Sie in der Ecke einer beliebigen Portalseite die Menüschaltfläche und anschließend Ressourcengruppen aus.
Geben Sie in das Feld mit dem Text Nach einem beliebigen Feld filtern die ersten Buchstaben der zuvor erstellten Ressourcengruppe ein. Wenn Sie der empfohlenen Konvention gefolgt sind, geben Sie Ihre Initialen ein, und wählen Sie dann die entsprechende Ressourcengruppe aus.
Wählen Sie in der Liste der Ressourcen in der Ressourcengruppe die Ressource mit Containerregistrierung als Typ aus.
Wählen Sie im Navigationsbereich unter Einstellungen die Option Zugriffsschlüssel aus.
Speichern Sie die Werte für Anmeldeserver, Registrierungsname, Benutzername und Kennwort. Sie können auch neben den Feldern auf das Kopiersymbol klicken, um die Werte in die Systemzwischenablage zu kopieren.
Kehren Sie zurück zu der Ressourcengruppe, in der Sie die Ressourcen bereitgestellt haben.
Wählen Sie im Abschnitt Einstellungen die Option Bereitstellungen aus.
Wählen Sie die unterste Bereitstellung in der Liste aus. Der Wert für Bereitstellungsname entspricht der Herausgeber-ID des Angebots. Darin ist die Zeichenfolge
ibm
enthalten.Wählen Sie im Navigationsbereich Ausgaben aus.
Speichern Sie die Werte für die folgenden Ausgaben mit der gleichen Kopiertechnik, die Sie auch für die vorherigen Werte verwendet haben:
cmdToConnectToCluster
appDeploymentTemplateYaml
, wenn die Bereitstellung keine Anwendung enthält. Das heißt, Sie haben Nein für Anwendung bereitstellen? ausgewählt, als Sie das Marketplace-Angebot bereitgestellt haben.appDeploymentYaml
, wenn die Bereitstellung eine Anwendung enthält. Das heißt, Sie haben Ja für Anwendung bereitstellen? ausgewählt.
Fügen Sie den Wert von
appDeploymentTemplateYaml
oderappDeploymentYaml
in eine Bash-Shell ein, fügen Sie| grep secretName
an, und führen Sie den Befehl aus.Die Ausgabe dieses Befehls enthält den TLS-Geheimnisnamen für eingehenden Datenverkehr, z. B.
- secretName: secret785e2c
. Speichern Sie den WertsecretName
.
Sie benötigen diese Werte im weiteren Verlauf dieses Artikels. Beachten Sie, dass in den Ausgaben weitere nützliche Befehle aufgeführt sind.
Erstellen einer Azure SQL-Datenbankinstanz
Führen Sie zum Erstellen einer Einzeldatenbank in Azure SQL-Datenbank für Ihre App die Schritte unter Schnellstart: Erstellen einer Einzeldatenbank – Azure SQL-Datenbank aus. Beachten Sie die folgenden Unterschiede:
Notieren Sie sich im Schritt Grundlagendie Werte von Ressourcengruppe, Datenbankname,<server-name>.database.windows.net, Serveradministratoranmeldung und Kennwort. Dieser Artikel bezieht sich auf den Wert für Ressourcengruppe der Datenbank als
<db-resource-group>
.Legen Sie im Schritt Netzwerk die Option Verbindungsmethode auf Öffentlicher Endpunkt, Azure-Diensten und -Ressourcen den Zugriff auf diesen Server gestatten auf Ja und Aktuelle Client-IP-Adresse hinzufügen auf Ja fest.
Hinweis
Beachten Sie, dass die Ebene „serverloses Computing“, die Sie für diese Datenbank ausgewählt haben, Geld spart, da die Datenbank in Zeiten der Inaktivität in den Ruhezustand versetzt wird. Die Beispiel-App schlägt fehl, wenn sich die Datenbank beim Starten der App im Ruhezustand befindet.
Um die Aktivierung der Datenbank zu erzwingen, können Sie eine Abfrage mit dem Abfrage-Editor ausführen. Führen Sie die Schritte unter Abfragen der Datenbank aus. Hier folgt eine Beispielabfrage: SELECT * FROM COFFEE;
.
Verwenden Sie dann den folgenden Befehl, um eine Umgebungsvariable in der Shell für den Ressourcengruppennamen für die Datenbank zu erstellen:
export DB_RESOURCE_GROUP_NAME=<db-resource-group>
Nachdem die Datenbank und der AKS-Cluster erstellt wurden, können Sie nun mit der Vorbereitung von AKS zum Hosten Ihrer Open Liberty-Anwendung fortfahren.
Konfigurieren und Bereitstellen der Beispielanwendung
Führen Sie die Schritte in diesem Abschnitt aus, um die Beispielanwendung in der Liberty-Laufzeit zu implementieren. In diesen Schritten wird Maven verwendet.
Auschecken der Anwendung
Klonen Sie den Beispielcode für diesen Artikel. Das Beispiel befindet sich auf GitHub.
Es gibt ein paar Beispiele im Repository. In diesem Artikel wird java-app/ verwendet. Führen Sie die folgenden Befehle aus, um das Beispiel abzurufen:
git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
export BASE_DIR=$PWD
git checkout 20240220
Wenn eine Meldung zum Zustand „getrennter HEAD“ angezeigt, können Sie sie problemlos ignorieren. Die Meldung bedeutet einfach, dass Sie ein Tag ausgecheckt haben.
Hier ist die Dateistruktur der Anwendung:
java-app
├─ src/main/
│ ├─ aks/
│ │ ├─ db-secret.yaml
│ │ ├─ openlibertyapplication-agic.yaml
│ │ ├─ openlibertyapplication.yaml
│ │ ├─ webspherelibertyapplication-agic.yaml
│ │ ├─ webspherelibertyapplication.yaml
│ ├─ docker/
│ │ ├─ Dockerfile
│ │ ├─ Dockerfile-wlp
│ ├─ liberty/config/
│ │ ├─ server.xml
│ ├─ java/
│ ├─ resources/
│ ├─ webapp/
├─ pom.xml
Die Verzeichnisse java, resources und webapp enthalten den Quellcode der Beispielanwendung. Der Code deklariert und verwendet eine Datenquelle mit dem Namen jdbc/JavaEECafeDB
.
Im aks-Verzeichnis gibt es fünf Bereitstellungsdateien:
- db-secret.xml: Verwenden Sie diese Datei zum Erstellen von Kubernetes-Geheimnissen mit Anmeldeinformationen für die Datenbankverbindung.
- openlibertyapplication-agic.yaml: Verwenden Sie diese Datei, um die Open Liberty-Anwendung mit AGIC bereitzustellen. In diesem Artikel wird davon ausgegangen, dass Sie diese Datei verwenden.
- openlibertyapplication.yaml: Verwenden Sie diese Datei, wenn Sie die Open Liberty-Anwendung ohne AGIC bereitstellen möchten.
- webspherelibertyapplication-agic.yaml: Verwenden Sie diese Datei, um die WebSphere Liberty-Anwendung mit AGIC bereitzustellen, wenn Sie den WebSphere Liberty-Operator weiter oben in diesem Artikel bereitgestellt haben.
- webspherelibertyapplication.yaml: Verwenden Sie diese Datei, um die WebSphere Liberty-Anwendung ohne AGIC bereitzustellen, wenn Sie den WebSphere Liberty-Operator weiter oben in diesem Artikel bereitgestellt haben.
Im Docker-Verzeichnis gibt es zwei Dateien, um das Anwendungsimage zu erstellen:
- Dockerfile: Verwenden Sie diese Datei, um in diesem Artikel das Anwendungsimage mit Open Liberty zu erstellen.
- Dockerfile-wlp: Verwenden Sie diese Datei, um das Anwendungsimage mit WebSphere Liberty zu erstellen, wenn Sie weiter oben in diesem Artikel den WebSphere Liberty-Operator bereitgestellt haben.
Sie verwenden die Datei server.xml im Verzeichnis liberty/config zum Konfigurieren der Datenbankverbindung für den Open Liberty- und den WebSphere Liberty-Cluster.
Erstellen des Projekts
Sie besitzen nun die erforderlichen Eigenschaften und können die Anwendung erstellen. Die POM-Datei für das Projekt liest viele Variablen aus der Umgebung. Im Rahmen des Maven-Builds werden diese Variablen verwendet, um Werte in den YAML-Dateien in src/main/aks aufzufüllen. Sie können etwas Ähnliches für Ihre Anwendung außerhalb von Maven tun, wenn Sie möchten.
cd $BASE_DIR/java-app
# The following variables are used for deployment file generation into the target.
export LOGIN_SERVER=<Azure-Container-Registry-Login-Server-URL>
export REGISTRY_NAME=<Azure-Container-Registry-name>
export USER_NAME=<Azure-Container-Registry-username>
export PASSWORD='<Azure-Container-Registry-password>'
export DB_SERVER_NAME=<server-name>.database.windows.net
export DB_NAME=<database-name>
export DB_USER=<server-admin-login>@<server-name>
export DB_PASSWORD='<server-admin-password>'
export INGRESS_TLS_SECRET=<ingress-TLS-secret-name>
mvn clean install
(Optional:) Lokales Testen Ihres Projekts
Sie können jetzt das Projekt lokal ausführen und testen, bevor Sie es in Azure bereitstellen. Der Einfachheit halber wird in diesem Artikel liberty-maven-plugin
verwendet. Weitere Informationen zu liberty-maven-plugin
finden Sie im Open Liberty-Artikel Erstellen einer Webanwendung mit Maven.
Für Ihre Anwendung können Sie ähnliche Aktionen mit jedem anderen Mechanismus ausführen, z. B. Ihrer lokalen Entwicklungsumgebung. Sie können auch die Option liberty:devc
für die Entwicklung mit Containern in Betracht ziehen. Weitere Informationen zu liberty:devc
finden Sie in der Open Liberty-Dokumentation.
Starten Sie die Anwendung mithilfe von
liberty:run
.liberty:run
nutzt ebenfalls die zuvor definierten Umgebungsvariablen.cd $BASE_DIR/java-app mvn liberty:run
Wenn der Test erfolgreich ist, wird in der Befehlsausgabe eine Meldung wie
[INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds
angezeigt. Navigieren Sie in Ihrem Browser zuhttp://localhost:9080/
, und überprüfen Sie, ob auf die Anwendung zugegriffen werden kann und alle Funktionen funktionieren.Drücken Sie zum Beenden STRG+C.
Erstellen des Images für die AKS-Bereitstellung
Sie können nun den Befehl docker build
ausführen, um das Image zu erstellen:
cd $BASE_DIR/java-app/target
docker buildx build --platform linux/amd64 -t javaee-cafe:v1 --pull --file=Dockerfile .
(Optional) Lokales Testen des Docker-Images
Führen Sie die folgenden Schritte aus, um das Docker-Image vor der Bereitstellung in Azure lokal zu testen:
Führen Sie das Image mithilfe des folgenden Befehls aus. Dieser Befehl nutzt ebenfalls die zuvor definierten Umgebungsvariablen.
docker run -it --rm -p 9080:9080 \ -e DB_SERVER_NAME=${DB_SERVER_NAME} \ -e DB_NAME=${DB_NAME} \ -e DB_USER=${DB_USER} \ -e DB_PASSWORD=${DB_PASSWORD} \ javaee-cafe:v1
Sobald der Container gestartet wird, wechseln Sie in Ihrem Browser zu
http://localhost:9080/
, um auf die Anwendung zuzugreifen.Drücken Sie zum Beenden STRG+C.
Hochladen des Images in Azure Container Registry
Laden Sie das erstellte Image in die Container Registry-Instanz hoch, die Sie im Angebot erstellt haben:
docker tag javaee-cafe:v1 ${LOGIN_SERVER}/javaee-cafe:v1
docker login -u ${USER_NAME} -p ${PASSWORD} ${LOGIN_SERVER}
docker push ${LOGIN_SERVER}/javaee-cafe:v1
Bereitstellen und Testen der Anwendung
Führen Sie die folgenden Schritte aus, um die Anwendung bereitzustellen und zu testen:
Stellen Sie eine Verbindung mit dem ACS-Cluster her.
Fügen Sie den Wert von
cmdToConnectToCluster
in eine Shell ein, und führen Sie den Befehl aus.Wenden Sie das Datenbankgeheimnis an:
cd $BASE_DIR/java-app/target kubectl apply -f db-secret.yaml
Die Ausgabe lautet
secret/db-secret-sql created
.Wenden Sie die Bereitstellungsdatei an:
kubectl apply -f openlibertyapplication-agic.yaml
Warten Sie, bis alle Pods mit dem folgenden Befehl erfolgreich neu gestartet wurden:
kubectl get pods --watch
Eine Ausgabe wie die folgende Beispielausgabe gibt an, dass alle Pods ausgeführt werden:
NAME READY STATUS RESTARTS AGE javaee-cafe-cluster-agic-67cdc95bc-2j2gr 1/1 Running 0 29s javaee-cafe-cluster-agic-67cdc95bc-fgtt8 1/1 Running 0 29s javaee-cafe-cluster-agic-67cdc95bc-h47qm 1/1 Running 0 29s
Überprüfen Sie die Ergebnisse:
Rufen Sie die Adresse der mit der Anwendung bereitgestellten Eingangsressource ab:
kubectl get ingress
Kopieren Sie den Wert von
ADDRESS
aus der Ausgabe. Dieser Wert ist die öffentliche Front-End-IP-Adresse der bereitgestellten Application Gateway-Instanz.Navigieren Sie zu
https://<ADDRESS>
, um die Anwendung zu testen. Der Einfachheit halber wird mit diesem Shellbefehl eine Umgebungsvariable erstellt, deren Wert Sie direkt in den Browser einfügen können:export APP_URL=https://$(kubectl get ingress | grep javaee-cafe-cluster-agic-ingress | cut -d " " -f14)/ echo $APP_URL
Wenn die Webseite nicht ordnungsgemäß gerendert wird oder der Fehler
502 Bad Gateway
zurückgegeben wird, wird die App weiterhin im Hintergrund gestartet. Warten Sie einige Minuten, und versuchen Sie es dann erneut.
Bereinigen von Ressourcen
Zum Vermeiden von Azure-Gebühren sollten Sie nicht benötigte Ressourcen bereinigen. Wenn der Cluster nicht mehr benötigt wird, entfernen Sie mit dem Befehl az group delete die Ressourcengruppe, den Containerdienst, die Containerregistrierung, die Datenbank und alle zugehörigen Ressourcen.
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
az group delete --name $DB_RESOURCE_GROUP_NAME --yes --no-wait
Nächste Schritte
Weitere Informationen finden Sie in den folgenden Referenzen:
Weitere Informationen zur Bereitstellung der IBM WebSphere-Familie in Azure finden Sie unter Welche Lösungen können die WebSphere-Produktfamilie auf Azure ausführen?
Azure Kubernetes Service