Distribuera ett Java-program med Open Liberty eller WebSphere Liberty i ett AKS-kluster (Azure Kubernetes Service)
Den här artikeln visar hur du:
- Kör ditt Java-, Java EE-, Jakarta EE- eller MicroProfile-program på Open Liberty - eller IBM WebSphere Liberty-körningen .
- Skapa programmets Docker-avbildning med hjälp av Open Liberty- eller WebSphere Liberty-containeravbildningar.
- Distribuera det containerbaserade programmet till ett AKS-kluster (Azure Kubernetes Service) med hjälp av Open Liberty Operator eller WebSphere Liberty Operator.
Open Liberty Operator förenklar distributionen och hanteringen av program som körs i Kubernetes-kluster. Med Open Liberty Operator eller WebSphere Liberty Operator kan du också utföra mer avancerade åtgärder, till exempel att samla in spårningar och dumpar.
Den här artikeln använder Azure Marketplace-erbjudandet för Open Liberty eller WebSphere Liberty för att påskynda din resa till AKS. Erbjudandet etablerar automatiskt vissa Azure-resurser, inklusive:
- En Azure Container Registry-instans.
- Ett AKS-kluster.
- En Ingresskontrollant för Application Gateway (AGIC).
- Open Liberty Operator och WebSphere Liberty Operator.
- Du kan också använda en containeravbildning som innehåller Liberty och ditt program.
Om du föredrar manuell stegvis vägledning för att köra Liberty på AKS kan du läsa Distribuera ett Java-program manuellt med Open Liberty eller WebSphere Liberty i ett AKS-kluster (Azure Kubernetes Service).
Den här artikeln är avsedd att hjälpa dig att snabbt komma till distributionen. Innan du går till produktion bör du utforska IBM-dokumentationen om justering av Liberty.
Om du är intresserad av att ge feedback eller arbeta nära dina migreringsscenarier med teknikteamet som utvecklar WebSphere på Azure-lösningar kan du fylla i den här korta undersökningen om WebSphere-migrering och inkludera din kontaktinformation. Teamet med programchefer, arkitekter och ingenjörer kommer snabbt att kontakta dig för att initiera ett nära samarbete.
Förutsättningar
- En Azure-prenumeration. Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.
- Förbered en lokal dator med Unix-liknande operativsystem installerat – till exempel Ubuntu, Azure Linux, macOS eller Windows podsistem za Linux.
- Installera Azure CLI för att köra Azure CLI-kommandon.
- Logga in på Azure CLI med kommandot az login . Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in på Azure med Azure CLI.
- När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda och hantera tillägg med Azure CLI.
- Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade. Den här artikeln kräver minst version 2.31.0 av Azure CLI.
- Installera en Java Standard Edition-implementering (SE) version 17 eller senare (till exempel Eclipse Open J9).
- Installera Maven 3.5.0 eller senare.
- Installera Docker för operativsystemet.
- Kontrollera att Git är installerat.
- Kontrollera att du har tilldelats rollen
Owner
eller rollernaContributor
ochUser Access Administrator
i prenumerationen. Du kan verifiera det genom att följa stegen i Lista rolltilldelningar för en användare eller grupp.
Skapa en Liberty på AKS-distribution med hjälp av portalen
Följande steg hjälper dig att skapa en Liberty-körning på AKS. När du har slutfört de här stegen har du en Container Registry-instans och ett AKS-kluster för att distribuera ditt containerbaserade program.
Gå till Azure-portalen. I sökrutan överst på sidan anger du IBM Liberty på AKS. När förslagen visas väljer du den och matchar bara i avsnittet Marketplace .
Om du vill kan du gå direkt till erbjudandet.
Välj Skapa.
I fönstret Grundläggande :
Skapa en ny resursgrupp. Eftersom resursgrupper måste vara unika i en prenumeration väljer du ett unikt namn. Ett enkelt sätt att få unika namn är att använda en kombination av dina initialer, dagens datum och någon identifierare (till exempel
ejb0913-java-liberty-project-rg
).För Region väljer du USA, östra.
Skapa en miljövariabel i gränssnittet för resursgruppsnamnen för klustret och databasen:
export RESOURCE_GROUP_NAME=<your-resource-group-name>
Välj Nästa. I AKS-fönstret kan du välja ett befintligt AKS-kluster och containerregisterinstans i stället för att orsaka att distributionen skapar nya. Med det här valet kan du använda sidovagnsmönstret, som du ser i Azure Architecture Center. Du kan också justera inställningarna för storleken och antalet virtuella datorer i AKS-nodpoolen.
I den här artikeln behåller du bara alla standardvärden i det här fönstret.
Välj Nästa. Välj Ja bredvid Anslut till Azure Application Gateway i fönstret Belastningsutjämning. I det här avsnittet kan du anpassa följande distributionsalternativ:
För Virtuellt nätverk och undernät kan du välja att anpassa det virtuella nätverket och undernätet som distributionen placerar resurserna i. Du behöver inte ändra de återstående värdena från deras standardvärden.
För TLS/SSL-certifikat kan du ange TLS/SSL-certifikatet från Azure Application Gateway. Lämna värdena som standard så att erbjudandet genererar ett självsignerat certifikat.
Gå inte till produktion med ett självsignerat certifikat. Mer information om självsignerade certifikat finns i Skapa ett självsignerat offentligt certifikat för att autentisera ditt program.
Du kan välja Aktivera cookiebaserad tillhörighet, även kallat sticky-sessioner. Den här artikeln använder klibbiga sessioner, så se till att välja det här alternativet.
Välj Nästa. I fönstret Operator och program använder den här artikeln alla standardvärden. Du kan dock anpassa följande distributionsalternativ:
- Du kan distribuera WebSphere Liberty Operator genom att välja Ja för alternativet IBM stöds?. Om du lämnar standardvärdet Nej distribueras Open Liberty Operator.
- Du kan distribuera ett program för den valda operatorn genom att välja Ja för alternativet Distribuera ett program?. Om du lämnar standardvärdet Nej distribueras inget program.
Välj Granska + skapa för att verifiera de valda alternativen. I fönstret Granska + skapa väljer du när du ser Skapa bli tillgängligt när valideringen har godkänts.
Distributionen kan ta upp till 20 minuter. Medan du väntar på att distributionen ska slutföras kan du följa stegen i avsnittet Skapa en Azure SQL Database-instans. När du har slutfört avsnittet kommer du tillbaka hit och fortsätter.
Samla in vald information från distributionen
Om du har flyttat från fönstret Distribution pågår visar följande steg hur du kommer tillbaka till fönstret. Om du fortfarande är i fönstret som visar Att distributionen är klar går du till den nyligen skapade resursgruppen och går vidare till det tredje steget.
I hörnet på en portalsida väljer du menyknappen och sedan Resursgrupper.
I rutan med texten Filtrera för ett fält anger du de första tecknen i resursgruppen som du skapade tidigare. Om du följde den rekommenderade konventionen anger du dina initialer och väljer sedan lämplig resursgrupp.
I listan över resurser i resursgruppen väljer du resursen med typvärdet containerregister.
I navigeringsfönstret går du till Inställningar och väljer Åtkomstnycklar.
Spara värdena för Inloggningsserver, Registernamn, Användarnamn och Lösenord. Du kan använda kopieringsikonen bredvid varje fält för att kopiera värdet till systemets Urklipp.
Gå tillbaka till den resursgrupp där du distribuerade resurserna.
I avsnittet Inställningar väljer du Distributioner.
Välj den längst nedersta distributionen i listan. Värdet Distributionsnamn matchar utgivar-ID:t för erbjudandet. Den innehåller strängen
ibm
.I navigeringsfönstret väljer du Utdata.
Genom att använda samma kopieringsteknik som med föregående värden sparar du värdena åt sidan för följande utdata:
cmdToConnectToCluster
appDeploymentTemplateYaml
om distributionen inte innehåller något program. Du har alltså valt Nej för Distribuera ett program när du distribuerade Marketplace-erbjudandet.appDeploymentYaml
om distributionen innehåller ett program. Du har alltså valt Ja för Distribuera ett program?.
Klistra in värdet
appDeploymentTemplateYaml
för ellerappDeploymentYaml
i ett Bash-gränssnitt, lägg till| grep secretName
och kör kommandot.Utdata från det här kommandot är det inkommande TLS-hemlighetsnamnet, till exempel
- secretName: secret785e2c
. Spara åt sidan värdetsecretName
.
Du använder dessa värden senare i den här artikeln. Utdata visar flera andra användbara kommandon.
Skapa en Azure SQL Database-instans
Om du vill skapa en enkel Azure SQL Database-databas för användning med din app följer du stegen i Snabbstart: Skapa en enkel databas i Azure SQL Database. Observera noggrant följande skillnader:
I steget Grundläggande skriver du ned värdena för resursgrupp, databasnamn, <servernamn.database.windows.net>, inloggning för serveradministratör och lösenord. Den här artikeln refererar till databasens resursgruppsvärde som
<db-resource-group>
.I steget Nätverk anger du Anslutningsmetod till Offentlig slutpunkt, anger Tillåt Att Azure-tjänster och resurser får åtkomst till den här servern till Ja och anger Lägg till aktuell klient-IP-adress till Ja.
Kommentar
Den serverlösa beräkningsnivå som du valde för den här databasen sparar pengar genom att placera databasen i viloläge under perioder av inaktivitet. Exempelappen misslyckas om databasen är i viloläge när appen startas.
Om du vill tvinga databasen att aktiveras kan du köra en fråga med hjälp av frågeredigeraren. Följ stegen i Fråga databasen. Här är en exempelfråga: SELECT * FROM COFFEE;
.
Använd sedan följande kommando för att skapa en miljövariabel i gränssnittet för resursgruppens namn för databasen:
export DB_RESOURCE_GROUP_NAME=<db-resource-group>
Nu när du har skapat databasen och AKS-klustret kan du fortsätta med att förbereda AKS som värd för ditt Open Liberty-program.
Konfigurera och distribuera exempelprogrammet
Följ stegen i det här avsnittet för att distribuera exempelprogrammet på Liberty-körningen. De här stegen använder Maven.
Kolla in programmet
Klona exempelkoden för den här artikeln. Exemplet finns på GitHub.
Det finns några exempel på lagringsplatsen. Den här artikeln använder java-app/. Kör följande kommandon för att hämta exemplet:
git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
export BASE_DIR=$PWD
git checkout 20240220
Om du ser ett meddelande om att vara i "frånkopplat HEAD"-tillstånd kan du ignorera det på ett säkert sätt. Meddelandet innebär bara att du checkade ut en tagg.
Här är programmets filstruktur:
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
Katalogerna java, resources och webapp innehåller källkoden för exempelprogrammet. Koden deklarerar och använder en datakälla med namnet jdbc/JavaEECafeDB
.
I aks-katalogen finns det fem distributionsfiler:
- db-secret.xml: Använd den här filen för att skapa Kubernetes-hemligheter med autentiseringsuppgifter för databasanslutning.
- openlibertyapplication-agic.yaml: Använd den här filen för att distribuera Open Liberty-programmet med AGIC. Den här artikeln förutsätter att du använder den här filen.
- openlibertyapplication.yaml: Använd den här filen om du vill distribuera Open Liberty-programmet utan AGIC.
- webspherelibertyapplication-agic.yaml: Använd den här filen för att distribuera WebSphere Liberty-programmet med AGIC om du distribuerade WebSphere Liberty Operator tidigare i den här artikeln.
- webspherelibertyapplication.yaml: Använd den här filen för att distribuera WebSphere Liberty-programmet utan AGIC om du distribuerade WebSphere Liberty Operator tidigare i den här artikeln.
I docker-katalogen finns det två filer för att skapa programbilden:
- Dockerfile: Använd den här filen för att skapa programbilden med Open Liberty i den här artikeln.
- Dockerfile-wlp: Använd den här filen för att skapa programbilden med WebSphere Liberty om du distribuerade WebSphere Liberty Operator tidigare i den här artikeln.
I katalogen liberty/config använder du filen server.xml för att konfigurera databasanslutningen för Open Liberty- och WebSphere Liberty-klustret.
Bygga projektet
Nu när du har de nödvändiga egenskaperna kan du skapa programmet. POM-filen för projektet läser många variabler från miljön. Som en del av Maven-versionen används dessa variabler för att fylla i värden i YAML-filerna som finns i src/main/aks. Du kan göra något liknande för ditt program utanför Maven om du vill.
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
(Valfritt) Testa projektet lokalt
Kör och testa projektet lokalt innan du distribuerar till Azure. För enkelhetens skull använder liberty-maven-plugin
den här artikeln . Mer information om liberty-maven-plugin
finns i open liberty-artikeln Skapa ett webbprogram med Maven.
För ditt program kan du göra något liknande genom att använda andra metoder, till exempel din lokala utvecklingsmiljö. Du kan också överväga att använda det liberty:devc
alternativ som är avsett för utveckling med containrar. Du kan läsa mer om liberty:devc
i Open Liberty-dokumentationen.
Starta programmet med hjälp
liberty:run
av .liberty:run
använder också de miljövariabler som du definierade tidigare.cd $BASE_DIR/java-app mvn liberty:run
Om testet lyckas visas ett meddelande som liknar
[INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds
det i kommandoutdata. Gå tillhttp://localhost:9080/
i webbläsaren och kontrollera att programmet är tillgängligt och att alla funktioner fungerar.Välj Ctrl+C för att stoppa.
Skapa avbildningen för AKS-distribution
Nu kan du köra docker build
kommandot för att skapa avbildningen:
cd $BASE_DIR/java-app/target
docker buildx build --platform linux/amd64 -t javaee-cafe:v1 --pull --file=Dockerfile .
(Valfritt) Testa Docker-avbildningen lokalt
Använd följande steg för att testa Docker-avbildningen lokalt innan du distribuerar till Azure:
Kör avbildningen med hjälp av följande kommando. Det här kommandot använder de miljövariabler som du definierade tidigare.
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
När containern har startat går du till
http://localhost:9080/
i webbläsaren för att komma åt programmet.Välj Ctrl+C för att stoppa.
Ladda upp avbildningen till Azure Container Registry
Ladda upp den skapade avbildningen till containerregisterinstansen som du skapade i erbjudandet:
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
Distribuera och testa programmet
Använd följande steg för att distribuera och testa programmet:
Anslut till AKS-klustret.
Klistra in värdet
cmdToConnectToCluster
för i ett gränssnitt och kör kommandot.Använd databashemligheten:
cd $BASE_DIR/java-app/target kubectl apply -f db-secret.yaml
Utdata är
secret/db-secret-sql created
.Använd distributionsfilen:
kubectl apply -f openlibertyapplication-agic.yaml
Vänta tills alla poddar har startats om med hjälp av följande kommando:
kubectl get pods --watch
Utdata som liknar följande exempel anger att alla poddar körs:
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
Kontrollera resultatet:
Hämta adressen till den ingressresurs som distribuerats med programmet:
kubectl get ingress
Kopiera värdet för
ADDRESS
från utdatan. Det här värdet är klientdelens offentliga IP-adress för den distribuerade Application Gateway-instansen.Gå till för att
https://<ADDRESS>
testa programmet. För din bekvämlighet skapar det här gränssnittet en miljövariabel vars värde du kan klistra in direkt i webbläsaren:export APP_URL=https://$(kubectl get ingress | grep javaee-cafe-cluster-agic-ingress | cut -d " " -f14)/ echo $APP_URL
Om webbsidan inte renderas korrekt eller returnerar ett
502 Bad Gateway
fel startar appen fortfarande i bakgrunden. Vänta några minuter och försök sedan igen.
Rensa resurser
För att undvika Azure-avgifter bör du rensa onödiga resurser. När du inte längre behöver klustret använder du kommandot az group delete för att ta bort resursgruppen, containertjänsten, containerregistret, databasen och alla relaterade resurser:
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
az group delete --name $DB_RESOURCE_GROUP_NAME --yes --no-wait
Nästa steg
Du kan lära dig mer från följande referenser:
Mer information om hur du distribuerar IBM WebSphere-familjen i Azure finns i Vad finns lösningar för att köra WebSphere-serien med produkter i Azure?
Azure Kubernetes Service