Delen via


Een Java-toepassing handmatig implementeren met Open Liberty of WebSphere Liberty in een AKS-cluster (Azure Kubernetes Service)

Dit artikel bevat stapsgewijze instructies voor het uitvoeren van Open/WebSphere Liberty in Azure.

In dit artikel wordt uitgelegd hoe u de volgende taken uitvoert:

  • Voer uw Java-, Java EE-, Jakarta EE- of MicroProfile-toepassing uit op de Open Liberty- of WebSphere Liberty-runtime.
  • Bouw de Docker-installatiekopieën van de toepassing met behulp van Liberty-containerinstallatiekopieën.
  • Implementeer de containertoepassing in een AKS-cluster (Azure Kubernetes Service) met behulp van de Liberty Operator.

De Liberty Operator vereenvoudigt de implementatie en het beheer van toepassingen die worden uitgevoerd op Kubernetes-clusters. Met de Open Liberty Operator of WebSphere Liberty Operator kunt u ook geavanceerdere bewerkingen uitvoeren, zoals het verzamelen van traceringen en dumps.

Zie Een Java-toepassing implementeren met Open Liberty/WebSphere Liberty op een AKS-cluster (Azure Kubernetes Service) voor een meer geautomatiseerde oplossing die uw reis naar AKS versnelt.

Zie de projectpagina Open Liberty voor meer informatie over Open Liberty. Zie de WebSphere Liberty-productpagina voor meer informatie over IBM WebSphere Liberty.

Dit artikel is bedoeld om u snel te helpen bij de implementatie. Voordat u naar productie gaat, moet u Tuning Liberty verkennen.

Als u feedback wilt geven of nauw wilt samenwerken aan uw migratiescenario's met het technische team dat WebSphere op Azure-oplossingen ontwikkelt, vult u deze korte enquête over WebSphere-migratie in en neemt u uw contactgegevens op. Het team van programmamanagers, architecten en technici neemt onmiddellijk contact met u op om nauwe samenwerking te initiëren.

Vereisten

  • Een Azure-abonnement. Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
  • Bereid een lokale computer voor waarop Windows, macOS of Linux is geïnstalleerd.
  • Installeer de Azure CLI. Als u windows of macOS gebruikt, kunt u overwegen om de Azure CLI uit te voeren in een Docker-container. Zie De Azure CLI uitvoeren in een Docker-container voor meer informatie.
  • Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Zie Extensies gebruiken en beheren met de Azure CLI voor meer informatie over extensies.
  • Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie. Voor dit artikel is ten minste versie 2.31.0 van de Azure CLI vereist.
  • Installeer een Java Standard Edition(SE)-implementatie, versie 17 of hoger (bijvoorbeeld Eclipse Open J9).
  • Installeer Maven versie 3.5.0 of hoger.
  • Installeer Docker voor uw besturingssysteem.
  • Zorg ervoor dat Git is geïnstalleerd.
  • Zorg ervoor dat u de Owner rol of de ContributorUser Access Administrator rollen in het abonnement hebt toegewezen. U kunt de toewijzing controleren door de stappen in Azure-roltoewijzingen weergeven te volgen met behulp van Azure Portal.

Notitie

U kunt de opdrachten in dit artikel ook uitvoeren vanuit Azure Cloud Shell. Bij deze benadering zijn alle vereiste hulpprogramma's vooraf geïnstalleerd, met uitzondering van Docker.

Aanmelden bij Azure

Als u dit nog niet hebt gedaan, meldt u zich aan bij uw Azure-abonnement met behulp van de opdracht az login en volgt u de aanwijzingen op het scherm.

az login

Notitie

U kunt de meeste Azure CLI-opdrachten in PowerShell op dezelfde wijze uitvoeren als in Bash. Het verschil bestaat alleen wanneer u variabelen gebruikt. In de volgende secties wordt het verschil in verschillende tabbladen behandeld wanneer dat nodig is.

Als er meerdere Azure-tenants zijn gekoppeld aan uw Azure-referenties, moet u opgeven bij welke tenant u zich wilt aanmelden. U kunt dit doen met de --tenant optie. Bijvoorbeeld: az login --tenant contoso.onmicrosoft.com.

Een brongroep maken

Een Azure-resourcegroep is een logische groep waarin Azure-resources worden geïmplementeerd en beheerd.

Maak een resourcegroep met de naam java-liberty-project met behulp van de opdracht az group create in de locatie eastus. Deze resourcegroep wordt later gebruikt voor het maken van het ACR-exemplaar (Azure Container Registry) en het AKS-cluster.

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

Een ACR-exemplaar maken

Gebruik de opdracht az acr create om het ACR-exemplaar te maken. In het volgende voorbeeld wordt een ACR-exemplaar gemaakt met de naam youruniqueacrname. Zorg ervoor dat uwuniqueacrname uniek is binnen Azure.

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

Na korte tijd ziet u een JSON-uitvoer die de volgende regels bevat:

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

Verbinding maken met het ACR-exemplaar

U moet zich aanmelden bij het ACR-exemplaar voordat u een installatiekopieën naar het exemplaar kunt pushen. Gebruik de volgende opdrachten om de verbinding te controleren:

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

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

U ziet Login Succeeded aan het einde van de opdrachtuitvoer als u bent aangemeld bij het ACR-exemplaar.

Een AKS-cluster maken

Gebruik de opdracht az aks create om een AKS-cluster te maken. In het volgende voorbeeld wordt een cluster met de naam myAKSCluster gemaakt met één knooppunt. Het voltooien van deze opdracht duurt enkele minuten.

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

Na een paar minuten wordt de opdracht voltooid en retourneert JSON-geformatteerde informatie over het cluster, inclusief de volgende uitvoer:

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

Verbinding maken met het AKS-cluster

Als u een Kubernetes-cluster wilt beheren, gebruikt u kubectl, de Kubernetes-opdrachtregelclient. Als u lokaal wilt installeren kubectl , gebruikt u de opdracht az aks install-cli , zoals wordt weergegeven in het volgende voorbeeld:

az aks install-cli

Gebruik de opdracht az aks get-credentials om kubectl zodanig te configureren dat er verbinding wordt gemaakt met het Kubernetes-cluster. Bij deze opdracht worden referenties gedownload en wordt Kubernetes CLI geconfigureerd voor het gebruik van deze referenties.

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

Notitie

De bovenstaande opdracht maakt gebruik van de standaardlocatie voor het Kubernetes-configuratiebestand, namelijk ~/.kube/config. U kunt een andere locatie opgeven voor uw Kubernetes-configuratiebestand met behulp van --file.

Als u de verbinding met uw cluster wilt controleren, gebruikt u de opdracht kubectl get om een lijst met clusterknooppunten te retourneren.

kubectl get nodes

In de volgende voorbeelduitvoer ziet u het enkele knooppunt dat is gemaakt in de vorige stappen. Zorg ervoor dat de status van het knooppunt Ready is:

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

Een Azure SQL-database maken

In deze sectie maakt u een individuele Azure SQL Database-database voor gebruik met uw app.

Maak één database in Azure SQL Database door de Azure CLI- of PowerShell-stappen in quickstart te volgen: Een individuele Azure SQL Database-database maken. Gebruik de volgende aanwijzingen terwijl u het artikel doorloopt en ga vervolgens terug naar dit document nadat u de databaseserver hebt gemaakt en geconfigureerd.

  1. Wanneer u de sectie Parameterwaarden instellen van de quickstart bereikt, kopieert en slaat u de waarden van alle variabelen in het codevoorbeeld op met het label Variable block, inclusief location, resourceGroup, serverdatabase, , en .passwordlogin Dit artikel verwijst naar de database resourceGroup als <db-resource-group>.

  2. Nadat u de databaseserver hebt gemaakt, gaat u naar de zojuist gemaakte server in Azure Portal. Stel in het deelvenster Netwerken onder het tabblad Connectiviteit de minimale TLS-versie in op TLS 1.0.

    Schermopname van het configureren van TLS 1.0 voor SQL Database-netwerken.

  3. Selecteer in het deelvenster Netwerken op het tabblad Openbare toegang de optie Azure-services en -resources toegang geven tot deze server.

    Schermopname van firewallregels: toegang tot Azure-resources toestaan.

  4. Als u de toepassing lokaal wilt testen, controleert u of het IPv4-adres van de client zich in de acceptatielijst van firewallregels bevindt

    Schermopname van firewallregels: clienttoegang toestaan.

  5. Sla uw netwerkwijzigingen op.

  6. Gebruik de volgende opdracht om een omgevingsvariabele te maken voor de naam van de resourcegroep voor de database:

    export DB_RESOURCE_GROUP_NAME=<db-resource-group>
    

Nu u de database en het AKS-cluster hebt gemaakt, kunt u AKS voorbereiden om Liberty te hosten.

Open Liberty Operator installeren

Nadat u het cluster hebt gemaakt en er verbinding mee hebt gemaakt, installeert u de Open Liberty Operator.

Installeer de Open Liberty Operator door de volgende opdrachten uit te voeren:

# 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

De installatiekopieën van de toepassing configureren en bouwen

Als u uw Liberty-toepassing wilt implementeren en uitvoeren op het AKS-cluster, kunt u uw toepassing in een container opslaan als docker-installatiekopieën met behulp van Open Liberty-containerinstallatiekopieën of WebSphere Liberty-containerinstallatiekopieën.

Volg de stappen in deze sectie om de voorbeeldtoepassing te implementeren in de Liberty Runtime. In deze stappen wordt Maven gebruikt.

De toepassing uitchecken

Kloon de voorbeeldcode voor deze handleiding. Het voorbeeld bevindt zich op GitHub. Er zijn enkele voorbeelden in de opslagplaats. In dit artikel wordt java-app gebruikt. Hier ziet u de bestandsstructuur van de toepassing.

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

Als u een bericht ziet over 'losgekoppelde HEAD'-status, is dit bericht veilig te negeren. Het betekent alleen dat je een tag hebt uitgecheckt.

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

De directory's java, resources en web-app bevatten de broncode van de voorbeeldtoepassing. De code declareert en gebruikt een gegevensbron met de naam jdbc/JavaEECafeDB.

In de aks-map bevinden zich twee implementatiebestanden. db-secret.xml wordt gebruikt voor het maken van Kubernetes-geheimen met databaseverbindingsreferenties. Het bestand openlibertyapplication.yaml wordt gebruikt om de toepassingsinstallatiekopie te implementeren. In de docker-map zijn er twee bestanden om de toepassingsinstallatiekopieën te maken met Open Liberty of WebSphere Liberty.

In directory liberty/config wordt de server.xml gebruikt voor het configureren van de databaseverbinding voor het Open Liberty- en WebSphere Liberty-cluster.

Het project bouwen

Nu u de benodigde eigenschappen hebt verzameld, kunt u de toepassing bouwen. Het POM-bestand voor het project leest veel variabelen uit de omgeving. Als onderdeel van de Maven-build worden deze variabelen gebruikt om waarden in te vullen in de YAML-bestanden in src/main/aks. U kunt iets soortgelijks doen voor uw toepassing buiten Maven als u wilt.

cd <path-to-your-repo>/java-app

# The following variables are used for deployment file generation into target/
export LOGIN_SERVER=${LOGIN_SERVER}
export REGISTRY_NAME=${REGISTRY_NAME}
export USER_NAME=${USER_NAME}
export PASSWORD=${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>

mvn clean install

(Optioneel) Uw project lokaal testen

U kunt het project nu lokaal uitvoeren en testen voordat u implementeert in Azure. Gebruik voor het gemak de liberty-maven-plugin. Zie Een webtoepassing bouwen met Maven voor meer informatie over de liberty-maven-pluginwebtoepassing. Voor uw toepassing kunt u iets soortgelijks doen met behulp van een ander mechanisme, zoals uw lokale IDE. U kunt ook overwegen de liberty:devc optie te gebruiken die is bedoeld voor ontwikkeling met containers. Meer informatie vindt liberty:devc u in de Liberty docs.

Notitie

Als u een serverloze database-implementatie hebt geselecteerd, controleert u of uw SQL-database niet in de onderbrekingsmodus is gegaan. Een manier om dit te doen, is om u aan te melden bij de databasequery-editor, zoals beschreven in quickstart: De Azure Portal-queryeditor (preview) gebruiken om een query uit te voeren op Azure SQL Database.

  1. Start de toepassing met behulp van liberty:run. liberty:run maakt gebruik van de omgevingsvariabelen die zijn gedefinieerd in de vorige stap.

    cd <path-to-your-repo>/java-app
    mvn liberty:run
    
  2. Controleer of de toepassing werkt zoals verwacht. Als dit lukt, ziet u een bericht dat lijkt op [INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds. in de uitvoer van de opdracht. Ga in uw browser om http://localhost:9080/ te controleren of de toepassing toegankelijk is en alle functies werken.

  3. Druk op Ctrl+C om te stoppen.

De installatiekopieën voor AKS-implementatie bouwen

U kunt nu de docker buildx build opdracht uitvoeren om de installatiekopieën te bouwen, zoals wordt weergegeven in het volgende voorbeeld:

cd <path-to-your-repo>/java-app/target

# If you are running with Open Liberty
docker buildx --platform linux/amd64 build -t javaee-cafe:v1 --pull --file=Dockerfile .

# If you are running with WebSphere Liberty
docker buildx --platform linux/amd64 build -t javaee-cafe:v1 --pull --file=Dockerfile-wlp .

(Optioneel) De Docker-installatiekopieën lokaal testen

U kunt nu de volgende stappen gebruiken om de Docker-installatiekopieën lokaal te testen voordat u implementeert in Azure.

  1. Voer de installatiekopieën uit met behulp van de volgende opdracht. Deze opdracht maakt gebruik van de omgevingsvariabelen die eerder zijn gedefinieerd.

    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
    
  2. Nadat de container is gestart, gaat u naar http://localhost:9080/ uw browser om toegang te krijgen tot de toepassing.

  3. Druk op Ctrl+C om te stoppen.

De installatiekopie uploaden naar ACR

Upload vervolgens de ingebouwde installatiekopie naar de ACR die u in de vorige stappen hebt gemaakt.

Als u dit nog niet hebt gedaan, meldt u zich aan bij het containerregister met behulp van de volgende opdracht:

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

Gebruik de volgende opdrachten om de containerinstallatiekopieën te taggen en te pushen:

docker tag javaee-cafe:v1 ${LOGIN_SERVER}/javaee-cafe:v1
docker push ${LOGIN_SERVER}/javaee-cafe:v1

De toepassing implementeren in het AKS-cluster

Gebruik de volgende stappen om de Liberty-toepassing te implementeren op het AKS-cluster:

  1. Koppel het ACR-exemplaar aan het AKS-cluster, zodat het AKS-cluster wordt geverifieerd om een installatiekopie op te halen uit het ACR-exemplaar, zoals wordt weergegeven in het volgende voorbeeld:

    az aks update \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $CLUSTER_NAME \
        --attach-acr $REGISTRY_NAME
    
  2. Pas het databasegeheim en het implementatiebestand toe door de volgende opdrachten uit te voeren:

    cd <path-to-your-repo>/java-app/target
    
    # Apply database secret
    kubectl apply -f db-secret.yaml
    
    # Apply deployment file
    kubectl apply -f openlibertyapplication.yaml
    
  3. Bepaal of het OpenLibertyApplication exemplaar wordt gemaakt door de volgende opdracht uit te voeren:

    kubectl get openlibertyapplication javaee-cafe-cluster
    

    Als het goed is, ziet u uitvoer die lijkt op het volgende voorbeeld:

    NAME                        IMAGE                                                   EXPOSED   RECONCILED   AGE
    javaee-cafe-cluster         youruniqueacrname.azurecr.io/javaee-cafe:1.0.25         True         59s
    
  4. Bepaal of de implementatie die door de operator is gemaakt, gereed is door de volgende opdracht uit te voeren:

    kubectl get deployment javaee-cafe-cluster --watch
    

    Als het goed is, ziet u uitvoer die lijkt op het volgende voorbeeld:

    NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
    javaee-cafe-cluster         0/3     3            0           20s
    
  5. Wacht totdat u onder de READY kolom en 3 onder de AVAILABLE kolom ziet 3/3 en gebruik vervolgens Ctrl+C om het kubectl controleproces te stoppen.

De toepassing testen

Wanneer de toepassing wordt uitgevoerd, maakt een Kubernetes Load Balancer-service de front-end van de toepassing beschikbaar op internet. Dit proces kan enige tijd duren.

Als u de voortgang wilt controleren, gebruikt u de opdracht kubectl get service met het --watch argument, zoals wordt weergegeven in het volgende voorbeeld:

kubectl get service javaee-cafe-cluster --watch

Als het goed is, ziet u uitvoer die lijkt op het volgende voorbeeld:

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

Nadat het EXTERNAL-IP-adres is gewijzigd van in behandeling tot een daadwerkelijk openbaar IP-adres, gebruikt u Ctrl+C om het kubectl controleproces te stoppen.

Als er enige tijd is verstreken tussen het uitvoeren van de stappen in deze sectie en de voorgaande, controleert u of de database actief is, indien nodig. Zie de vorige opmerking met betrekking tot het onderbreken van de database.

Open een webbrowser naar het externe IP-adres van uw service (52.152.189.57 voor het bovenstaande voorbeeld) om de startpagina van de toepassing weer te geven. Als de pagina niet correct is geladen, komt dat doordat de app wordt gestart. U kunt even wachten en de pagina later vernieuwen. U ziet nu de podnaam van uw toepassingsreplica's linksboven op de pagina. Wacht enkele minuten en vernieuw de pagina om een andere podnaam weer te geven vanwege taakverdeling die door het AKS-cluster wordt geleverd.

De Java liberty-toepassing is geïmplementeerd op AKS.

Notitie

Op dit moment gebruikt de toepassing geen HTTPS. U wordt aangeraden TLS in te schakelen met uw eigen certificaten. Zie TLS gebruiken met een ingangscontroller in Azure Kubernetes Service (AKS) voor meer informatie.

Resources opschonen

Om Azure-kosten te voorkomen, moet u overbodige resources opschonen. Wanneer het cluster niet meer nodig is, gebruikt u de opdracht az group delete om de resourcegroep, containerservice, containerregister, database en alle gerelateerde resources te verwijderen.

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

Volgende stappen

In deze handleiding vindt u meer informatie over verwijzingen die worden gebruikt:

Zie Azure Cache voor Redis gebruiken in Java met redisson Redis-client om Azure Cache voor Redis op te nemen in een Java-app.

Als u opties wilt verkennen om WebSphere-producten uit te voeren in Azure, raadpleegt u Wat zijn oplossingen voor het uitvoeren van de WebSphere-producten in Azure?