WebSphere uygulamalarını Azure Kubernetes Service’teki WildFly’a geçirme

Bu kılavuzda, mevcut bir WebSphere uygulamasını Azure Kubernetes Service kapsayıcısındaki WildFly üzerinde çalıştırmak için bu ortama geçirmek istediğinizde dikkate almanız gerekenler açıklanır.

Geçiş öncesi

Geçişin başarılı olduğundan emin olmak için, başlamadan önce aşağıdaki bölümlerde açıklanan değerlendirme ve envanter adımlarını tamamlayın.

Envanter sunucusu kapasitesi

Geçerli üretim sunucularının donanımını (bellek, CPU, disk) ve ortalama ve en yüksek istek sayısını ve kaynak kullanımını belgeleyin. Seçtiğiniz geçiş yolundan bağımsız olarak bu bilgilere ihtiyaç duyacaksınız. Örneğin düğüm havuzunuzdaki VM'lerin boyutunu, kapsayıcı tarafından kullanılacak bellek miktarını ve kapsayıcının ihtiyaç duyduğu CPU paylaşımını seçmeye yardımcı olmak için yararlıdır.

AKS'de düğüm havuzlarını yeniden boyutlandırmak mümkündür. Nasıl yapılacağını öğrenmek için bkz . Azure Kubernetes Service'te (AKS) düğüm havuzlarını yeniden boyutlandırma.

Tüm gizli dizilerin envanterini çıkarma

Üretim sunucularındaki tüm özellikleri ve yapılandırma dosyalarını gizli diziler ve parolalar için denetleyin. WAR dosyalarınızda ibm-web-bnd.xml’yi denetlediğinizden emin olun. Uygulamanızın içinde parolalar ve kimlik bilgileri içeren yapılandırma dosyaları da bulunabilir.

Tüm sertifikaların envanterini çıkarma

Genel SSL uç noktaları için kullanılan tüm sertifikaları belgeleyin. Aşağıdaki komutu çalıştırarak üretim sunucularındaki tüm sertifikaları görüntüleyebilirsiniz:

keytool -list -v -keystore <path to keystore>

Desteklenen Java sürümünün doğru çalıştığını onaylama

Azure Kubernetes Service'te WildFly kullanmak için java'nın belirli bir sürümü gerekir, bu nedenle uygulamanızın desteklenen sürümü kullanarak doğru şekilde çalıştığını onaylamanız gerekir.

Dekont

Geçerli sunucunuz desteklenmeyen bir JDK (Oracle JDK veya IBM OpenJ9 gibi) çalıştırıyorsa bu doğrulama özellikle önemlidir.

Geçerli Java sürümünüzü öğrenmek için üretim sunucunuzda oturum açın ve şu komutu çalıştırın:

java -version

WildFly’ı çalıştırmak için kullanmanız gereken sürüm hakkında bilgi almak için Gereksinimler’e bakın.

JNDI kaynaklarının envanterini çıkarma

Tüm JNDI kaynaklarının envanterini çıkarın. JMS ileti aracıları gibi bazı aracılar geçiş veya yeniden yapılandırma gerektirebilir.

Uygulamanızın içinde

WEB-INF/ibm-web-bnd.xml ve/veya WEB-INF/web.xml dosyasını inceleyin.

Belge veri kaynakları

Uygulamanızda herhangi bir veritabanı kullanılıyorsa aşağıdaki bilgileri yakalamanız gerekir:

  • Veri kaynağının adı nedir?
  • Bağlantı havuzu yapılandırması nedir?
  • JDBC sürücüsü JAR dosyasını nerede bulabilirim?

Daha fazla bilgi için WebSphere belgelerindeki Veritabanı bağlantısını yapılandırma sayfasına göz atın.

Dosya sisteminin kullanılıp kullanılmayacağını ve nasıl kullanıldığını belirleme

Uygulama sunucusundaki dosya sisteminin her kullanımı yeniden yapılandırma veya nadir durumlarda mimari değişiklikleri gerektirir. Dosya sistemi, WebSphere modülleri ya da uygulama kodunuz tarafından kullanılabilir. Aşağıdaki bölümlerde açıklanan senaryoların bazılarıyla veya tümüyle karşılaşabilirsiniz.

Salt okunur statik içerik

Uygulamanız şu anda statik içerik sunuyorsa bunun için alternatif bir konumunuz olması gerekir. Statik içeriği Azure Blob Depolama’ya taşımayı ve küresel olarak ışık hızında indirme işlemleri için Azure CDN eklemeyi düşünebilirsiniz. Daha fazla bilgi için bkz. Azure Depolama'de statik web sitesi barındırma ve Hızlı Başlangıç: Azure depolama hesabını Azure CDN ile tümleştirme. Statik içeriği Azure Spring Apps Enterprise planındaki bir uygulamaya doğrudan da dağıtabilirsiniz. Daha fazla bilgi için bkz . Web statik dosyalarını dağıtma.

Dinamik olarak yayımlanan statik içerik

Uygulamanız tarafından karşıya yüklenen/üretilen ama oluşturulduktan sonra sabit hale gelen statik içeriğe uygulamanızda izin veriliyorsa, karşıya yüklemeleri ve CDN yenilemesini işlemek için Azure İşlevi’yle birlikte yukarıda açıklandığı gibi Azure Blob Depolama ve Azure CDN kullanabilirsiniz. Azure İşlevleri ile statik içeriği karşıya yükleme ve CDN’ye önceden yükleme başlığı altında kullanımınıza ilişkin örnek bir uygulama sağladık. Statik içeriği Azure Spring Apps Enterprise planındaki bir uygulamaya doğrudan da dağıtabilirsiniz. Daha fazla bilgi için bkz . Web statik dosyalarını dağıtma.

Dinamik veya dahili içerik

Uygulamanız tarafından sık sık yazılan ve okunan dosyalar (geçici veri dosyaları gibi) veya yalnızca uygulamanız tarafından görülebilen statik dosyalar için, Azure Depolama paylaşımlarını kalıcı birimler olarak bağlayabilirsiniz. Daha fazla bilgi için bkz. Azure Kubernetes Service'te Azure Dosyalar ile dinamik olarak kalıcı birim oluşturma ve kullanma.

Uygulamanızın zamanlanan işlere dayanıp dayanmadığını belirleme

Quartz Scheduler görevleri veya Unix cron işleri gibi zamanlanmış işler Azure Kubernetes Service (AKS) ile KULLANıLMAMALIDIR. Azure Kubernetes Service zamanlanan görevler içeren bir uygulamayı dahili olarak dağıtmanızı engellemez. Bununla birlikte uygulamanızın ölçeği genişletildiyse, aynı zamanlanan iş zamanlama dönemi başına birden çok kez çalıştırılabilir. Bu durum istenmeyen sonuçlar doğurabilir.

Zamanlanan işleri AKS kümenizde yürütmek için gerektiği gibi Kubernetes CronJobs tanımlayın. Daha fazla bilgi edinmek için bkz. Bir CronJob ile Otomatikleştirilmiş Görev Çalıştırma.

Şirket içine bağlantının gerekip gerekmediğini saptama

Uygulamanızın şirket içi hizmetlerinizden birine erişmesi gerekiyorsa Azure’ın bağlantı hizmetlerinden birini sağlamalısınız. Daha fazla bilgi için bkz. Şirket içi ağını Azure'a bağlamak için bir çözüm seçme. Alternatif olarak şirket içi kaynaklarınızın kullanıma sunduğu genel kullanıma açık API’leri kullanmak için uygulamanızı yeniden düzenlemeniz gerekir.

Java Message Service (JMS) Kuyruklarının mı yoksa Konularının mı kullanıldığını saptama

Uygulamanız JMS Kuyruklarını veya Konularını kullanıyorsa, bunları dışarıda barındırılan bir JMS sunucusuna geçirmeniz gerekir. Azure Service Bus ve Gelişmiş İleti Sıraya Alma Protokolü (AMQP), JMS kullananlar için harika bir geçiş stratejisi olabilir. Daha fazla bilgi için bkz. Azure Service Bus ve AMQP 1.0 ile JMS’yi kullanma.

JMS kalıcı depoları yapılandırıldıysa, bunların yapılandırmasını yakalamalı ve geçiş sonrasında uygulamalısınız.

Uygulamanızın WebSphere’a özgü API’leri kullanıp kullanmadığını belirleme

Uygulamanız WebSphere’a özgü API’leri kullanıyorsa bu bağımlılıkları kaldırmak için uygulamanızı yeniden düzenlemeniz gerekir. Örneğin IBM WebSphere Application Server, Sürüm 9.0 API Belirtimi’nde bahsedilen bir sınıfı kullandıysanız uygulamanızda WebSphere’a özgü API kullanmışsınızdır.

Uygulamanızın Entity Beans mi yoksa EJB 2.x tarzı CMP Beans mi kullanacağına karar verme

Uygulamanız Beans veya EJB 2. x tarzı CMP Beans kullanıyorsa, bu bağımlılıkları kaldırmak için uygulamanızı yeniden düzenlemeniz gerekir.

Java EE Uygulama İstemcisi özelliğinin kullanılıp kullanılmadığını belirleme

Java EE Uygulama İstemcisi özelliğini kullanarak (sunucu) uygulamanıza bağlanan Java EE Uygulama İstemciniz varsa, hem istemci uygulamalarınızı hem de (sunucu) uygulamalarınızı HTTP API’lerini kullanacak şekilde yeniden düzenlemeniz gerekir.

Uygulamanızın işletim sistemine özgü kod içerip içermediğini saptama

Uygulamanız konak işletim sisteminde bağımlılıkları olan kod içeriyorsa, bunu yeniden düzenleyip söz konusu bağımlılıkları kaldırmanız gerekir. Örneğin dosya sistemi yollarındaki / veya \ kullanımlarını File.Separator veya Paths.get ile değiştirmeniz gerekebilir.

EJB zamanlayıcılarının kullanımda olup olmadığını belirleme

Uygulamanız EJB zamanlayıcılarını kullanıyorsa, EJB zamanlayıcı kodunun her WildFly örneğinden bağımsız olarak tetiklenebildiğini doğrulamanız gerekir. Azure Kubernetes Service dağıtım senaryosunda her EJB zamanlayıcısı kendi WildFly örneğinde tetikleneceği için bu doğrulama gereklidir.

JCA bağlayıcıların kullanımda olup olmadığını belirleme

Uygulamanız JCA bağlayıcıları kullanıyorsa WildFly’da JCA bağlayıcının kullanılabildiğini doğrulamanız gerekir. JCA uygulaması WebSphere’a bağlıysa uygulamanızı yeniden düzenleyerek bu bağımlılığı kaldırmanız gerekir. JCA bağlayıcı kullanılabiliyorsa JAR’leri sunucu sınıf yoluna eklemeniz ve kullanılabilmesi için gerekli yapılandırma dosyalarını WildFly sunucu dizinlerinde doğru konuma yerleştirmeniz gerekir.

JAAS’nin kullanımda olup olmadığını belirleme

Uygulamanız JAAS kullanıyorsa JAAS’nin nasıl yapılandırıldığını yakalamanız gerekir. Bir veritabanını kullanıyorsa bunu WildFly’da bir JAAS etki alanına dönüştürebilirsiniz. Bu bir özel uygulamaysa, bunun WildFly’da kullanılabileceğini doğrulamanız gerekir.

Uygulamanızın bir kaynak bağdaştırıcısı kullanıp kullanmadığını belirleme

Uygulamanız bir kaynak bağdaştırıcısına (RA) ihtiyaç duyuyorsa, bunun WildFly ile uyumlu olması gerekebilir. RA’yı sunucuya dağıtıp bunu doğru yapılandırın ve WildFly’ın tek başına örneğinde düzgün çalışıp çalışmadığını belirleyin. RA düzgün çalışıyorsa, JAR’leri Docker görüntüsünün sunucu sınıf yoluna eklemeniz ve kullanılabilmesi için gerekli yapılandırma dosyalarını WildFly sunucu dizinlerinde doğru konuma yerleştirmeniz gerekir.

Uygulamanızın birden çok WAR’dan oluşup oluşmadığını saptama

Uygulamanız birden çok WAR’dan oluşuyorsa, bu WAR dosyalarından her birini ayrı uygulama olarak değerlendirmeli ve her biri için bu kılavuzu izlemelisiniz.

Uygulamanızın EAR olarak paketlenip paketlenmediğini saptama

Uygulamanız EAR dosyası olarak paketlendiyse application.xml ve application-bnd.xml dosyalarını incelediğinizden ve yapılandırmalarını yakaladığınızdan emin olun.

Dekont

AKS kaynaklarınızı daha iyi kullanmak için web uygulamalarınızın her birini ölçeklendirebilmek istiyorsanız EAR’ı ayrı web uygulamalarına bölmeniz gerekir.

Üretim sunucularında çalıştırılan tüm dış işlemleri ve daemon’ları belirleme

Uygulama sunucusunun dışında çalıştırılan izleme deamon’ları gibi işlemleriniz varsa, bunları ortadan kaldırmanız veya başka bir yere geçirmeniz gerekir.

Yerinde test gerçekleştirme

Kapsayıcı görüntülerinizi oluşturmadan önce uygulamanızı AKS’de kullanmak istediğiniz JDK ve WildFly sürümlerine geçirin. Uyumluluk ve performanstan emin olmak için uygulamayı kapsamlı olarak test edin.

Geçiş

Azure Container Registry ve Azure Kubernetes Service sağlama

Kayıt defterinde Hizmet Sorumlusunun Okuyucu rolüne sahip olduğu bir kapsayıcı kayıt defteri ve bir Azure Kubernetes kümesi oluşturmak için aşağıdaki komutları kullanın. Kümenizin ağ gereksinimleri için uygun ağ modelini seçtiğinizden emin olun.

az group create \
    --resource-group $resourceGroup \
    --location eastus
az acr create \
    --resource-group $resourceGroup \
    --name $acrName \
    --sku Standard
