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

In dit artikel wordt uitgelegd hoe u het volgende kunt doen:

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

De Open 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.

In dit artikel wordt gebruikgemaakt van de Azure Marketplace-aanbieding voor Open Liberty of WebSphere Liberty om uw reis naar AKS te versnellen. De aanbieding richt automatisch enkele Azure-resources in, waaronder:

  • Een Azure Container Registry-exemplaar.
  • Een AKS-cluster.
  • Een AGIC-exemplaar (Application Gateway Ingress Controller).
  • De Open Liberty Operator en WebSphere Liberty Operator.
  • Eventueel een containerinstallatiekopieën met Liberty en uw toepassing.

Als u de voorkeur geeft aan handmatige stapsgewijze richtlijnen voor het uitvoeren van Liberty op AKS, raadpleegt u Handmatig een Java-toepassing implementeren met Open Liberty of WebSphere Liberty op een AKS-cluster (Azure Kubernetes Service).

Dit artikel is bedoeld om u snel te helpen bij de implementatie. Voordat u naar productie gaat, moet u de IBM-documentatie over het afstemmen van Liberty verkennen.

Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.

Vereisten

  • 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.
  • Meld u aan bij de Azure CLI met behulp van de opdracht az login . Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Zie Verificatiemethoden voor andere aanmeldingsopties.
  • 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 SE-implementatie, versie 17 of hoger (bijvoorbeeld Eclipse Open J9).
  • Installeer Maven 3.5.0 of hoger.
  • Installeer Docker voor uw besturingssysteem.
  • Zorg ervoor dat Git is geïnstalleerd.
  • Zorg ervoor dat u de rol Eigenaar of Inzender en Gebruikerstoegang hebt toegewezen Beheer istrator-rollen in het abonnement. U kunt rollen controleren door de stappen in Roltoewijzingen weergeven voor een gebruiker of groep te volgen.

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.

Een implementatie van Liberty on AKS maken met behulp van de portal

De volgende stappen helpen u bij het maken van een Liberty Runtime op AKS. Nadat u deze stappen hebt voltooid, hebt u een Container Registry-exemplaar en een AKS-cluster voor het implementeren van uw containertoepassing.

  1. Ga naar de Azure Portal. Voer in het zoekvak boven aan de pagina IBM Liberty in op AKS. Wanneer de suggesties worden weergegeven, selecteert u het ene en alleen de overeenkomst in de sectie Marketplace .

    Als u wilt, kunt u rechtstreeks naar de aanbieding gaan.

  2. Selecteer Maken.

  3. In het deelvenster Basisbeginselen :

    1. Een nieuwe resourcegroep maken. Omdat resourcegroepen uniek moeten zijn binnen een abonnement, kiest u een unieke naam. Een eenvoudige manier om unieke namen te hebben, is door gebruik te maken van een combinatie van uw initialen, de datum van vandaag en een id (bijvoorbeeld ejb0913-java-liberty-project-rg).

    2. Selecteer bij RegioVS - oost.

    3. Maak een omgevingsvariabele in uw shell voor de resourcegroepnamen voor het cluster en de database:

      export RESOURCE_GROUP_NAME=<your-resource-group-name>
      

  4. Selecteer Volgende. In het AKS-deelvenster kunt u desgewenst een bestaand AKS-cluster en containerregister-exemplaar selecteren in plaats van ervoor te zorgen dat de implementatie nieuwe maakt. Met deze keuze kunt u het sidecar-patroon gebruiken, zoals wordt weergegeven in het Azure Architecture Center. U kunt ook de instellingen voor de grootte en het aantal virtuele machines in de AKS-knooppuntgroep aanpassen.

    Voor dit artikel moet u alle standaardinstellingen in dit deelvenster behouden.

  5. Selecteer Volgende. Selecteer Ja in het deelvenster Taakverdeling naast Verbinding maken om de gateway te Azure-toepassing?. In deze sectie kunt u de volgende implementatieopties aanpassen:

    • Voor virtueel netwerk en subnet kunt u desgewenst het virtuele netwerk en subnet aanpassen waarin de implementatie de resources plaatst. U hoeft de resterende waarden niet te wijzigen op basis van de standaardwaarden.

    • Voor TLS/SSL-certificaat kunt u het TLS/SSL-certificaat opgeven vanuit Azure-toepassing Gateway. Laat de standaardwaarden staan om ervoor te zorgen dat de aanbieding een zelfondertekend certificaat genereert.

      Ga niet naar productie met een zelfondertekend certificaat. Zie Een zelfondertekend openbaar certificaat maken om uw toepassing te verifiëren voor meer informatie over zelfondertekende certificaten.

    • U kunt op cookies gebaseerde affiniteit inschakelen selecteren, ook wel plaksessies genoemd. In dit artikel worden plaksessies gebruikt, dus zorg ervoor dat u deze optie selecteert.

  6. Selecteer Volgende. In het deelvenster Operator en toepassing worden in dit artikel alle standaardinstellingen gebruikt. U kunt echter de volgende implementatieopties aanpassen:

    • U kunt WebSphere Liberty Operator implementeren door Ja te selecteren voor de optie die DOOR IBM wordt ondersteund? Als u de standaardwaarde Nee verlaat, wordt Open Liberty Operator geïmplementeerd.
    • U kunt een toepassing voor de geselecteerde operator implementeren door Ja te selecteren voor de optie Een toepassing implementeren?. Als u de standaardwaarde Nee verlaat, wordt er geen toepassing geïmplementeerd.
  7. Selecteer Beoordelen en maken om de geselecteerde opties te valideren. Wanneer u Maken ziet in het deelvenster Controleren en maken, selecteert u deze nadat de validatie is geslaagd.

    De implementatie kan maximaal 20 minuten duren. Terwijl u wacht tot de implementatie is voltooid, kunt u de stappen in de sectie Een Azure SQL Database-exemplaar maken volgen. Nadat u deze sectie hebt voltooid, komt u hier terug en gaat u verder.

