Dela via


Distribuera ett Java-program manuellt med Open Liberty eller WebSphere Liberty i ett AKS-kluster (Azure Kubernetes Service)

Den här artikeln innehåller stegvisa riktlinjer för att distribuera Open/WebSphere Liberty manuellt i Azure.

Mer specifikt förklarar den här artikeln hur du utför följande uppgifter:

  • Kör ditt Java-, Java Enterprise Edition-program (EE), Jakarta EE- eller MicroProfile-program på Open Liberty- eller WebSphere Liberty-körningen.
  • Skapa programmets Docker-avbildning med az acr build hjälp av Liberty-containeravbildningar.
  • Distribuera det containerbaserade programmet till ett AKS-kluster (Azure Kubernetes Service) med hjälp av en Liberty-operatör.

En Liberty-operatör 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.

En mer automatiserad lösning som påskyndar din resa till AKS med hjälp av en Marketplace-lösning som är tillgänglig på Azure-portalen finns i Distribuera ett Java-program med Open Liberty/WebSphere Liberty i ett AKS-kluster (Azure Kubernetes Service).

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 avsedd att hjälpa dig att snabbt komma till distributionen. Innan du går till produktion bör du utforska Tuning 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

Logga in på Azure

Om du inte redan har gjort det använder du följande steg för att logga in på din Azure-prenumeration:

  1. Öppna Azure CLI eller PowerShell och logga sedan in genom 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.

    Kommentar

    Om du har flera Azure-klienter associerade med dina Azure-autentiseringsuppgifter måste du ange vilken klientorganisation du vill logga in på. Du kan ange en hyresgäst med --tenant alternativet; till exempel az login --tenant contoso.onmicrosoft.com.

  2. Hitta den version och de beroende bibliotek som installeras med hjälp av az version.

  3. Uppgradera till den senaste versionen genom att använda az upgrade.

Kommentar

Om du uppmanas att installera ett Azure CLI-tillägg när du använder Azure CLI gör du det. Mer information om tillägg finns i Använda och hantera tillägg med Azure CLI.

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.

Skapa en resursgrupp

En Azure-resursgrupp är en logisk grupp där Azure-resurser distribueras och hanteras.

Skapa en resursgrupp som kallas java-liberty-project med hjälp av az group create på platsen eastus2. Den här resursgruppen används senare för att skapa Azure Container Registry-instansen och AKS-klustret.

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

Skapa en containerregisterinstans

Använd az acr create för att skapa containerregisterinstansen. I följande exempel skapas en containerregisterinstans med namnet <your-unique-ACR-name>. Ersätt den här platshållaren med ett värde som är unikt i Hela Azure.

Kommentar

Den här artikeln använder den rekommenderade mekanismen för lösenordslös autentisering för Azure Container Registry. Det går fortfarande att använda ett användarnamn och lösenord med docker login när du har använt az acr credential show för att hämta användarnamnet och lösenordet. Att använda ett användarnamn och lösenord är dock mindre säkert än lösenordslös autentisering.

export REGISTRY_NAME=<your-unique-ACR-name>
az acr create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --sku Basic

Efter en kort tid bör du se JSON-utdata som innehåller följande rader:

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

Hämta inloggningsservernamnet för containerregisterinstansen. Du behöver det här värdet när du distribuerar programavbildningen till AKS-klustret senare.

export LOGIN_SERVER=$(az acr show \
    --name $REGISTRY_NAME \
    --query 'loginServer' \
    --output tsv)

Skapa ett AKS-kluster

Använd az aks create för att skapa ett AKS-kluster, som du ser i följande exempel. Det här exemplet skapar ett AKS-kluster med namnet myAKSCluster med en nod och kopplar containerregisterinstansen till den. Det tar flera minuter att slutföra kommandot.

export CLUSTER_NAME=myAKSCluster
az aks create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-count 1 \
    --node-vm-size Standard_DS2_V2 \
    --generate-ssh-keys \
    --enable-managed-identity \
    --attach-acr $REGISTRY_NAME

När kommandot har slutförts returneras JSON-formaterad information om klustret, inklusive följande utdata:

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

Ansluta till AKS-klustret

Använd följande steg för att hantera ditt Kubernetes-kluster:

  1. Installera kubectl, Kubernetes-kommandoradsklienten, med hjälp av az aks install-cli, som visas i följande exempel:

    az aks install-cli
    
  2. Använd az aks get-credentials för att konfigurera kubectl för att ansluta till ditt Kubernetes-kluster. Det här kommandot laddar ned autentiseringsuppgifter och konfigurerar Kubernetes CLI för att använda dem, som du ser i följande exempel:

    Kommentar

    Kommandot använder standardplatsen för Kubernetes-konfigurationsfilen, som är ~/.kube/config. Du kan ange en annan plats för kubernetes-konfigurationsfilen med hjälp --fileav .

    az aks get-credentials \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $CLUSTER_NAME \
        --overwrite-existing \
        --admin
    
  3. Verifiera anslutningen till klustret med hjälp kubectl get av för att returnera en lista över klusternoderna, som du ser i följande exempel:

    kubectl get nodes
    

    Följande exempelutdata visar den enskilda nod som skapades i föregående steg. Kontrollera att nodens status är Ready:

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-xxxxxxxx-yyyyyyyyyy   Ready    <none>  76s     v1.29.9
    

Skapa en Azure SQL Database

Skapa en enkel Azure SQL Database-databas för din app med hjälp av följande steg:

  1. Använd följande kommandon för att ange databasrelaterade miljövariabler. Ersätt <your-unique-sql-server-name> med ett unikt namn för Azure SQL Database-servern.

    export SQL_SERVER_NAME=<your-unique-sql-server-name>
    export DB_NAME=demodb
    
  2. Använd följande kommandon för att skapa en enkel databas och ange den aktuella inloggade användaren som Microsoft Entra-administratör. Mer information finns i Snabbstart: Skapa en enkel databas – Azure SQL Database.

    export ENTRA_ADMIN_NAME=$(az account show \
        --query user.name \
        --output tsv)
    
    az sql server create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $SQL_SERVER_NAME \
        --enable-ad-only-auth \
        --external-admin-principal-type User \
        --external-admin-name $ENTRA_ADMIN_NAME \
        --external-admin-sid $(az ad signed-in-user show --query id --output tsv)
    
    az sql db create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $DB_NAME \
        --server $SQL_SERVER_NAME \
        --edition GeneralPurpose \
        --compute-model Serverless \
        --family Gen5 \
        --capacity 2
    

Kommentar

Du skapar en Azure SQL-server med SQL-autentisering inaktiverad av säkerhetsskäl. Endast Microsoft Entra-ID används för att autentisera till servern. Mer information om hur du aktiverar SQL-autentisering finns i az sql server create.

Skapa en tjänstanslutning i AKS med Service Connector

Använd följande kommandon för att skapa en anslutning mellan AKS-klustret och SQL-databasen med hjälp av Microsoft Entra-arbetsbelastnings-ID och Service Connector. Mer information finns i Skapa en tjänstanslutning i AKS med Service Connector.

# Register the Service Connector and Kubernetes Configuration resource providers
az provider register --namespace Microsoft.ServiceLinker --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait

# Install the Service Connector passwordless extension
az extension add \
    --name serviceconnector-passwordless \
    --upgrade \
    --allow-preview true

# Retrieve the AKS cluster and Azure SQL Server resource IDs
export AKS_CLUSTER_RESOURCE_ID=$(az aks show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --query id \
    --output tsv)

export AZURE_SQL_SERVER_RESOURCE_ID=$(az sql server show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $SQL_SERVER_NAME \
    --query id \
    --output tsv)

# Create a user-assigned managed identity used for workload identity
export USER_ASSIGNED_IDENTITY_NAME=workload-identity-uami
az identity create \
    --resource-group ${RESOURCE_GROUP_NAME} \
    --name ${USER_ASSIGNED_IDENTITY_NAME}

# Retrieve the user-assigned managed identity resource ID
export UAMI_RESOURCE_ID=$(az identity show \
    --resource-group ${RESOURCE_GROUP_NAME} \
    --name ${USER_ASSIGNED_IDENTITY_NAME} \
    --query id \
    --output tsv)

# Create a service connection between your AKS cluster and your SQL database using Microsoft Entra Workload ID
az aks connection create sql \
    --connection akssqlconn \
    --client-type java \
    --source-id $AKS_CLUSTER_RESOURCE_ID \
    --target-id $AZURE_SQL_SERVER_RESOURCE_ID/databases/$DB_NAME \
    --workload-identity $UAMI_RESOURCE_ID

Felsök felmeddelanden

az aks connection create sql Om kommandot skapar ett felmeddelande hittar du felmeddelandet i följande lista och använder sedan anvisningarna för att felsöka problemet:

  • Dependency pyodbc can't be installed, please install it manually

    Det här felmeddelandet anger att pyodbc paketet inte kan installeras, troligtvis på grund av behörighetsproblem. Åtgärda problemet med hjälp av följande steg:

    1. Hitta platsen för Python som fungerar med Azure CLI genom att köra följande kommando:

      az --version
      

      Utdata ska innehålla Python location , till exempel Python location '/opt/az/bin/python3'.

    2. Kopiera Python location-värdet.

    3. Använd följande kommando för att installera pyodbc paketet i sudo läge. Ersätt <python-location> med den Python-plats som du kopierade i föregående steg.

      sudo <python-location> -m pip install pyodbc
      
  • libodbc.so: kan inte öppna fil för delat objekt: Ingen sådan fil eller katalog

  • Installera odbc 17/18 manuellt för SQL Server

    Dessa fel indikerar att odbc drivrutinen inte är installerad. Åtgärda problemet med hjälp av följande steg:

    Kommentar

    Du bör använda Microsoft Entra-arbetsbelastnings-ID för säker åtkomst till din Azure SQL Database utan att använda SQL-autentisering. Om du behöver använda SQL-autentisering ignorerar du stegen i det här avsnittet och använder användarnamnet och lösenordet för att ansluta till Azure SQL Database.

    1. Om du använder Linux öppnar du Installera Microsoft ODBC-drivrutinen för SQL Server (Linux). Om du använder MacOS öppnar du Installera Microsoft ODBC-drivrutinen för SQL Server (macOS).

    2. Följ anvisningarna för att installera Microsoft ODBC-drivrutinen (18 eller 17) för SQL Server.

    3. Använd az aks connection create sql igen för att skapa tjänstanslutningen, som du ser i följande exempel:

      az aks connection create sql \
          --connection akssqlconn \
          --client-type java \
          --source-id $AKS_CLUSTER_RESOURCE_ID \
          --target-id $AZURE_SQL_SERVER_RESOURCE_ID/databases/$DB_NAME \
          --workload-identity $UAMI_RESOURCE_ID
      

Hämta tjänstkontot och hemligheten som skapats av Service Connector

Använd följande steg för att autentisera med Azure SQL Database:

  1. Hämta tjänstkontot och hemligheten som skapats av Service Connector genom att följa anvisningarna i avsnittet Uppdatera containern i Självstudie: Ansluta en AKS-app till Azure SQL Database. Använd alternativet för att direkt skapa en distribution med hjälp av YAML-exempelkodfragmentet.

    Kommentar

    Hemligheten som skapas av Service Connector innehåller ett AZURE_SQL_CONNECTIONSTRING värde, som är en lösenordsfri anslutningssträng till Azure SQL Database. Mer information finns i exempelvärdet från avsnittet Användartilldelad hanterad identitet i Integrera Azure SQL Database med Service Connector.

  2. Från de markerade avsnitten i kubernetes-exempeldistributionens serviceAccountName YAML kopierar du värdena och secretRef.name , som du ser i följande exempel:

    serviceAccountName: <service-account-name>
    containers:
    - name: raw-linux
       envFrom:
          - secretRef:
             name: <secret-name>
    
  3. Definiera miljövariabler med hjälp av följande kommandon. Se till att ersätta <service-account-name> och <secret-name> med de värden som du kopierade i föregående steg:

    export SERVICE_ACCOUNT_NAME=<service-account-name>
    export SECRET_NAME=<secret-name>
    

    Dessa värden används i nästa avsnitt för att distribuera Liberty-programmet till AKS-klustret.

Installera Open Liberty-operatorn

I det här avsnittet installerar du Open Liberty Operator i AKS-klustret som värd för Liberty-programmet.

Installera Open Liberty Operator med hjälp av följande kommandon:

Kommentar

Den här guiden instruerar dig att installera Open Liberty Operator. Information om hur du använder WebSphere Liberty-operatorn finns i Installera WebSphere Liberty-operatorn med Kubernetes CLI.

# Install cert-manager Operator
export CERT_MANAGER_VERSION=v1.11.2
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/${CERT_MANAGER_VERSION}/cert-manager.yaml

# Install the Open Liberty Operator
export OPERATOR_VERSION=1.4.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

# Remove the downloaded files
rm -rf overlays base

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-avbildningar 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 med hjälp av följande kommandon. Exemplet finns i GitHub-lagringsplatsen Open Liberty/WebSphere Liberty på Azure Kubernetes Service Samples , som innehåller några exempel. Den här artikeln använder exemplet java-app .

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

Om du ser ett meddelande om att vara i detached HEAD läge går det här meddelandet att ignorera utan problem. Det betyder bara att du checkade ut en tagg. Kloning av lagringsplatsen skapar följande filstruktur:

java-app
├─ src/main/
│  ├─ aks/
│  │  ├─ openlibertyapplication-passwordless-db.yaml
│  ├─ docker/
│  │  ├─ Dockerfile
│  │  ├─ Dockerfile-wlp
│  ├─ liberty/config/
│  │  ├─ server.xml
│  ├─ java/
│  ├─ resources/
│  ├─ webapp/
├─ pom.xml
├─ pom-azure-identity.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 används filen openlibertyapplication-passwordless-db.yaml 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-filen för att konfigurera databasanslutningen för Open Liberty- och WebSphere Liberty-klustret. Den definierar en azure.sql.connectionstring variabel som används för att ansluta till Azure SQL Database.

Filen pom.xml är Maven-projektobjektmodellen (POM) som innehåller konfigurationsinformationen för projektet. Filen pom-azure-identity.xml deklarerar azure-identity beroende, som används för att autentisera till Azure-tjänster med hjälp av Microsoft Entra-ID.

Kommentar

Det här exemplet använder azure-identity-biblioteket för att autentisera till Azure SQL Database med hjälp av Microsoft Entra-autentisering, vilket rekommenderas för säkerhetsöverväganden. Mer information om hur du använder SQL-autentisering i ditt Liberty-program finns i Relationsdatabasanslutningar med Java Database Connectivity (JDBC).

Bygga projektet

Nu när du har samlat in de nödvändiga egenskaperna skapar du programmet med hjälp av följande kommandon. 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 target/
export LOGIN_SERVER=${LOGIN_SERVER}
export SC_SERVICE_ACCOUNT_NAME=${SERVICE_ACCOUNT_NAME}
export SC_SECRET_NAME=${SECRET_NAME}

mvn clean install
mvn dependency:copy-dependencies -f pom-azure-identity.xml -DoutputDirectory=target/liberty/wlp/usr/shared/resources

Skapa avbildningen för AKS-distribution

Använd az acr build för att skapa avbildningen, som du ser i följande exempel:

cd $BASE_DIR/java-app/target

az acr build \
    --registry ${REGISTRY_NAME} \
    --image javaee-cafe:v1 \
    .

Kommandot az acr build laddar upp artefakterna som anges i Dockerfile till containerregisterinstansen, skapar avbildningen och lagrar den i containerregisterinstansen.

Distribuera programmet till AKS-klustret

Använd följande steg för att distribuera Liberty-programmet i AKS-klustret:

  1. Använd distributionsfilen med hjälp av följande kommandon:

    cd $BASE_DIR/java-app/target
    
    # Apply deployment file
    kubectl apply -f openlibertyapplication-passwordless-db.yaml
    
  2. Kontrollera om instansen OpenLibertyApplication skapas med hjälp av följande kommando:

    kubectl get openlibertyapplication javaee-cafe-cluster --watch
    

    Följande utdata är typiska. Avsluta med Ctrl+C .

    NAME                  IMAGE                                        EXPOSED   RECONCILED   RESOURCESREADY   READY   WARNING   AGE
    javaee-cafe-cluster   <registry-name>.azurecr.io/javaee-cafe:v1              True         True             True              57s
    
  3. Kontrollera om distributionen som skapats av operatorn är klar med hjälp av följande kommando:

    kubectl get deployment javaee-cafe-cluster --watch
    

    Följande utdata är typiska:

    NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
    javaee-cafe-cluster         0/3     3            0           20s
    
  4. 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 lite tid att slutföra.

Använd kubectl get service för att hämta tjänstens externa IP-adress när den är tillgänglig, som du ser i följande exempel:

export APP_URL=http://$(kubectl get service javaee-cafe-cluster -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
echo $APP_URL

Kommentar

Om du inte ser en giltig URL från utdata väntar du en stund och kör kommandot igen.

Öppna URL:en i en webbläsare och kontrollera programmets startsida. Om sidan inte läses in korrekt uppdaterar du sidan senare när appen har startats. 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.

Skärmbild av startsidan för Java Liberty-programmet.

Kommentar

För närvarande använder programmet inte HTTPS. Vi rekommenderar att du aktiverar TLS (Transport Layer Security) 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 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

Nästa steg

Du kan lära dig mer från följande referenser som används i den här guiden:

Information om hur du införlivar Azure Cache for Redis i en Java-app finns i Snabbstart: Använda Azure Cache for Redis i Java med Redisson Redis-klienten.

Information om alternativ för att köra WebSphere-produkter i Azure finns i Vad är lösningar för att köra WebSphere-serien med produkter i Azure?