az aks create \
    --resource-group $resourceGroup \
    --name $aksName \
    --attach-acr $acrName \
    --network-plugin azure

WildFly için Docker görüntüsü oluşturma

Dockerfile oluşturmak için aşağıdaki önkoşulları sağlamanız gerekir:

  • Desteklenen bir JDK.
  • WildFly yüklemesi.
  • JVM çalışma zamanı seçenekleriniz.
  • Ortam değişkenlerini (varsa) geçirmeye ilişkin bir yöntem.

Ardından, uygun olan yerlerde aşağıdaki bölümlerde açıklanan adımları gerçekleştirebilirsiniz. Dockerfile ve web uygulamanız için başlangıç noktası olarak WildFly Kapsayıcısı Hızlı Başlangıç deposunu kullanabilirsiniz.

  1. KeyVault FlexVolume’ü yapılandırma
  2. Veri kaynaklarını ayarlama
  3. JNDI kaynaklarını ayarlama
  4. WildFly yapılandırmasını gözden geçirme

KeyVault FlexVolume’ü yapılandırma

Azure KeyVault oluşturun ve tüm gerekli gizli dizileri doldurun. Daha fazla bilgi için bkz . Hızlı Başlangıç: Azure CLI kullanarak Azure Key Vault'tan gizli dizi ayarlama ve alma. Ardından söz konusu gizli dizileri podların erişimine açmak için KeyVault FlexVolume sürücüsünü yapılandırın.

WildFly’ı önyüklemek için kullanılan başlatma betiğini güncelleştirmeniz de gerekir. Sunucu başlatılmadan önce bu betiğin sertifikaları WildFly tarafından kullanılan anahtar deposuna içeri aktarması gerekir.

Veri kaynaklarını ayarlama

WildFly’ı bir veri kaynağına erişme amacıyla yapılandırmak için JDBC sürücüsü JAR’yi Docker görüntünüze ekleyip uygun JBoss CLI komutlarını yürütmeniz gerekir. Docker görüntünüz oluşturulurken bu komutların veri kaynağını ayarlaması gerekir.

Aşağıdaki adımlarda PostgreSQL, MySQL ve SQL Server’a yönelik yönergeler sunulur.

  1. PostgreSQL, MySQL veya SQL Server’a yönelik JDBC sürücüsünü indirin.

    Sürücü .jar dosyasını almak için indirilen arşivin paketini açın.

  2. module.xml gibi bir adı olan bir dosya oluşturup aşağıdaki biçimlendirmeyi ekleyin. <module name> yer tutucusunu (köşeli ayraçlarla birlikte) PostgreSQL için org.postgres, MySQL için com.mysql veya SQL Server için com.microsoft ile değiştirin. Docker görüntünüzdeki (örneğin, /opt/database öğesinde) dosyayı yerleştireceğiniz konuma ilişkin tam yolu da içerecek şekilde <JDBC .jar file path> öğesini önceki adımdaki .jar dosyasının adıyla değiştirin.

    <?xml version="1.0" ?>
    <module xmlns="urn:jboss:module:1.1" name="<module name>">
        <resources>
           <resource-root path="<JDBC .jar file path>" />
        </resources>
        <dependencies>
            <module name="javax.api"/>
            <module name="javax.transaction.api"/>
        </dependencies>
    </module>
    
  3. datasource-commands.cli gibi bir adı olan bir dosya oluşturup aşağıdaki kodu ekleyin. <JDBC .jar file path> öğesini önceki adımda kullandığınız değer ile değiştirin. <module file path> öğesini önceki adımdaki dosya adı ve yolu ile değiştirin (örneğin, /opt/database/module.xml).

    PostgreSQL

    batch
    module add --name=org.postgres --resources=<JDBC .jar file path> --module-xml=<module file path>
    /subsystem=datasources/jdbc-driver=postgres:add(driver-name=postgres,driver-module-name=org.postgres,driver-class-name=org.postgresql.Driver,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
    data-source add --name=postgresDS --driver-name=postgres --jndi-name=java:jboss/datasources/postgresDS --connection-url=$DATABASE_CONNECTION_URL --user-name=$DATABASE_SERVER_ADMIN_FULL_NAME --password=$DATABASE_SERVER_ADMIN_PASSWORD --use-ccm=true --max-pool-size=5 --blocking-timeout-wait-millis=5000 --enabled=true --driver-class=org.postgresql.Driver --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter --jta=true --use-java-context=true --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
    reload
    run batch
    shutdown
    

    MySQL

    batch
    module add --name=com.mysql --resources=<JDBC .jar file path> --module-xml=<module file path>
    /subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql,driver-module-name=com.mysql,driver-class-name=com.mysql.cj.jdbc.Driver)
    data-source add --name=mysqlDS --jndi-name=java:jboss/datasources/mysqlDS --connection-url=$DATABASE_CONNECTION_URL --driver-name=mysql --user-name=$DATABASE_SERVER_ADMIN_FULL_NAME --password=$DATABASE_SERVER_ADMIN_PASSWORD --use-ccm=true --max-pool-size=5 --blocking-timeout-wait-millis=5000 --enabled=true --driver-class=com.mysql.cj.jdbc.Driver --jta=true --use-java-context=true --exception-sorter-class-name=com.mysql.cj.jdbc.integration.jboss.ExtendedMysqlExceptionSorter
    reload
    run batch
    shutdown
    

    SQL Server

    batch
    module add --name=com.microsoft --resources=<JDBC .jar file path> --module-xml=<module file path>
    /subsystem=datasources/jdbc-driver=sqlserver:add(driver-name=sqlserver,driver-module-name=com.microsoft,driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver,driver-datasource-class-name=com.microsoft.sqlserver.jdbc.SQLServerDataSource)
    data-source add --name=sqlDS --jndi-name=java:jboss/datasources/sqlDS --driver-name=sqlserver --connection-url=$DATABASE_CONNECTION_URL --validate-on-match=true --background-validation=false --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLExceptionSorter
    reload
    run batch
    shutdown
    
  4. Uygulamanıza yönelik JTA veri kaynağı yapılandırmasını güncelleştirin:

    Uygulamanıza yönelik src/main/resources/META-INF/persistence.xml dosyasını açıp <jta-data-source> öğesini bulun. İçeriklerini aşağıda gösterildiği gibi değiştirin:

    PostgreSQL

    <jta-data-source>java:jboss/datasources/postgresDS</jta-data-source>
    

    MySQL

    <jta-data-source>java:jboss/datasources/mysqlDS</jta-data-source>
    

    SQL Server

    <jta-data-source>java:jboss/datasources/postgresDS</jta-data-source>
    
  5. Docker görüntünüzü oluşturduğunuzda veri kaynağınızın oluşturulması için aşağıdakini Dockerfile öğenize ekleyin

    RUN /bin/bash -c '<WILDFLY_INSTALL_PATH>/bin/standalone.sh --start-mode admin-only &' && \
    sleep 30 && \
    <WILDFLY_INSTALL_PATH>/bin/jboss-cli.sh -c --file=/opt/database/datasource-commands.cli && \
    sleep 30
    
  6. Her veritabanı sunucusu için değişiklik gösterdiklerinden ve Azure portalındaki değerlerden farklı olduklarından, kullanacağınız DATABASE_CONNECTION_URL değerini belirleyin. Burada gösterilen URL biçimleri WildFly’ın kullanılması için gereklidir:

    PostgreSQL

    jdbc:postgresql://<database server name>:5432/<database name>?ssl=true
    

    MySQL

    jdbc:mysql://<database server name>:3306/<database name>?ssl=true\&useLegacyDatetimeCode=false\&serverTimezone=GMT
    

    SQL Server

    jdbc:sqlserver://<database server name>:1433;database=<database name>;user=<admin name>;password=<admin password>;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;
    
  7. Sonraki aşamalarda dağıtım YAML’nizi oluştururken şu ortam değişkenlerini (DATABASE_CONNECTION_URL, DATABASE_SERVER_ADMIN_FULL_NAME ve DATABASE_SERVER_ADMIN_PASSWORD) uygun değerlerle geçirmeniz gerekir.

WildFly ile veritabanı bağlantısını yapılandırma hakkında daha fazla bilgi edinmek için bkz. PostgreSQL, MySQL veya SQL Server.

JNDI kaynaklarını ayarlama

WildFly’da yapılandırılması gereken her JNDI kaynağını ayarlamak için genelde aşağıdaki adımlar kullanılır:

  1. Gerekli JAR dosyalarını indirip bunları Docker görüntüsüne kopyalayın.
  2. Bu JAR dosyalarına başvuran bir WildFly module.xml dosyası oluşturun.
  3. Belirli JNDI kaynağının ihtiyaç duyduğu tüm yapılandırmaları oluşturun.
  4. JNDI kaynağını kaydetmek için Docker oluşturma işlemi sırasında kullanılacak JBoss CLI betiğini oluşturun.
  5. Her şeyi Dockerfile’a ekleyin.
  6. Dağıtım YAML’nizdeki uygun ortam değişkenlerini geçirin.

Aşağıdaki örnekte, Azure Service Bus ile JMS bağlantısı kurulması için gerekli olan JNDI kaynağını oluşturmak için uygulanması gereken adımlar gösterilmektedir.

  1. Apache Qpid JMS sağlayıcısını indirin

    .jar dosyalarını almak için indirilen arşivin paketini açın.

  2. module.xml gibi bir adı olan bir dosya oluşturup /opt/servicebus öğesine aşağıdaki biçimlendirmeyi ekleyin. JAR dosyalarının sürüm numaralarının önceki adımdaki JAR dosyalarının adlarıyla uyumlu olduğundan emin olun.

    <?xml version="1.0" ?>
    <module xmlns="urn:jboss:module:1.1" name="org.jboss.genericjms.provider">
     <resources>
      <resource-root path="proton-j-0.31.0.jar"/>
      <resource-root path="qpid-jms-client-0.40.0.jar"/>
      <resource-root path="slf4j-log4j12-1.7.25.jar"/>
      <resource-root path="slf4j-api-1.7.25.jar"/>
      <resource-root path="log4j-1.2.17.jar"/>
      <resource-root path="netty-buffer-4.1.32.Final.jar" />
      <resource-root path="netty-codec-4.1.32.Final.jar" />
      <resource-root path="netty-codec-http-4.1.32.Final.jar" />
      <resource-root path="netty-common-4.1.32.Final.jar" />
      <resource-root path="netty-handler-4.1.32.Final.jar" />
      <resource-root path="netty-resolver-4.1.32.Final.jar" />
      <resource-root path="netty-transport-4.1.32.Final.jar" />
      <resource-root path="netty-transport-native-epoll-4.1.32.Final-linux-x86_64.jar" />
      <resource-root path="netty-transport-native-kqueue-4.1.32.Final-osx-x86_64.jar" />
      <resource-root path="netty-transport-native-unix-common-4.1.32.Final.jar" />
      <resource-root path="qpid-jms-discovery-0.40.0.jar" />
     </resources>
     <dependencies>
      <module name="javax.api"/>
      <module name="javax.jms.api"/>
     </dependencies>
    </module>
    
  3. /opt/servicebus öğesinde bir jndi.properties dosyası oluşturun.

    connectionfactory.${MDB_CONNECTION_FACTORY}=amqps://${DEFAULT_SBNAMESPACE}.servicebus.windows.net?amqp.idleTimeout=120000&jms.username=${SB_SAS_POLICY}&jms.password=${SB_SAS_KEY}
    queue.${MDB_QUEUE}=${SB_QUEUE}
    topic.${MDB_TOPIC}=${SB_TOPIC}
    
  4. servicebus-commands.cli gibi bir adı olan bir dosya oluşturup aşağıdaki kodu ekleyin.

    batch
    /subsystem=ee:write-attribute(name=annotation-property-replacement,value=true)
    /system-property=property.mymdb.queue:add(value=myqueue)
    /system-property=property.connection.factory:add(value=java:global/remoteJMS/SBF)
    /subsystem=ee:list-add(name=global-modules, value={"name" => "org.jboss.genericjms.provider", "slot" =>"main"}
    /subsystem=naming/binding="java:global/remoteJMS":add(binding-type=external-context,module=org.jboss.genericjms.provider,class=javax.naming.InitialContext,environment=[java.naming.factory.initial=org.apache.qpid.jms.jndi.JmsInitialContextFactory,org.jboss.as.naming.lookup.by.string=true,java.naming.provider.url=/opt/servicebus/jndi.properties])
    /subsystem=resource-adapters/resource-adapter=generic-ra:add(module=org.jboss.genericjms,transaction-support=XATransaction)
    /subsystem=resource-adapters/resource-adapter=generic-ra/connection-definitions=sbf-cd:add(class-name=org.jboss.resource.adapter.jms.JmsManagedConnectionFactory, jndi-name=java:/jms/${MDB_CONNECTION_FACTORY})
    /subsystem=resource-adapters/resource-adapter=generic-ra/connection-definitions=sbf-cd/config-properties=ConnectionFactory:add(value=${MDB_CONNECTION_FACTORY})
    /subsystem=resource-adapters/resource-adapter=generic-ra/connection-definitions=sbf-cd/config-properties=JndiParameters:add(value="java.naming.factory.initial=org.apache.qpid.jms.jndi.JmsInitialContextFactory;java.naming.provider.url=/opt/servicebus/jndi.properties")
    /subsystem=resource-adapters/resource-adapter=generic-ra/connection-definitions=sbf-cd:write-attribute(name=security-application,value=true)
    /subsystem=ejb3:write-attribute(name=default-resource-adapter-name, value=generic-ra)
    run-batch
    reload
    shutdown
    
  5. Docker görüntünüzü oluşturduğunuzda JNDI kaynağınızın oluşturulması için aşağıdakini Dockerfile öğenize ekleyin

    RUN /bin/bash -c '<WILDFLY_INSTALL_PATH>/bin/standalone.sh --start-mode admin-only &' && \
    sleep 30 && \
    <WILDFLY_INSTALL_PATH>/bin/jboss-cli.sh -c --file=/opt/servicebus/servicebus-commands.cli && \
    sleep 30
    
  6. Sonraki aşamalarda dağıtım YAML’nizi oluştururken şu ortam değişkenlerini (MDB_CONNECTION_FACTORY, DEFAULT_SBNAMESPACE ve SB_SAS_POLICY, SB_SAS_KEY, MDB_QUEUE, SB_QUEUE, MDB_TOPIC ve SB_TOPIC) uygun değerlerle geçirmeniz gerekir.

WildFly yapılandırmasını gözden geçirme

Önceki kılavuzda ele alınmayan geçiş öncesi adımlarını incelemek için WildFly Yönetici Kılavuzu’nu gözden geçirin.

Docker görüntüsü oluşturun ve bunu Azure Container Registry’ye gönderin

Dockerfile dosyasını oluşturduktan sonra Docker görüntüsünü oluşturup bunu Azure Container Registry’de yayımlamanız gerekir.

WildFly Kapsayıcısı’na Hızlı Başlangıç GitHub depomuzu kullandıysanız, görüntünüzü oluşturup Azure Container Registry’ye gönderme işlemi aşağıdaki üç komutu çağırmaya denk gelir.

Bu örneklerde, MY_ACR ortam değişkeni Azure Container Registry’nizin adını, MY_APP_NAME değişkeni de Azure Container Registry’nizde kullanmak istediğiniz web uygulamasının adını taşır.

WAR dosyasını oluşturun:

mvn package

Azure Container Registry’de oturum açın:

az acr login --name ${MY_ACR}

Görüntüyü oluşturun ve gönderin:

az acr build --image ${MY_ACR}.azurecr.io/${MY_APP_NAME} --file src/main/docker/Dockerfile .

Alternatif olarak, aşağıdaki komutlarda gösterildiği gibi görüntüyü yerel olarak oluşturup test etmek için Docker CLI’yı kullanabilirsiniz. Bu yaklaşım ACR’ye ilk dağıtımdan önce görüntünün test edilmesini ve geliştirilmesini basitleştirebilir. Ancak, bunun için Docker CLI’yı yüklemeniz ve Docker daemon’ın çalıştığından emin olmanız gerekir.

Görüntüyü oluşturun:

docker build -t ${MY_ACR}.azurecr.io/${MY_APP_NAME}

Görüntüyü yerel olarak çalıştırın:

docker run -it -p 8080:8080 ${MY_ACR}.azurecr.io/${MY_APP_NAME}

Artık uygulamanıza http://localhost:8080 adresinde erişebilirsiniz.

Azure Container Registry’de oturum açın:

az acr login --name ${MY_ACR}

Görüntüyü Azure Container Registry’ye gönderin:

docker push ${MY_ACR}.azurecr.io/${MY_APP_NAME}

Azure’da kapsayıcı görüntüsü oluşturma ve bunları depolama hakkında daha ayrıntılı bilgi edinmek için şu Learn modülüne bakın: Azure Container Registry ile kapsayıcı görüntüsü oluşturma ve depolama.

Genel IP adresini sağlama

Uygulamanız iç veya sanal ağlarınızın dışından erişilebilir olacaksa, bir genel statik IP adresine ihtiyaç duyarsınız. Aşağıdaki örnekte gösterildiği gibi, bu IP adresini kümenizin düğüm kaynak grubunda sağlamanız gerekir:

export nodeResourceGroup=$(az aks show \
    --resource-group $resourceGroup \
    --name $aksName \
    --query 'nodeResourceGroup' \
    --output tsv)
export publicIp=$(az network public-ip create \
    --resource-group $nodeResourceGroup \
    --name applicationIp \
    --sku Standard \
    --allocation-method Static \
    --query 'publicIp.ipAddress' \
    --output tsv)
echo "Your public IP address is ${publicIp}."

AKS’ye dağıtma

Kubernetes YAML dosyaları oluşturma ve uygulama. Daha fazla bilgi için bkz . Hızlı Başlangıç: Azure CLI kullanarak Azure Kubernetes Service kümesi dağıtma. Dış yük dengeleyici oluşturuyorsanız (uygulamanız veya bir giriş denetleyicisi için), LoadBalancerIP olarak önceki bölümde sunulan IP adresini sağladığınızdan emin olun.

Dışsallaştırılmış parametreleri ortam değişkenleri olarak ekleyin. Daha fazla bilgi edinmek için bkz. Bir Kapsayıcı için Ortam Değişkenlerini Tanılama. Gizli dizileri (parolalar, API anahtarları ve JDBC bağlantı dizeleri gibi) eklemeyin. Bunlar aşağıdaki bölümde ele alınmıştır.

Kapsayıcılarınızın doğru şekilde boyutlandırılması için dağıtım YAML’sini oluştururken bellek ve CPU ayarlarını da eklediğinizden emin olun.

Kalıcı depolamayı yapılandırma

Uygulamanızda geçici olmayan depolama gerekiyorsa bir veya birden çok Kalıcı Birim yapılandırın.

Zamanlanan işleri geçirme

Zamanlanan işleri AKS kümenizde yürütmek için gerektiği gibi Kubernetes CronJobs tanımlayın. Daha fazla bilgi edinmek için bkz. Bir CronJob ile Otomatikleştirilmiş Görev Çalıştırma.

Geçiş sonrası

Artık uygulamanızı Azure Kubernetes Service’e geçirdiğinize göre beklendiği gibi çalıştığını doğrulamalısınız. Bunu yaptıktan sonra uygulamanızı daha buluta özel hale getirmenizi sağlayabilecek bazı önerilerimiz var.

Öneriler

  • Giriş denetleyicinize veya uygulama yük dengeleyicisine ayrılmış IP adresine DNS adı eklemeniz faydalı olabilir. Daha fazla bilgi için bkz . AKS'de statik genel IP adresiyle giriş denetleyicisi oluşturma.

  • Uygulamanız için HELM grafikleri eklemeyi düşünebilirsiniz. Helm grafiği daha yüksek çeşitliliğe sahip bir müşteri kümesi tarafından kullanılmak ve özelleştirilmek üzere uygulama dağıtımınızı parametreleştirmenize olanak tanır.

  • DevOps stratejisini tasarlayın ve uygulayın. Güvenilirliği korurken geliştirme hızınızı da artırmak için Azure Pipelines ile dağıtımları ve testleri otomatikleştirmeyi düşünebilirsiniz. Daha fazla bilgi edinmek için bkz. AKS’de derleme ve dağıtma.

  • Küme için Azure İzleme’yi etkinleştirin. Daha fazla bilgi edinmek için bkz. Önceden dağıtılmış AKS kümesi için izlemeyi etkinleştirme. Bu, Azure İzleyici’nin kapsayıcı günlüklerini toplama ve kullanımı izleme gibi işlemleri gerçekleştirmesine olanak tanır.

  • Prometheus aracılığıyla uygulamaya özgü ölçümleri kullanıma sunmayı düşünün. Prometheus, Kubernetes topluluğunda yaygın olarak benimsenen bir açık kaynak ölçüm çerçevesidir. Uygulamalarınızdan ölçüm toplamaya ve anormal koşullara otomatik yanıta veya durumu yükseltmeye olanak tanımak için kendi Prometheus sunucunuzu barındırmak yerine Azure İzleyici’de Prometheus Metrics atığını yapılandırabilirsiniz. Daha fazla bilgi edinmek için bkz. Kapsayıcılara yönelik Azure İzleyici ile Prometheus Metrics atığını yapılandırma.

  • İş sürekliliği ve olağanüstü durum kurtarma stratejisini tasarlayın ve uygulayın. Görev açısından kritik uygulamalar için çok bölgeli dağıtım mimarisi uygulamayı düşünebilirsiniz. Daha fazla bilgi edinmek için bkz. AKS’de iş sürekliliği ve olağanüstü durum kurtarma için en iyi yöntemler.

  • Kubernetes sürüm desteği ilkesini gözden geçirin. AKS kümenizi güncelleştirmeye devam edip her zaman desteklenen sürümü çalıştırdığından emin olmak sizin sorumluluğunuzdur. Daha fazla bilgi edinmek için bkz. Bir AKS kümesini yükseltme.

  • Tüm ekip üyelerinin küme yönetiminden ve uygulama geliştirmeden sorumlu olmasını sağlayın, uygun AKS en iyi yöntemlerini gözden geçirin. Daha fazla bilgi edinmek için bkz. AKS’de uygulama oluşturup yönetmek için küme işleci ve geliştiricilere yönelik en iyi deneyimler.

  • Dağıtım dosyanızın sıralı güncelleştirmelerin nasıl gerçekleştirildiğini belirttiğinden emin olun. Daha fazla bilgi edinmek için Kubernetes belgelerinde Sıralı Güncelleştirme Dağıtımı bölümüne bakın.

  • Yoğun saatlerdeki yüklerin işlenmesi için otomatik ölçeklendirme özelliği ayarlayın. Daha fazla bilgi edinmek için bkz. AKS’deki uygulama taleplerini karşılamak için bir kümeyi otomatik olarak ölçeklendirme.

  • Performansı daha da iyileştirmek için kod önbelleği boyutunu izlemeyi ve -XX:InitialCodeCacheSize ve -XX:ReservedCodeCacheSize JVM parametrelerini Dockerfile’a eklemeyi düşünebilirsiniz. Daha fazla bilgi edinmek için Oracle belgelerinde Kod önbelleğini ayarlama bölümüne bakın.