Geselecteerde gegevens uit de implementatie vastleggen

Als u van het deelvenster Implementatie bent verwijderd, ziet u in de volgende stappen hoe u terug kunt gaan naar dat deelvenster. Als u zich nog steeds in het deelvenster bevindt waarin wordt weergegeven dat uw implementatie is voltooid, gaat u naar de zojuist gemaakte resourcegroep en gaat u verder met de derde stap.

  1. Selecteer in de hoek van een portalpagina de menuknop en selecteer vervolgens Resourcegroepen.

  2. Voer in het vak met het tekstfilter voor een veld de eerste paar tekens in van de resourcegroep die u eerder hebt gemaakt. Als u de aanbevolen conventie hebt gevolgd, voert u uw initialen in en selecteert u vervolgens de juiste resourcegroep.

  3. Selecteer in de lijst met resources in de resourcegroep de resource met de waarde Type van containerregister.

  4. Selecteer toegangstoetsen in het navigatiedeelvenster onder Instellingen.

  5. Sla de waarden voor de aanmeldingsserver, registernaam, gebruikersnaam en wachtwoord op. U kunt het kopieerpictogram naast elk veld gebruiken om de waarde naar het systeem klembord te kopiëren.

  6. Ga terug naar de resourcegroep waarin u de resources hebt geïmplementeerd.

  7. Selecteer Implementaties in de sectie Instellingen.

  8. Selecteer de meest onderste implementatie in de lijst. De waarde van de implementatienaam komt overeen met de uitgevers-id van de aanbieding. Deze bevat de tekenreeks ibm.

  9. Selecteer Uitvoer in het navigatiedeelvenster.

  10. Als u dezelfde kopieertechniek gebruikt als bij de voorgaande waarden, slaat u de waarden voor de volgende uitvoer op:

    • cmdToConnectToCluster
    • appDeploymentTemplateYaml als de implementatie geen toepassing bevat. Dat wil zeggen dat u Nee hebt geselecteerd voor Het implementeren van een toepassing? wanneer u de Marketplace-aanbieding hebt geïmplementeerd.
    • appDeploymentYaml als de implementatie wel een toepassing bevat. Dat wil zeggen dat u Ja hebt geselecteerd voor een toepassing implementeren?.

    Plak de waarde van appDeploymentTemplateYaml of appDeploymentYaml in een Bash-shell, voeg | grep secretNametoe en voer de opdracht uit.

    De uitvoer van deze opdracht is de naam van het TLS-geheim voor inkomend verkeer, zoals - secretName: secret785e2c. Sla de secretName waarde op.

