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'da WebSphere çözümleri geliştiren mühendislik ekibiyle geri bildirim sağlamak veya geçiş senaryolarınız üzerinde yakından çalışmak istiyorsanız, WebSphere geçişiyle ilgili bu kısa anketi doldurun ve iletişim bilgilerinizi ekleyin. Program yöneticileri, mimarlar ve mühendislerden oluşan ekip, yakın işbirliği başlatmak için sizinle hemen iletişime geçecektir.
Önkoşullar
- Azure aboneliği. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
- Ubuntu, macOS veya Linux için Windows Alt Sistemi gibi Unix benzeri işletim sistemi yüklü yerel bir makine hazırlayın.
- Azure CLI komutlarını çalıştırmak için Azure CLI'yi yükleyin.
- 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 Azure'da 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 ve yönetme.
- 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.
- Java SE uygulama sürümü 17 veya üzerini yükleyin; örneğin, OpenJDK'nin Microsoft derlemesi.
- Maven 3.5.0 veya üzerini yükleyin.
- İşletim sisteminiz için Docker'ı yükleyin.
- Git'in yüklü olduğundan emin olun.
- Size abonelik için rol veya
Contributor
User Access Administrator
roller atandığındanOwner
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ılı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
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ğlanma
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)
az acr login \
--name $REGISTRY_NAME \
--resource-group $RESOURCE_GROUP_NAME
Not
Kapsayıcı kayıt defterine erişim vermek için kullanıcı adı ve parola kimlik bilgilerinin kullanılması önerilmez. Belirli kullanım gereksinimleriniz kimlik bilgileri tabanlı erişimin en iyi yaklaşım olduğunu gösteriyorsa, kullanarak az acr credential show
kullanıcı adını ve parolayı alabilir ve bu değerleri ile docker login
kullanabilirsiniz.
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ğlanma
Kubernetes kümesini yönetmek için Kubernetes komut satırı istemcisi kubectl kullanırsınız. 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.3.3
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.
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.
Not
Redis için Azure Cache oluşturma bölümünün 6. adımında Kimlik Doğrulaması seçeneği için Erişim Anahtarları Kimlik Doğrulaması'nı seçin. Bu seçenek, örnek uygulamanın Redisson istemci kitaplığını kullanarak Redis için Azure Cache örneğine bağlanması için gereklidir. Daha fazla bilgi için bkz . Redisson Yapılandırması .
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-plugin
ve az acr build kullanılır. hakkında liberty-maven-plugin
daha 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 20240909
cd java-app-jcache
"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.
Yerel kopyanızda geçerli çalışma dizininin java-app-jcache olduğunu doğrulayın.
Uygulamayı paketlemek için komutunu çalıştırın
mvn clean package
.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şkenlerininREDISCACHEHOSTNAME
değerlerini veREDISCACHEKEY
server.xml dosyası tarafından başvurulan redisson-config.yaml dosyasına ekler.Uygulamayı test etmek için komutunu çalıştırın
mvn liberty:dev
. Test başarılı olursa, komut çıktısında görmenizThe 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.23.4 [INFO] [err] [redisson-netty-2-7] 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
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.Uygulamayı durdurmak için Ctrl+C tuşlarını kullanın.
pom.xml dosyasında tanımlanan özelliklerin
artifactId
version
değerlerini almak için 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)
Dizinini örneğin derlemesine dönüştürmek için komutunu çalıştırın
cd target
.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 causes 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 causes 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.
Geçerli çalışma dizininin yerel kopyanızda java-app-jcache/target olduğunu doğrulayın.
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
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
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.AVAILABLE
READY
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.
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.
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.
Azure portalından Redis için Azure Cache örneğinizi bulun.
Redis konsolunu açmak için Konsol'a tıklayın.
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"
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:
- JCache ile Liberty oturum kalıcılığını yapılandırma
- Redisson için JCache desteği
- Open Liberty Server Yapılandırması
WebSphere ürünlerini Azure'da çalıştırma seçeneklerini keşfetmek için bkz . Azure'da WebSphere ürün ailesini çalıştırmaya yönelik çözümler nelerdir?