Freigeben über


Verwenden von Java EE JCache mit Open Liberty oder WebSphere Liberty in einem Azure Kubernetes Service-Cluster (AKS)

In diesem Artikel wird beschrieben, wie Sie Java EE JCache in einer containerisierten Anwendung verwenden, die in AKS bereitgestellt wird.

In diesem Leitfaden werden Sie:

  • Erstellen Sie die Infrastruktur, um Ihre Java-, Java EE-, Jakarta EE- oder MicroProfile-Anwendung in der Open Liberty- oder WebSphere Liberty-Runtime auszuführen.
  • Verwenden Sie Java EE JCache, der von Azure Cache für Redis als Sitzungscache unterstützt wird.
  • Erstellen Sie das Docker-Image der Anwendung mithilfe von Open Liberty- oder WebSphere Liberty-Containerimages.
  • Stellen Sie die containerisierte Anwendung mithilfe des Open Liberty-Operators in einem AKS-Cluster bereit.

Dieser Artikel soll Ihnen helfen, schnell zur Bereitstellung zu gelangen. Bevor Sie in die Produktion gehen, sollten Sie Tuning Liberty erkunden.

Wenn Sie an Feedback oder daran interessiert sind, eng mit dem Entwicklungsteam, das die WebSphere-Lösungen für Azure entwickelt, an Ihren Migrationsszenarien 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

  • Ein Azure-Abonnement. Wenn Sie kein Azure-Abonnement besitzen, erstellen Sie ein kostenloses Konto, bevor Sie beginnen.
  • Bereiten Sie einen lokalen Computer mit einem installierten UNIX-ähnlichen Betriebssystem (z. B. Ubuntu, macOS, Windows-Subsystem für Linux) vor.
  • Installieren Sie die Azure CLI, um Azure CLI-Befehle auszuführen.
    • 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. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der 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.
  • Installieren Sie eine Java SE-Implementierung Version 17 oder später (z. B den Microsoft-Build von OpenJDK).
  • Installieren Sie Maven 3.5.0 oder höher.
  • Installieren Sie Docker für Ihr Betriebssystem.
  • Sicherstellen, dass Git installiert ist
  • Stellen Sie sicher, dass Ihnen für das Abonnement entweder die Owner-Rolle oder die Contributor- und User Access Administrator-Rollen zugewiesen wurde. Sie können Ihre Zuweisungen überprüfen, indem Sie die Schritte unter Auflisten von Rollenzuweisungen für einen Benutzer oder eine Gruppe befolgen.

Erstellen der Infrastruktur

Die Schritte in diesem Abschnitt führen Sie zum Erstellen der Anwendungsinfrastruktur in Azure. Nachdem Sie diese Schritte ausgeführt haben, verfügen Sie über eine Azure Container Registry, einen Azure Kubernetes Service-Cluster und eine Azure Cache for Redis-Instanz zum Ausführen der Beispielanwendung.

Erstellen einer Ressourcengruppe

Eine Azure-Ressourcengruppe ist eine logische Gruppe, in der Azure-Ressourcen bereitgestellt und verwaltet werden.

Erstellen Sie am Standort eastus mithilfe des Befehls az group create die Ressourcengruppe java-liberty-project. Diese Ressourcengruppe wird zu einem späteren Zeitpunkt zum Erstellen der Azure Container Registry-Instanz (ACR) und des AKS-Clusters verwendet.

export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus

Erstellen einer ACR-Instanz

Verwenden Sie den Befehl az acr create zum Erstellen der ACR-Instanz. Im folgenden Beispiel wird die ACR-Instanz youruniqueacrname erstellt. Stellen Sie sicher, dass youruniqueacrname in Azure eindeutig ist.

export REGISTRY_NAME=youruniqueacrname
az acr create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --sku Basic \
    --admin-enabled

Nach kurzer Zeit sollte eine JSON-Ausgabe mit Folgendem angezeigt werden:

  "provisioningState": "Succeeded",
  "publicNetworkAccess": "Enabled",
  "resourceGroup": "java-liberty-project",

Alternativ können Sie eine Azure Container Registry-Instanz erstellen, indem Sie die Schritte unter Schnellstart: Erstellen einer Azure-Containerregistrierung über das Azure-Portal ausführen.

Herstellen einer Verbindung mit der ACR-Instanz

Sie müssen sich bei der ACR-Instanz anmelden, bevor Sie ein Image an diese pushen können. Führen Sie die folgenden Befehle zum Überprüfen der Verbindung aus:

export LOGIN_SERVER=$(az acr show \
    --name $REGISTRY_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --query 'loginServer' \
    --output tsv)
export USER_NAME=$(az acr credential show \
    --name $REGISTRY_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --query 'username' \
    --output tsv)
export PASSWORD=$(az acr credential show \
    --name $REGISTRY_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --query 'passwords[0].value' \
    --output tsv)

docker login $LOGIN_SERVER -u $USER_NAME -p $PASSWORD

Wenn Sie sich bei der ACR-Instanz erfolgreich angemeldet haben, sollte am Ende der Befehlsausgabe Login Succeeded angezeigt werden.

Wenn beim Anmelden bei der Azure-Containerregistrierung ein Problem auftritt, lesen Sie die Problembehandlung bei der Registrierungsanmeldung.

Erstellen eines AKS-Clusters

Verwenden Sie den Befehl az aks create, um einen AKS-Cluster zu erstellen und ihm Berechtigungen zum Pullen eines Images aus der ACR-Instanz zu gewähren. Im folgenden Beispiel wird ein Cluster mit dem Namen myAKSCluster mit einem Knoten erstellt. Es dauert mehrere Minuten, bis dieser Befehl abgeschlossen ist.

export CLUSTER_NAME=myAKSCluster
az aks create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-count 1 \
    --generate-ssh-keys \
    --enable-managed-identity \
    --attach-acr $REGISTRY_NAME

Nach wenigen Minuten ist die Ausführung des Befehls abgeschlossen, und es werden Informationen zum Cluster im JSON-Format zurückgegeben, einschließlich der folgenden Zeilen:

  "nodeResourceGroup": "MC_java-liberty-project_myAKSCluster_eastus",
  "privateFqdn": null,
  "provisioningState": "Succeeded",
  "resourceGroup": "java-liberty-project",

Herstellen einer Verbindung mit dem AKS-Cluster

Verwenden Sie zum Verwalten eines Kubernetes-Clusters den Kubernetes-Befehlszeilenclient kubectl. Verwenden Sie für die lokale Installation von kubectl den Befehl az aks install-cli:

az aks install-cli

Mit dem Befehl az aks get-credentials können Sie kubectl für die Verbindungsherstellung mit Ihrem Kubernetes-Cluster konfigurieren. Mit diesem Befehl werden die Anmeldeinformationen heruntergeladen, und die Kubernetes-Befehlszeilenschnittstelle wird für deren Verwendung konfiguriert.

az aks get-credentials \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --overwrite-existing

Überprüfen Sie die Verbindung mit Ihrem Cluster mithilfe des Befehls kubectl get, um eine Liste der Clusterknoten zurückzugeben.

kubectl get nodes

Die folgende Beispielausgabe zeigt den in den vorherigen Schritten erstellten Knoten. Vergewissern Sie sich, dass der Knoten den Status Bereit hat.

NAME                                STATUS   ROLES   AGE     VERSION
aks-nodepool1-xxxxxxxx-yyyyyyyyyy   Ready    agent   76s     v1.18.10

Installieren von Open Liberty Operator

Nachdem Sie den Cluster erstellt und eine Verbindung damit hergestellt haben, installieren Sie den Open Liberty Operator durch Ausführung der folgenden Befehle.

# Install cert-manager Operator
CERT_MANAGER_VERSION=v1.11.2
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/${CERT_MANAGER_VERSION}/cert-manager.yaml

# Install Open Liberty Operator
export OPERATOR_VERSION=1.2.2
mkdir -p overlays/watch-all-namespaces
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/overlays/watch-all-namespaces/olo-all-namespaces.yaml -q -P ./overlays/watch-all-namespaces
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/overlays/watch-all-namespaces/cluster-roles.yaml -q -P ./overlays/watch-all-namespaces
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/overlays/watch-all-namespaces/kustomization.yaml -q -P ./overlays/watch-all-namespaces
mkdir base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/kustomization.yaml -q -P ./base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/open-liberty-crd.yaml -q -P ./base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/open-liberty-operator.yaml -q -P ./base
wget https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/main/deploy/releases/${OPERATOR_VERSION}/kustomize/base/open-liberty-roles.yaml -q -P ./base
kubectl create namespace open-liberty
kubectl apply --server-side -k overlays/watch-all-namespaces

Erstellen einer Azure Cache for Redis-Instanz

Azure Cache for Redis unterstützt die Persistenz von HttpSession für eine Java-Anwendung, die in einem Open Liberty- oder WebSphere Liberty-Server ausgeführt wird. Führen Sie die Schritte in diesem Abschnitt aus, um eine Azure Cache for Redis-Instanz zu erstellen und die Verbindungsinformationen zu notieren. Wir werden diese Informationen später verwenden.

  1. Befolgen Sie die Schritte in Schnellstart: Verwenden von Azure Cache for Redis in Java bis zu, aber nicht einschließlich, Grundlegendes zum Java-Beispiel.

  2. Kopieren Sie den Hostnamen und den primären Zugriffsschlüssel für Ihre Azure Cache for Redis-Instanz, und führen Sie dann die folgenden Befehle zum Hinzufügen von Umgebungsvariablen aus:

    export REDISCACHEHOSTNAME=<YOUR_HOST_NAME>
    export REDISCACHEKEY=<YOUR_PRIMARY_ACCESS_KEY>
    

Erstellen der Anwendung

Führen Sie die Schritte in diesem Abschnitt aus, um die Beispielanwendung zu erstellen und zu containerisieren. Diese Schritte verwenden Maven liberty-maven-pluginund az acr build. Weitere Informationen zu liberty-maven-plugin finden Sie unter Erstellen einer Webanwendung mit Maven.

Auschecken der Anwendung

Verwenden Sie die folgenden Befehle, um den Beispielcode für diesen Leitfaden zu klonen. Das Beispiel befindet sich im open-liberty-on-aks-Repository in GitHub. Es gibt ein paar Beispiele im Repository. In diesem Artikel wird java-app-jcache verwendet.

git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
git checkout 20230906

Wenn eine Meldung angezeigt wird, dass Sie sich im Status „detached HEAD“ befinden, können Sie diese Meldung problemlos ignorieren. Sie bedeutet nur, dass Sie ein Tag ausgecheckt haben.

Die Anwendung hat die folgende Dateistruktur:

java-app-jcache/
├── pom.xml
└── src
    └── main
        ├── aks
        │   └── openlibertyapplication.yaml
        ├── docker
        │   ├── Dockerfile
        │   └── Dockerfile-wlp
        ├── java
        ├── liberty
        │   └── config
        │       └── server.xml
        ├── redisson
        │   └── redisson-config.yaml
        ├── resources
        └── webapp

Die Verzeichnisse java, resources und webapp enthalten den Quellcode der Beispielanwendung.

Im Verzeichnis aks wird die Bereitstellungsdatei openlibertyapplication.yaml verwendet, um das Anwendungsimage bereitzustellen.

Im docker-Verzeichnis platzieren wir zwei Dockerfiles. Dockerfile wird verwendet, um ein Image mit Open Liberty zu erstellen, und Dockerfile-wlp wird genutzt, um ein Image mit WebSphere Liberty zu erstellen.

Im Verzeichnis liberty/config wird die Datei server.xml verwendet, um den Sitzungscache für den Open Liberty- und den WebSphere Liberty-Cluster zu konfigurieren.

Im redisson-Verzeichnis wird die Datei redisson-config.yaml verwendet, um die Verbindung zur Azure Cache for Redis-Instanz zu konfigurieren.

Packen der Anwendung in Container

Um Ihre Liberty-Anwendung im AKS-Cluster bereitzustellen und auszuführen, führen Sie die folgenden Schritte aus, um Ihre Anwendung als Docker-Image zu containerisieren. Sie können die Open Liberty-Containerimages der WebSphere Liberty-Containerimages verwenden.

  1. Ändern Sie das Verzeichnis zu java-app-jcache Ihres lokalen Klons.

  2. Führen Sie mvn clean package zum Verpacken der Anwendung aus.

  3. Führen Sie mvn -Predisson validate aus, um die Redisson-Konfigurationsdatei in den angegebenen Speicherort zu kopieren. In diesem Schritt werden die Werte der Umgebungsvariablen REDISCACHEHOSTNAME und REDISCACHEKEY in die redisson-config.yaml-Datei eingefügt, auf die von der server.xml-Datei verwiesen wird.

  4. Führen Sie zum Testen der Anwendung mvn liberty:dev aus. Wenn der Test erfolgreich ist, sollte The defaultServer server is ready to run a smarter planet. in der Befehlsausgabe angezeigt werden. Die Ausgabe sollte ähnlich wie im folgenden Beispiel angezeigt werden, wenn die Redis-Verbindung erfolgreich ist.

    [INFO] [err] [Default Executor-thread-5] INFO org.redisson.Version - Redisson 3.16.7
    [INFO] [err] [redisson-netty-2-2] INFO org.redisson.connection.pool.MasterPubSubConnectionPool - 1 connections initialized for redacted.redis.cache.windows.net/20.25.90.239:6380
    [INFO] [err] [redisson-netty-2-20] INFO org.redisson.connection.pool.MasterConnectionPool - 24 connections initialized for redacted.redis.cache.windows.net/20.25.90.239:6380
    
  5. Sie können http://localhost:9080/ aufrufen, um zu sehen, dass die Anwendung ausgeführt wird. Aber den Nachweis dafür, dass Redis funktioniert, erhalten Sie in der Ausgabe, die im vorherigen Schritt aufgeführt ist.

  6. Verwenden Sie STRG+C, um die Anwendung zu beenden.

  7. Verwenden Sie die folgenden Befehle, um Werte für die Eigenschaften artifactId und version abzurufen, die in der Datei pom.xml definiert sind.

    export artifactId=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.artifactId}' --non-recursive exec:exec)
    export version=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec)
    
  8. Führen Sie cd target aus, um das Verzeichnis in den Build des Beispiels zu ändern.

  9. Führen Sie einen der folgenden Befehle aus, um das Anwendungsimage zu erstellen und es an die ACR-Instanz zu pushen.

    • Verwenden Sie den folgenden Befehl, um die Erstellung mit einem Open Liberty-Basisimage durchzuführen, wenn Sie die Verwendung von Open Liberty als Lightweight Open Source Java™-Runtime verwenden möchten:

      # Build and tag application image. This causes the ACR instance to pull the necessary Open Liberty base images.
      az acr build -t ${artifactId}:${version} -r $REGISTRY_NAME --resource-group $RESOURCE_GROUP_NAME .
      
    • Verwenden Sie den folgenden Befehl, um ein WebSphere Liberty-Basisimage zu erstellen, wenn Sie bevorzugt eine kommerzielle Version von Open Liberty verwenden möchten:

      # Build and tag application image. This causes the ACR instance to pull the necessary WebSphere Liberty base images.
      az acr build -t ${artifactId}:${version} -r $REGISTRY_NAME --resource-group $RESOURCE_GROUP_NAME --file=Dockerfile-wlp .
      

Bereitstellen der Anwendung

Führen Sie die Schritte in diesem Abschnitt aus, um die containerisierte Beispielanwendung im AKS-Cluster bereitzustellen.

  1. Stellen Sie sicher, dass das aktuelle Arbeitsverzeichnis in Ihrem lokalen Klon java-app-jcache/target ist.

  2. Verwenden Sie die folgenden Befehle, um einen geheimen Schlüssel mit Redisson-Konfigurationsinformationen zu erstellen. Mit diesem geheimen Schlüssel kann die Anwendung eine Verbindung mit der erstellten Azure Cache for Redis-Instanz herstellen.

    export REDISSON_CONFIG_SECRET_NAME=redisson-config-secret
    kubectl create secret generic ${REDISSON_CONFIG_SECRET_NAME} --from-file=$(pwd)/liberty/wlp/usr/servers/defaultServer/redisson-config.yaml
    
  3. Verwenden Sie die folgenden Befehle, um Ihre Liberty-Anwendung mit drei Replikaten im AKS-Cluster bereitzustellen. Die Befehlsausgabe wird auch inline angezeigt.

    # Set number of application replicas
    export REPLICAS=3
    
    # Create OpenLibertyApplication "javaee-cafe-jcache-cluster"
    envsubst < openlibertyapplication.yaml | kubectl create -f -
    
    openlibertyapplication.openliberty.io/javaee-cafe-jcache-cluster created
    
    # Check if OpenLibertyApplication instance is created
    kubectl get openlibertyapplication ${artifactId}-cluster
    
    NAME                               IMAGE                                                         EXPOSED      RECONCILED   AGE
    javaee-cafe-jcache-cluster         youruniqueacrname.azurecr.io/javaee-cafe-jcache:1.0.0                      True         59s
    
    # Check if deployment created by Operator is ready
    kubectl get deployment ${artifactId}-cluster --watch
    
    NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
    javaee-cafe-jcache-cluster         0/3     3            0           20s
    
  4. Warten Sie, bis Ihnen 3/3 unter der Spalte READY und 3 unter der Spalte AVAILABLE angezeigt wird. Verwenden Sie dann Strg+C, um den kubectl-Überwachungsprozess zu beenden.

Testen der Anwendung

Wenn die Anwendung ausgeführt wird, macht ein Kubernetes-Lastenausgleichsdienst das Anwendungs-Front-End im Internet verfügbar. Es kann eine Weile dauern, bis dieser Vorgang abgeschlossen ist.

Verwenden Sie zum Überwachen des Fortschritts den Befehl kubectl get service mit dem Argument --watch.

kubectl get service ${artifactId}-cluster --watch

NAME                               TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)          AGE
javaee-cafe-jcache-cluster         LoadBalancer   10.0.50.29     20.84.16.169    80:31732/TCP     68s

Sobald die EXTERNAL-IP-Adresse von ausstehend in eine tatsächliche öffentliche IP-Adresse geändert wird, verwenden Sie Strg+C, um den kubectl-Überwachungsprozess zu beenden.

Öffnen Sie einen Webbrowser für die externe IP-Adresse Ihres Diensts (20.84.16.169 für das vorstehende Beispiel), um die Startseite der Anwendung anzuzeigen. Wenn die Seite nicht ordnungsgemäß geladen wird, liegt dies daran, dass die App gestartet wird. Sie können einen Moment warten und die Seite später aktualisieren. Der Podname Ihrer Anwendungsreplikate sollte oben links auf der Seite angezeigt werden (javaee-cafe-jcache-cluster-77d54bccd4-5xnzx für diesen Fall).

Screenshot der Java Liberty-Anwendung, die erfolgreich auf A K S bereitgestellt wurde.

Legen Sie im Formular Neuer Kaffee in Sitzung die Werte für die Felder Name und Preis fest, und wählen Sie dann Übermitteln aus. Nach einigen Sekunden wird Anzahl der Übermittlungen: 1 unten auf der Seite angezeigt.

Screenshot der Beispielanwendung, der neuen Kaffee zeigt, der erstellt und in der Sitzung der Anwendung gespeichert wird.

Um zu veranschaulichen, dass der Sitzungscache in allen Replikaten der Anwendung beibehalten wird, führen Sie den folgenden Befehl aus, um das aktuelle Replikat mit dem Podnamen javaee-cafe-jcache-cluster-<pod id from your running app>zu löschen:

kubectl delete pod javaee-cafe-jcache-cluster-77d54bccd4-5xnzx

pod "javaee-cafe-jcache-cluster-77d54bccd4-5xnzx" deleted

Aktualisieren Sie dann die Startseite der Anwendung. Die gleichen Daten werden im Abschnitt Neuer Kaffee in Sitzung angezeigt, aber ein anderer Podname wird oben links auf der Seite aufgeführt.

Führen Sie schließlich die folgenden Schritte aus, um zu veranschaulichen, dass die Sitzungsdaten in der Azure Cache for Redis-Instanz beibehalten werden. Sie können Befehle an Ihre Azure Cache for Redis-Instanz senden, indem Sie Redis Console verwenden.

  1. Finden Sie Ihre Azure Cache for Redis-Instanz aus dem Azure-Portal.

  2. Wählen Sie Konsole aus, um die Redis-Konsole zu öffnen.

  3. Führen Sie die folgenden Befehle aus, um die Sitzungsdaten anzuzeigen:

    scan 0 count 1000 match '*'
    
    hgetall "com.ibm.ws.session.attr.default_host%2F"
    
  4. Suchen Sie auf der Webseite nach cafe.model.entity.Coffee[id=1, name=Coffee 3, price=30.0]. Dies ist der Kaffee, den Sie in der Azure Cache for Redis-Instanz erstellt und beibehalten haben.

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 und alle zugehörigen Ressourcen.

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

Um die Azure Cache for Redis-Instanz zu löschen, suchen Sie den Namen der Ressourcengruppe, und führen Sie den folgenden Befehl aus:

az group delete --name <AZURE_CACHE_FOR_REDIS_RESOURCE_GROUP_NAME> --yes --no-wait

Nächste Schritte

Weitere Informationen finden Sie über die in diesem Handbuch verwendeten Verweise:

Informationen zu Optionen zum Ausführen von WebSphere-Produkten auf Azure finden Sie unter Welche Lösungen gibt es zum Ausführen der WebSphere-Produktfamilie auf Azure?