U gebruikt deze waarden verderop in dit artikel. Houd er rekening mee dat de uitvoer een aantal andere nuttige opdrachten bevat.

Een Azure SQL Database-exemplaar maken

Als u een individuele Azure SQL Database-database wilt maken voor gebruik met uw app, volgt u de stappen in quickstart: Een individuele database maken in Azure SQL Database. Let goed op de volgende verschillen:

  • Noteer in de stap Basisinformatie de waarden voor resourcegroep, databasenaam,< servernaam.database.windows.net>, aanmelding van serverbeheerder en wachtwoord. Dit artikel verwijst naar de waarde van de databaseresourcegroep als <db-resource-group>.

  • Stel in de netwerkstap Verbinding maken iviteitsmethode in op openbaar eindpunt, stel Azure-services en -resources toegang tot deze server in op Ja en stel huidig CLIENT-IP-adres toevoegen in op Ja.

    Schermopname van Azure Portal met het tabblad Netwerken van de pagina SQL Database maken met de Verbinding maken iviteitsmethode en de instellingen voor firewallregels gemarkeerd.

Notitie

De serverloze rekenlaag die u voor deze database hebt geselecteerd, bespaart geld door de database in de slaapstand te zetten tijdens perioden van inactiviteit. De voorbeeld-app mislukt als de database in slaapstand is wanneer de app wordt gestart.

Als u wilt afdwingen dat de database wordt geactiveerd, kunt u een query uitvoeren met behulp van de queryeditor. Volg de stappen in De database opvragen. Hier volgt een voorbeeldquery: SELECT * FROM COFFEE;.

Maak een omgevingsvariabele in uw shell 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 doorgaan met het voorbereiden van AKS om uw Open Liberty-toepassing te hosten.

De voorbeeldtoepassing configureren en implementeren

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 dit artikel. Het voorbeeld bevindt zich op GitHub.

Er zijn enkele voorbeelden in de opslagplaats. In dit artikel wordt gebruikgemaakt van java-app/. Voer de volgende opdrachten uit om het voorbeeld op te halen:

git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
export BASE_DIR=$PWD
git checkout 20240220

Als u een bericht ziet over 'losgekoppelde HEAD'-status, kunt u het veilig negeren. Het bericht betekent alleen dat u een tag hebt uitgecheckt.

Dit is de bestandsstructuur van de toepassing:

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

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 zijn er vijf implementatiebestanden:

  • db-secret.xml: Gebruik dit bestand om Kubernetes Secrets te maken met databaseverbindingsreferenties.
  • openlibertyapplication-agic.yaml: Gebruik dit bestand om de Open Liberty-toepassing te implementeren met AGIC. In dit artikel wordt ervan uitgegaan dat u dit bestand gebruikt.
  • openlibertyapplication.yaml: gebruik dit bestand als u de Open Liberty-toepassing wilt implementeren zonder AGIC.
  • webspherelibertyapplication-agic.yaml: Gebruik dit bestand om de WebSphere Liberty-toepassing te implementeren met AGIC als u WebSphere Liberty Operator eerder in dit artikel hebt geïmplementeerd.
  • webspherelibertyapplication.yaml: Gebruik dit bestand om de WebSphere Liberty-toepassing zonder AGIC te implementeren als u WebSphere Liberty Operator eerder in dit artikel hebt geïmplementeerd.

In de docker-map zijn er twee bestanden om de toepassingsinstallatiekopieën te maken:

  • Dockerfile: Gebruik dit bestand om de toepassingsinstallatiekopieën te bouwen met Open Liberty in dit artikel.
  • Dockerfile-wlp: Gebruik dit bestand om de installatiekopie van de toepassing te bouwen met WebSphere Liberty als u WebSphere Liberty Operator eerder in dit artikel hebt geïmplementeerd.

In de map liberty/config gebruikt u het server.xml-bestand om de databaseverbinding voor het Open Liberty- en WebSphere Liberty-cluster te configureren.

Het project bouwen

Nu u de benodigde eigenschappen hebt, 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 $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

(Optioneel) Uw project lokaal testen

Voer het project lokaal uit en test het voordat u implementeert in Azure. Voor het gemak gebruikt liberty-maven-plugindit artikel . Zie het Open Liberty-artikel Over het bouwen van een webtoepassing met Maven voor meer informatieliberty-maven-plugin.

Voor uw toepassing kunt u iets soortgelijks doen met behulp van een ander mechanisme, zoals uw lokale ontwikkelomgeving. 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 Open Liberty-documentatie.

  1. Start de toepassing met behulp van liberty:run. liberty:run gebruikt ook de omgevingsvariabelen die u eerder hebt gedefinieerd.

    cd $BASE_DIR/java-app
    mvn liberty:run
    
  2. Als de test is geslaagd, wordt er een bericht weergegeven dat lijkt op [INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds de uitvoer van de opdracht. Ga naar http://localhost:9080/ in uw browser en controleer of de toepassing toegankelijk is en of alle functies werken.

  3. Selecteer Ctrl+C om te stoppen.

De installatiekopieën voor AKS-implementatie bouwen

U kunt nu de docker build opdracht uitvoeren om de installatiekopieën te bouwen:

cd $BASE_DIR/java-app/target

docker buildx build --platform linux/amd64 -t javaee-cafe:v1 --pull --file=Dockerfile .

(Optioneel) De Docker-installatiekopieën lokaal testen

Gebruik de volgende stappen 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. Met deze opdracht worden de omgevingsvariabelen gebruikt die u eerder hebt 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. Selecteer Ctrl+C om te stoppen.

De installatiekopieën uploaden naar Azure Container Registry

Upload de gemaakte installatiekopie naar de Container Registry-instantie die u in de aanbieding hebt gemaakt:

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

De toepassing implementeren en testen

Gebruik de volgende stappen om de toepassing te implementeren en te testen:

  1. Verbinding maken naar het AKS-cluster.

    Plak de waarde van cmdToConnectToCluster in een shell en voer de opdracht uit.

  2. Pas het databasegeheim toe:

    cd $BASE_DIR/java-app/target
    kubectl apply -f db-secret.yaml
    

    De uitvoer is secret/db-secret-sql created.

  3. Het implementatiebestand toepassen:

    kubectl apply -f openlibertyapplication-agic.yaml
    
  4. Wacht totdat alle pods opnieuw zijn opgestart met behulp van de volgende opdracht:

    kubectl get pods --watch
    

    Uitvoer die vergelijkbaar is met het volgende voorbeeld geeft aan dat alle pods worden uitgevoerd:

    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
    
  5. Controleer de resultaten:

    1. Haal het adres op van de toegangsbeheerobjectresource die is geïmplementeerd met de toepassing:

      kubectl get ingress
      

      Kopieer de waarde van ADDRESS vanuit de uitvoer. Deze waarde is het openbare FRONT-end-IP-adres van het geïmplementeerde Application Gateway-exemplaar.

    2. Ga naar de https://<ADDRESS> toepassing testen. Voor uw gemak maakt u met deze shell-opdracht een omgevingsvariabele waarvan u de waarde rechtstreeks in de browser kunt plakken:

      export APP_URL=https://$(kubectl get ingress | grep javaee-cafe-cluster-agic-ingress | cut -d " " -f14)/
      echo $APP_URL
      

      Als de webpagina niet correct wordt weergegeven of een 502 Bad Gateway fout retourneert, wordt de app nog steeds op de achtergrond gestart. Wacht enkele minuten en probeer het opnieuw.

Resources opschonen

Om Azure-kosten te voorkomen, moet u overbodige resources opschonen. Wanneer u het cluster niet meer nodig hebt, gebruikt u de opdracht az group delete om de resourcegroep, de containerservice, het containerregister, de 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

Meer informatie vindt u in de volgende verwijzingen: