Azure Kubernetes Service (AKS) kümesinde Open Liberty veya WebSphere Liberty ile Java EE JCache kullanma

Bu makalede, AKS'ye dağıtılan kapsayıcılı bir uygulamada Java EE JCache'in nasıl kullanılacağı açıklanmaktadır.

Bu kılavuzda şunları yapacaksınız:

  • Open Liberty veya WebSphere Liberty çalışma zamanında Java, Java EE, Jakarta EE veya MicroProfile uygulamanızı çalıştırmak için altyapıyı oluşturun.
  • Oturum önbelleği olarak Redis için Azure Cache tarafından yedeklenen Java EE JCache'i kullanın.
  • Open Liberty veya WebSphere Liberty kapsayıcı görüntülerini kullanarak uygulama Docker görüntüsünü oluşturun.
  • Open Liberty İşleci'ni kullanarak kapsayıcılı uygulamayı aks kümesine dağıtın.

Bu makale, dağıtıma hızlı bir şekilde başlamanıza yardımcı olmak için tasarlanmıştır. Üretime geçmeden önce Tuning Liberty'yi keşfetmeniz gerekir.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Önkoşullar

  • Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.

  • CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.

    • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.

    • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

  • Bu makale, Azure CLI'nin en son sürümünü gerektirir. Azure Cloud Shell kullanıyorsanız en son sürüm zaten yüklüdür.
  • Bu kılavuzdaki komutları yerel olarak çalıştırıyorsanız (Azure Cloud Shell yerine):
    • Unix benzeri işletim sistemi yüklü yerel bir makine hazırlayın (örneğin, Ubuntu, macOS, Linux için Windows Alt Sistemi).
    • Java SE uygulaması, sürüm 17 veya üzeri (örneğin Eclipse Open J9) yükleyin.
    • Maven 3.5.0 veya üzerini yükleyin.
    • İşletim sisteminiz için Docker'ı yükleyin.
  • Size abonelik için rol veya ContributorUser Access Administrator roller atandığından Owner emin olun. Kullanıcı veya grup için rol atamalarını listeleme bölümünde yer alan adımları izleyerek atamalarınızı doğrulayabilirsiniz.

Altyapıyı oluşturma

Bu bölümdeki adımlar, Azure'da uygulama altyapısı oluşturma konusunda size yol gösterir. Bu adımları tamamladıktan sonra bir Azure Container Registry, bir Azure Kubernetes Service kümesi ve örnek uygulamayı çalıştırmak için Redis için Azure Cache bir örneğiniz olur.

Kaynak grubu oluşturma

Azure kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği mantıksal bir gruptur.

eastus konumundaki az group create komutunu kullanarak java-liberty-project adlı bir kaynak grubu oluşturun. Bu kaynak grubu daha sonra Azure Container Registry (ACR) örneğini ve AKS kümesini oluşturmak için kullanılacaktır.

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

ACR örneği oluşturma

ACR örneğini oluşturmak için az acr create komutunu kullanın. Aşağıdaki örnek youruniqueacrname adlı bir ACR örneği oluşturur. Youruniqueacrname değerinin Azure içinde benzersiz olduğundan emin olun.

export REGISTRY_NAME=youruniqueacrname
az acr create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --sku Basic \
    --admin-enabled

Kısa bir süre sonra şunları içeren bir JSON çıkışı görmeniz gerekir:

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

Alternatif olarak, Hızlı Başlangıç: Azure portalını kullanarak Azure kapsayıcı kayıt defteri oluşturma adımlarını izleyerek bir Azure kapsayıcı kayıt defteri örneği oluşturabilirsiniz.

ACR örneğine Bağlan

Bir görüntüyü göndermeden önce ACR örneğinde oturum açmanız gerekir. Bağlantıyı doğrulamak için aşağıdaki komutları çalıştırın:

export LOGIN_SERVER=$(az acr show \
    --name $REGISTRY_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --query 'loginServer' \
    --output tsv)
export USER_NAME=$(az acr credential show \
    --name $REGISTRY_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --query 'username' \
    --output tsv)
export PASSWORD=$(az acr credential show \
    --name $REGISTRY_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --query 'passwords[0].value' \
    --output tsv)

docker login $LOGIN_SERVER -u $USER_NAME -p $PASSWORD

ACR örneğinde başarıyla oturum açtıysanız komut çıktısının sonunda görmeniz Login Succeeded gerekir.

Azure kapsayıcı kayıt defterinde oturum açarken bir sorun görürseniz bkz . Kayıt defteri oturum açma sorunlarını giderme.

AKS kümesi oluşturma

Aks kümesi oluşturmak ve ACR örneğinden görüntü çekme izni vermek için az aks create komutunu kullanın. Aşağıdaki örnekte, bir düğüm ile myAKSCluster adlı bir küme oluşturulmuştur. Bu komutun tamamlanması birkaç dakika sürer.

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

Birkaç dakika sonra komut tamamlanıp aşağıdaki satırlar da dahil olmak üzere küme hakkında JSON biçimli bilgileri döndürür:

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

AKS kümesine Bağlan

Kubernetes kümesini yönetmek için Kubernetes komut satırı istemcisi kubectl kullanırsınız. Azure Cloud Shell kullanıyorsanız zaten kubectl yüklüdür. Yerel olarak yüklemek kubectl için az aks install-cli komutunu kullanın:

az aks install-cli

kubectl istemcisini Kubernetes kümenize bağlanacak şekilde yapılandırmak için az aks get-credentials komutunu kullanın. Bu komut kimlik bilgilerini indirir ve Kubernetes CLI'yi bunları kullanacak şekilde yapılandırmaktadır.

az aks get-credentials \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --overwrite-existing

Kümenize bağlantıyı doğrulamak için kubectl get komutunu kullanarak küme düğümleri listesini alın.

kubectl get nodes

Aşağıdaki örnekte önceki adımlarda oluşturulan tek düğüm gösterilmiştir. Düğümün durumunun Hazır olduğundan emin olun.

NAME                                STATUS   ROLES   AGE     VERSION
aks-nodepool1-xxxxxxxx-yyyyyyyyyy   Ready    agent   76s     v1.18.10

Open Liberty İşlecini Yükleme

Kümeyi oluşturduktan ve kümeye bağlandıktan sonra aşağıdaki komutları çalıştırarak Open Liberty İşleci'ni yükleyin.

# 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

Redis için Azure Cache örneği oluşturma

Redis için Azure Cache, Open Liberty veya WebSphere Liberty sunucusu içinde çalışan bir Java uygulaması için kalıcılığını HttpSession destekler. Redis için Azure Cache örneği oluşturmak ve bağlantı bilgilerini not almak için bu bölümdeki adımları izleyin. Bu bilgileri daha sonra kullanacağız.

  1. Hızlı Başlangıç: Java örneğini anlama dahil olmak üzere java'da Redis için Azure Cache kullanma bölümünde yer alan adımları izleyin.

  2. Redis için Azure Cache örneğinizin Ana bilgisayar adını ve Birincil erişim anahtarını kopyalayın ve ardından ortam değişkenleri eklemek için aşağıdaki komutları çalıştırın:

    export REDISCACHEHOSTNAME=<YOUR_HOST_NAME>
    export REDISCACHEKEY=<YOUR_PRIMARY_ACCESS_KEY>
    

Uygulama oluşturma

Örnek uygulamayı derlemek ve kapsayıcıya almak için bu bölümdeki adımları izleyin. Bu adımlarda Maven, liberty-maven-pluginve az acr build kullanılır. hakkında liberty-maven-plugindaha fazla bilgi edinmek için bkz . Maven ile web uygulaması oluşturma.

Uygulamayı gözden geçirin

Bu kılavuzun örnek kodunu kopyalamak için aşağıdaki komutları kullanın. Örnek, GitHub'daki open-liberty-on-aks deposundadır. Depoda birkaç örnek vardır. Bu makalede java-app-jcache kullanılır.

git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
git checkout 20230906

"Ayrılmış HEAD" durumunda olduğunu belirten bir ileti görürseniz, bu iletiyi yoksaymak güvenlidir. Bu yalnızca bir etiketi kullanıma almış olduğunuz anlamına gelir.

Uygulama aşağıdaki dosya yapısına sahiptir:

java-app-jcache/
├── pom.xml
└── src
    └── main
        ├── aks
        │   └── openlibertyapplication.yaml
        ├── docker
        │   ├── Dockerfile
        │   └── Dockerfile-wlp
        ├── java
        ├── liberty
        │   └── config
        │       └── server.xml
        ├── redisson
        │   └── redisson-config.yaml
        ├── resources
        └── webapp

Java, kaynaklar ve web uygulaması dizinleri örnek uygulamanın kaynak kodunu içerir.

aks dizininde, uygulama görüntüsünü dağıtmak için openlibertyapplication.yaml dağıtım dosyası kullanılır.

Docker dizinine iki Dockerfile yerleştiririz. Dockerfile , Open Liberty ile görüntü oluşturmak için, Dockerfile-wlp ise WebSphere Liberty ile görüntü oluşturmak için kullanılır.

Liberty/config dizininde, server.xml dosyası Open Liberty ve WebSphere Liberty kümesi için oturum önbelleğini yapılandırmak için kullanılır.

redisson dizininde redisson-config.yaml dosyası, Redis için Azure Cache örneğinin bağlantısını yapılandırmak için kullanılır.

Uygulamayı kapsayıcılı hale getirme

Liberty uygulamanızı AKS kümesinde dağıtmak ve çalıştırmak için, uygulamanızı Docker görüntüsü olarak kapsayıcıya almak için aşağıdaki adımları kullanın. Open Liberty kapsayıcı görüntülerini veya WebSphere Liberty kapsayıcı görüntülerini kullanabilirsiniz.

  1. Yerel kopyanızın dizinini java-app-jcache olarak değiştirin.

  2. Uygulamayı paketlemek için komutunu çalıştırın mvn clean package .

  3. Redisson yapılandırma dosyasını belirtilen konuma kopyalamak için komutunu çalıştırın mvn -Predisson validate . Bu adım, ortam değişkenlerinin REDISCACHEHOSTNAME değerlerini ve REDISCACHEKEY server.xml dosyası tarafından başvurulan redisson-config.yaml dosyasına ekler.

  4. Uygulamayı test etmek için komutunu çalıştırın mvn liberty:dev . Test başarılı olursa, komut çıktısında görmeniz The defaultServer server is ready to run a smarter planet. gerekir. Redis bağlantısı başarılı olursa aşağıdakine benzer bir çıkış görmeniz gerekir.

    [INFO] [err] [Default Executor-thread-5] INFO org.redisson.Version - Redisson 3.16.7
    [INFO] [err] [redisson-netty-2-2] INFO org.redisson.connection.pool.MasterPubSubConnectionPool - 1 connections initialized for redacted.redis.cache.windows.net/20.25.90.239:6380
    [INFO] [err] [redisson-netty-2-20] INFO org.redisson.connection.pool.MasterConnectionPool - 24 connections initialized for redacted.redis.cache.windows.net/20.25.90.239:6380
    
  5. Uygulamanın çalıştığını görmek için ziyaret http://localhost:9080/ edebilirsiniz, ancak Redis'in çalıştığını gösteren kanıt, önceki adımda listelenen çıktıdır.

  6. Uygulamayı durdurmak için Ctrl+C tuşlarını kullanın.

  7. Özelliklerin ve version pom.xml dosyasında tanımlanan değerleri almak için artifactId aşağıdaki komutları kullanın.

    export artifactId=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.artifactId}' --non-recursive exec:exec)
    export version=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec)
    
  8. Dizinini örneğin derlemesine dönüştürmek için komutunu çalıştırın cd target .

  9. Uygulama görüntüsünü oluşturmak ve ACR örneğine göndermek için aşağıdaki komutlardan birini çalıştırın.

    • Open Liberty'yi basit açık kaynak Java™ çalışma zamanı olarak kullanmayı tercih ediyorsanız Open Liberty temel görüntüsüyle derlemek için aşağıdaki komutu kullanın:

      # Build and tag application image. This will cause the ACR instance to pull the necessary Open Liberty base images.
      az acr build -t ${artifactId}:${version} -r $REGISTRY_NAME --resource-group $RESOURCE_GROUP_NAME .
      
    • Open Liberty'nin ticari bir sürümünü kullanmayı tercih ediyorsanız WebSphere Liberty temel görüntüsüyle derlemek için aşağıdaki komutu kullanın:

      # Build and tag application image. This will cause the ACR instance to pull the necessary WebSphere Liberty base images.
      az acr build -t ${artifactId}:${version} -r $REGISTRY_NAME --resource-group $RESOURCE_GROUP_NAME --file=Dockerfile-wlp .
      

Uygulamayı dağıtma

AKS kümesinde kapsayıcılı örnek uygulamayı dağıtmak için bu bölümdeki adımları izleyin.

  1. Geçerli çalışma dizininin yerel kopyanızda java-app-jcache/target olduğunu doğrulayın.

  2. Redisson yapılandırma bilgileriyle gizli dizi oluşturmak için aşağıdaki komutları kullanın. Bu gizli diziyle, uygulama oluşturulan Redis için Azure Cache örneğine bağlanabilir.

    export REDISSON_CONFIG_SECRET_NAME=redisson-config-secret
    kubectl create secret generic ${REDISSON_CONFIG_SECRET_NAME} --from-file=$(pwd)/liberty/wlp/usr/servers/defaultServer/redisson-config.yaml
    
  3. Liberty uygulamanızı AKS kümesine üç çoğaltmayla dağıtmak için aşağıdaki komutları kullanın. Komut çıkışı satır içinde de gösterilir.

    # Set number of application replicas
    export REPLICAS=3
    
    # Create OpenLibertyApplication "javaee-cafe-jcache-cluster"
    envsubst < openlibertyapplication.yaml | kubectl create -f -
    
    openlibertyapplication.openliberty.io/javaee-cafe-jcache-cluster created
    
    # Check if OpenLibertyApplication instance is created
    kubectl get openlibertyapplication ${artifactId}-cluster
    
    NAME                               IMAGE                                                         EXPOSED      RECONCILED   AGE
    javaee-cafe-jcache-cluster         youruniqueacrname.azurecr.io/javaee-cafe-jcache:1.0.0                      True         59s
    
    # Check if deployment created by Operator is ready
    kubectl get deployment ${artifactId}-cluster --watch
    
    NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
    javaee-cafe-jcache-cluster         0/3     3            0           20s
    
  4. Sütunun altında ve sütunun altında görene 3/3 kadar bekleyin, 3 ardından izleme işlemini durdurmak için Ctrl+C tuşlarını kubectl kullanın.AVAILABLEREADY

Uygulamayı test etme

Uygulama çalıştırıldığında Kubernetes yük dengeleyici hizmeti, uygulamanın ön ucunu İnternet'te kullanıma sunar. Bu işlemin tamamlanması biraz zaman alabilir.

İlerleme durumunu izlemek için kubectl get service komutunu --watch bağımsız değişkeniyle birlikte kullanın.

kubectl get service ${artifactId}-cluster --watch

NAME                               TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)          AGE
javaee-cafe-jcache-cluster         LoadBalancer   10.0.50.29     20.84.16.169    80:31732/TCP     68s

EXTERNAL-IP adresi beklemeden gerçek bir genel IP adresine geçtikten sonra izleme işlemini durdurmak için Ctrl+C tuşlarını kubectl kullanın.

Uygulama giriş sayfasını görmek için hizmetinizin dış IP adresine (20.84.16.169 yukarıdaki örnekte) bir web tarayıcısı açın. Sayfa doğru yüklenmemişse, bunun nedeni uygulamanın başlatılıyor olmasıdır. Bir süre bekleyebilir ve sayfayı daha sonra yenileyebilirsiniz. Sayfanın sol üst kısmında (javaee-cafe-jcache-cluster-77d54bccd4-5xnzx bu durum için) uygulama çoğaltmalarınızın pod adını görmeniz gerekir.

Screenshot of Java liberty application successfully deployed on A K S.

Oturumdaki yeni kahve formunda Ad ve Fiyat alanlarının değerlerini ayarlayın ve gönder'i seçin. Birkaç saniye sonra, sayfanın sol alt kısmında Gönderme sayısı: 1 görüntülenir.

Screenshot of sample application showing new coffee created and persisted in the session of the application.

Oturum önbelleğinin uygulamanın tüm çoğaltmalarında kalıcı olduğunu göstermek için aşağıdaki komutu çalıştırarak pod adıyla javaee-cafe-jcache-cluster-<pod id from your running app>geçerli çoğaltmayı silin:

kubectl delete pod javaee-cafe-jcache-cluster-77d54bccd4-5xnzx

pod "javaee-cafe-jcache-cluster-77d54bccd4-5xnzx" deleted

Ardından uygulama giriş sayfasını yenileyin. Oturumda yeni kahve bölümünde aynı verilerin görüntülendiğini ancak sayfanın sol üst kısmında farklı bir pod adının görüntülendiğini görürsünüz.

Son olarak, oturum verilerinin Redis için Azure Cache örneğinde kalıcı olduğunu göstermek için aşağıdaki adımları kullanın. Redis Konsolu'nu kullanarak Redis için Azure Cache örneğinize komutlar vekleyebilirsiniz.

  1. Azure portalından Redis için Azure Cache örneğinizi bulun.

  2. Redis konsolunu açmak için Konsol'a tıklayın.

  3. Oturum verilerini görüntülemek için aşağıdaki komutları çalıştırın:

    scan 0 count 1000 match '*'
    
    hgetall "com.ibm.ws.session.attr.default_host%2F"
    
  4. Oluşturduğunuz ve Redis için Azure Cache örneğinde kalıcı hale gelen kahve olan web sayfasında café.model.entity.Coffee[id=1, name=Coffee 3, price=30.0] ifadesini arayın.

Kaynakları temizleme

Azure ücretlerinden kaçınmak için gereksiz kaynakları temizlemeniz gerekir. Küme artık gerekli olmadığında az group delete komutunu kullanarak kaynak grubunu, kapsayıcı hizmetini, kapsayıcı kayıt defterini ve tüm ilgili kaynakları kaldırın.

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

Redis için Azure Cache örneğini silmek için kaynak grubu adını bulun ve aşağıdaki komutu çalıştırın:

az group delete --name <AZURE_CACHE_FOR_REDIS_RESOURCE_GROUP_NAME> --yes --no-wait

Sonraki adımlar

Bu kılavuzda kullanılan başvurulardan daha fazla bilgi edinebilirsiniz: