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 rollerna Contributor och User 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.

  1. När du når avsnittet Ange parametervärden i snabbstarten skriver du ned alla variabler i kodexemplet med etiketten Variable block, inklusive location, resourceGroup,database , server, loginoch password. Den här artikeln refererar till databasen resourceGroup som <db-resource-group>.

  2. 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.

    Skärmbild av konfiguration av SQL-databasnätverk TLS 1.0.

  3. 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.

    Skärmbild av brandväggsregler – tillåt Åtkomst till Azure-resurser.

  4. Om du vill testa programmet lokalt kontrollerar du att klientens IPv4-adress finns i listan över tillåtna brandväggsregler

    Skärmbild av brandväggsregler – tillåt klientåtkomst.

  5. Spara dina nätverksändringar.

  6. 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-pluginSkapa 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.

  1. 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
    
  2. 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å till http://localhost:9080/ i webbläsaren för att kontrollera att programmet är tillgängligt och att alla funktioner fungerar.

  3. 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.

  1. 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
    
  2. När containern har startat går du till http://localhost:9080/ i webbläsaren för att komma åt programmet.

  3. 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:

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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
    
  5. Vänta tills du ser 3/3 under READY kolumnen och 3 under AVAILABLE kolumnen och använd sedan Ctrl+C för att stoppa kubectl 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.

Java Liberty-programmet har distribuerats på AKS.

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: