Distribuera ett Java-program manuellt med Open Liberty eller WebSphere Liberty i ett Azure Kubernetes Service-kluster
I den här artikeln förklaras hur du
- Kör ditt Java-, Java EE-, Jakarta EE- eller MicroProfile-program på Open Liberty- eller WebSphere Liberty-körningen.
- Skapa docker-avbildningen för programmet med hjälp av Liberty-containeravbildningar.
- Distribuera det containerbaserade programmet till ett AKS-kluster (Azure Kubernetes Service) med hjälp av Liberty Operator.
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.
Mer information om Open Liberty finns på open liberty-projektsidan. Mer information om IBM WebSphere Liberty finns på produktsidan för WebSphere Liberty.
Den här artikeln är stegvis manuell vägledning för att köra Open/WebSphere Liberty på Azure. En mer automatiserad lösning som påskyndar din resa till AKS finns i Distribuera ett Java-program med Open Liberty/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 Tuning Liberty.
Om du inte har en Azure-prenumeration kan du skapa ettkostnadsfritt konto innan du börjar.
Förutsättningar
- Förbered en lokal dator med Windows, macOS eller Linux installerat.
- Installera Azure CLI. Om du kör i Windows eller macOS kan du överväga att köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
- 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 SE-implementering, version 17 eller senare (till exempel Eclipse Open J9).
- Installera Maven version 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 tilldelningen genom att följa stegen i Lista Azure-rolltilldelningar med hjälp av Azure-portalen.
Kommentar
Du kan också köra kommandona i den här artikeln från Azure Cloud Shell. Den här metoden har alla nödvändiga verktyg förinstallerade, med undantag för Docker.
Logga in på Azure
Om du inte redan har gjort det loggar du in på din Azure-prenumeration med kommandot az login och följer anvisningarna på skärmen.
az login
Kommentar
Du kan köra de flesta Azure CLI-kommandon i PowerShell på samma sätt som i Bash. Skillnaden finns bara när du använder variabler. I följande avsnitt åtgärdas skillnaden på olika flikar när det behövs.
Om du har flera Azure-klienter associerade med dina Azure-autentiseringsuppgifter måste du ange vilken klientorganisation du vill logga in på. Du kan göra detta med alternativet --tenant
. Exempel: az login --tenant contoso.onmicrosoft.com
Skapa en resursgrupp
En Azure-resursgrupp är en logisk grupp där Azure-resurser distribueras och hanteras.
Skapa en resursgrupp med namnet java-liberty-project med kommandot az group create på platsen eastus . Den här resursgruppen används senare för att skapa Azure Container Registry-instansen (ACR) och AKS-klustret.
export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus
Skapa en ACR-instans
Använd kommandot az acr create för att skapa ACR-instansen. I följande exempel skapas en ACR-instans med namnet youruniqueacrname. Kontrollera att dittuniqueacrname är unikt i Azure.
export REGISTRY_NAME=youruniqueacrname
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--sku Basic \
--admin-enabled
Efter en kort tid bör du se en JSON-utdata som innehåller följande rader:
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",
Anslut till ACR-instansen
Du måste logga in på ACR-instansen innan du kan skicka en bild till den. Kör följande kommandon för att verifiera anslutningen:
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
Du bör se Login Succeeded
i slutet av kommandoutdata om du är inloggad på ACR-instansen.
Skapa ett AKS-kluster
Använd kommandot az aks create för att skapa ett AKS-kluster. I följande exempel skapas ett kluster med namnet myAKSCluster och en enda nod. Det tar flera minuter att slutföra det här kommandot.
export CLUSTER_NAME=myAKSCluster
az aks create \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--node-count 1 \
--generate-ssh-keys \
--enable-managed-identity
Efter några minuter slutförs kommandot och returnerar JSON-formaterad information om klustret, inklusive följande utdata:
"nodeResourceGroup": "MC_java-liberty-project_myAKSCluster_eastus",
"privateFqdn": null,
"provisioningState": "Succeeded",
"resourceGroup": "java-liberty-project",
Anslut till AKS-klustret
För att hantera Kubernetes-kluster använder du kubectl, Kubernetes kommandoradsklient. Om du vill installera kubectl
lokalt använder du kommandot az aks install-cli , som du ser i följande exempel:
az aks install-cli
För att konfigurera kubectl
till att ansluta till ditt Kubernetes-kluster använder du kommandot az aks get-credentials. Det här kommandot laddar ned autentiseringsuppgifter och konfigurerar Kubernetes CLI för att använda dem.
az aks get-credentials \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--overwrite-existing \
--admin
Kommentar
Kommandot ovan använder standardplatsen för Kubernetes-konfigurationsfilen, som är ~/.kube/config
. Du kan ange en annan plats för kubernetes-konfigurationsfilen med hjälp av --file
.
Du kan kontrollera anslutningen till klustret genom att köra kommandot kubectl get för att returnera en lista över klusternoderna.
kubectl get nodes
Följande exempelutdata visar den enskilda nod som skapades i föregående steg. Kontrollera att status för noden är Klar:
NAME STATUS ROLES AGE VERSION
aks-nodepool1-xxxxxxxx-yyyyyyyyyy Ready agent 76s v1.23.8
Skapa en Azure SQL Database
I det här avsnittet skapar du en enkel Azure SQL Database-databas för användning med din app.
Skapa en enkel databas i Azure SQL Database genom att följa Azure CLI- eller PowerShell-stegen i Snabbstart: Skapa en enkel Azure SQL Database-databas. Använd följande anvisningar när du går igenom artikeln och gå sedan tillbaka till det här dokumentet när du har skapat och konfigurerat databasservern.
När du når avsnittet Ange parametervärden i snabbstarten skriver du ned alla variabler i kodexemplet med etiketten
Variable block
, inklusivelocation
,resourceGroup
,database
,server
,login
ochpassword
. Den här artikeln refererar till databasenresourceGroup
som<db-resource-group>
.När du har skapat databasservern går du till den nyligen skapade servern i Azure-portalen. I fönstret Nätverk går du till fliken Anslut ivity och anger TLS-versionen till TLS 1.0.
I fönstret Nätverk går du till fliken Offentlig åtkomst och väljer Tillåt Azure-tjänster och resurser att komma åt den här servern.
Om du vill testa programmet lokalt kontrollerar du att klientens IPv4-adress finns i listan över tillåtna brandväggsregler
Spara dina nätverksändringar.
Använd följande kommando för att skapa en miljövariabel 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 förbereda AKS som värd för Liberty.
Installera Open Liberty-operatorn
När du har skapat och anslutit till klustret installerar du Open Liberty-operatorn.
Installera Open Liberty-operatorn genom att köra följande kommandon:
# 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
Konfigurera och skapa programbilden
Om du vill distribuera och köra ditt Liberty-program i AKS-klustret kan du containerisera ditt program som en Docker-avbildning med hjälp av Open Liberty-containeravbildningar eller WebSphere Liberty-containeravbildningar.
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 guiden. Exemplet finns på GitHub. Det finns några exempel på lagringsplatsen. Den här artikeln använder java-app. Här är programmets filstruktur.
git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
git checkout 20230830
Om du ser ett meddelande om att vara i "frånkopplat HEAD"-tillstånd är det här meddelandet säkert att ignorera. Det betyder bara att du checkade ut en tagg.
java-app
├─ src/main/
│ ├─ aks/
│ │ ├─ db-secret.yaml
│ │ ├─ openlibertyapplication.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 två distributionsfiler. db-secret.xml används för att skapa Kubernetes-hemligheter med autentiseringsuppgifter för DB-anslutning. Filen openlibertyapplication.yaml används för att distribuera programbilden. I docker-katalogen finns det två filer för att skapa programbilden med antingen Open Liberty eller WebSphere Liberty.
I katalogen liberty/config används server.xml för att konfigurera DB-anslutningen för Open Liberty- och WebSphere Liberty-klustret.
Bygga projektet
Nu när du har samlat in 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 <path-to-your-repo>/java-app
# The following variables will be 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
(Valfritt) Testa projektet lokalt
Nu kan du köra och testa projektet lokalt innan du distribuerar till Azure. För enkelhetens skull använder du liberty-maven-plugin
. Mer information om finns i liberty-maven-plugin
Skapa ett webbprogram med Maven. För ditt program kan du göra något liknande med någon annan mekanism, till exempel din lokala IDE. 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 Liberty-dokumenten.
Kommentar
Om du har valt en "serverlös" databasdistribution kontrollerar du att SQL-databasen inte har angett pausläge. Ett sätt att göra detta är att logga in på databasfrågeredigeraren enligt beskrivningen i Snabbstart: Använd Azure-portalens frågeredigerare (förhandsversion) för att fråga Azure SQL Database.
Starta programmet med .
liberty:run
liberty:run
använder miljövariablerna som definierades i föregående steg.cd <path-to-your-repo>/java-app mvn liberty:run
Kontrollera att programmet fungerar som förväntat. Du bör se ett meddelande som liknar
[INFO] [AUDIT] CWWKZ0003I: The application javaee-cafe updated in 1.930 seconds.
i kommandoutdata om det lyckas. Gå tillhttp://localhost:9080/
i webbläsaren för att kontrollera att programmet är tillgängligt och att alla funktioner fungerar.Tryck på Ctrl+C för att stoppa.
Skapa avbildningen för AKS-distribution
Du kan nu köra docker buildx build
kommandot för att skapa avbildningen, som du ser i följande exempel:
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 .
(Valfritt) Testa Docker-avbildningen lokalt
Du kan nu använda 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 miljövariablerna som definierats 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.Tryck på Ctrl+C för att stoppa.
ladda upp avbildningen till ACR.
Ladda sedan upp den skapade avbildningen till den ACR som du skapade i föregående steg.
Om du inte redan har gjort det loggar du in i containerregistret med hjälp av följande kommando:
docker login -u ${USER_NAME} -p ${PASSWORD} ${LOGIN_SERVER}
Använd följande kommandon för att tagga och push-överföra containeravbildningen:
docker tag javaee-cafe:v1 ${LOGIN_SERVER}/javaee-cafe:v1
docker push ${LOGIN_SERVER}/javaee-cafe:v1
Distribuera programmet till AKS-klustret
Använd följande steg för att distribuera Liberty-programmet i AKS-klustret:
Koppla ACR-instansen till AKS-klustret så att AKS-klustret autentiseras för att hämta avbildningen från ACR-instansen, enligt följande exempel:
az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --attach-acr $REGISTRY_NAME
Tillämpa DB-hemligheten och distributionsfilen genom att köra följande kommandon:
cd <path-to-your-repo>/java-app/target # Apply DB secret kubectl apply -f db-secret.yaml # Apply deployment file kubectl apply -f openlibertyapplication.yaml
Kontrollera om instansen
OpenLibertyApplication
skapas genom att köra följande kommando:kubectl get openlibertyapplication javaee-cafe-cluster
Du bör se utdata som liknar följande exempel:
NAME IMAGE EXPOSED RECONCILED AGE javaee-cafe-cluster youruniqueacrname.azurecr.io/javaee-cafe:1.0.25 True 59s
Kontrollera om distributionen som skapats av operatorn är klar genom att köra följande kommando:
kubectl get deployment javaee-cafe-cluster --watch
Du bör se utdata som liknar följande exempel:
NAME READY UP-TO-DATE AVAILABLE AGE javaee-cafe-cluster 0/3 3 0 20s
Vänta tills du ser
3/3
underREADY
kolumnen och3
underAVAILABLE
kolumnen och använd sedan Ctrl+C för att stoppakubectl
klockprocessen.
Testa programmet
När programmet körs exponerar en Kubernetes-lastbalanserartjänst programmets klientdel till Internet. Den här processen kan ta en stund att slutföra.
Om du vill övervaka förloppet använder du kommandot kubectl get service med --watch
argumentet, som du ser i följande exempel:
kubectl get service javaee-cafe-cluster --watch
Du bör se utdata som liknar följande exempel:
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
När external-IP-adressen ändras från väntande till en faktisk offentlig IP-adress använder du Ctrl+C för att stoppa kubectl
klockprocessen.
Om det gick en stund mellan att köra stegen i det här avsnittet och det föregående, kontrollerar du att databasen är aktiv om det behövs. Se föregående anteckning om databaspaus.
Öppna en webbläsare till tjänstens externa IP-adress (52.152.189.57
i exemplet ovan) för att se programmets startsida. Om sidan inte läses in korrekt beror det på att appen startas. Du kan vänta en stund och uppdatera sidan senare. Du bör se poddnamnet för dina programrepliker som visas längst upp till vänster på sidan. Vänta några minuter och uppdatera sidan för att se ett annat poddnamn som visas på grund av belastningsutjämning som tillhandahålls av AKS-klustret.
Kommentar
För närvarande använder programmet inte HTTPS. Vi rekommenderar att du aktiverar TLS med dina egna certifikat. Mer information finns i Använda TLS med en ingresskontrollant på Azure Kubernetes Service (AKS).
Rensa resurser
För att undvika Azure-avgifter bör du rensa onödiga resurser. När klustret inte längre behövs 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 referenser som används i den här guiden:
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för