Migrace aplikací EAP JBoss do WildFly ve službě Azure Kubernetes Service (AKS)
Tato příručka popisuje, co byste měli vědět, když chcete migrovat existující aplikaci JBoss EAP tak, aby běžela ve WildFly v kontejneru služby Azure Kubernetes Service.
Před migrací
Pokud chcete zajistit úspěšnou migraci, dokončete kroky posouzení a inventáře popsané v následujících částech.
Inventarizace kapacity serverů
Zdokumentujte hardware (paměť, procesor, disk) aktuálních produkčních serverů a průměrný počet požadavků a využití prostředků ve špičce. Tyto informace budete potřebovat bez ohledu na zvolenou cestu migrace. Užitečné je například pomoct při výběru velikosti virtuálních počítačů ve fondu uzlů, množství paměti, které kontejner používá, a počet sdílených procesorů, které kontejner potřebuje.
Ve službě AKS je možné změnit velikost fondů uzlů. Postup najdete v tématu Změna velikosti fondů uzlů ve službě Azure Kubernetes Service (AKS).
Inventarizace všech tajných kódů
Ve všech vlastnostech a konfiguračních souborech na produkčních serverech vyhledejte tajné kódy a hesla. Nezapomeňte zkontrolovat soubor jboss-web.xml v souborech WAR. Konfigurační soubory obsahující hesla nebo přihlašovací údaje se mohou nacházet také ve vaší aplikaci.
Zvažte uložení těchto tajných kódů do služby Azure Key Vault. Další informace najdete v článku Základní koncepty služby Azure Key Vault.
Inventarizace všech certifikátů
Zdokumentujte všechny certifikáty používané pro veřejné koncové body SSL. Všechny certifikáty na produkčních serverech zobrazíte spuštěním následujícího příkazu:
keytool -list -v -keystore <path to keystore>
Ověření správné funkce podporované verze jazyka Java
Použití WildFly ve službě Azure Kubernetes Service vyžaduje konkrétní verzi Javy, takže budete muset ověřit, že vaše aplikace funguje správně pomocí této podporované verze.
Poznámka:
Toto ověření je obzvláště důležité, pokud se váš aktuální server provozuje na nepodporované sadě JDK (například Oracle JDK nebo IBM OpenJ9).
Aktuální verzi jazyka Java získáte tak, že se přihlásíte k produkčnímu serveru a spustíte následující příkaz:
java -version
Podrobné informace k tomu, která verze se má použít ke spuštění WildFly, najdete v požadavcích.
Inventarizace prostředků JNDI
Proveďte inventarizaci všech prostředků JNDI. Některé z nich, například zprostředkovatelé zpráv JMS, mohou vyžadovat migraci nebo změnu konfigurace.
Určení, zda se používá replikace relace
Pokud vaše aplikace spoléhá na replikaci relací, budete ji muset změnit tak, aby se tato závislost odebrala.
Ve vaší aplikaci
Zkontrolujte soubory WEB-INF/jboss-web.xml a/nebo WEB-INF/web.xml.
Dokumentování zdrojů dat
Pokud vaše aplikace používá nějaké databáze, potřebujete shromáždit následující informace:
- Jaký je název zdroje dat?
- Jaká je konfigurace fondu připojení?
- Kde najdu soubor JAR ovladače JDBC?
Další informace najdete v tématu o zdrojích dat EAP v JBoss v dokumentaci k JBoss EAP.
Určení, jestli a jak se používá systém souborů
Jakékoli používání systému souborů na aplikačním serveru bude vyžadovat změnu konfigurace nebo ve vzácných případech změnu architektury. Systém souborů mohou využívat moduly JBoss EAP nebo kód vaší aplikace. Můžete zjistit některé nebo všechny z následujících situací popsaných v následujících oddílech.
Statický obsah jen pro čtení
Pokud vaše aplikace aktuálně poskytuje statický obsah, budete pro ni potřebovat alternativní umístění. Možná budete chtít statický obsah přesunout do Azure Blob Storage a přidat Azure CDN, abyste umožnili bleskově rychlé globální stahování. Další informace najdete v tématu Hostování statického webu ve službě Azure Storage a rychlém startu: Integrace účtu úložiště Azure s Azure CDN.
Dynamicky publikovaný statický obsah
Pokud vaše aplikace umožňuje nahrávání nebo vytváření statického obsahu, který je ale po vytvoření neměnný, můžete použít Azure Blob Storage a Azure CDN, jak je popsáno výše, s funkcí Azure Functions, která zpracovává nahrávání a aktualizace CDN. Pro vaše použití jsme poskytli ukázkovou implementaci na GitHubu – Uploading and CDN-preloading static content with Azure Functions.
Dynamický nebo interní obsah
Pro soubory, které vaše aplikace často zapisuje a čte (například dočasné datové soubory) nebo statické soubory, které jsou viditelné jen vaší aplikaci, můžete připojit sdílené složky Azure Storage jako trvalé svazky. Další informace najdete v tématu Vytvoření a použití svazku se službou Azure Files ve službě Azure Kubernetes Service (AKS).
Určení, jestli aplikace využívá naplánované úlohy
Naplánované úlohy, jako jsou úlohy plánovače Quartz nebo úlohy Unix cron, by se neměly používat se službou Azure Kubernetes Service (AKS). Azure Kubernetes Service vám nezabrání nasadit aplikaci, která interně obsahuje naplánované úlohy. Pokud ale u aplikace dojde k horizontálnímu rozšíření kapacity, může se stejná naplánovaná úloha spustit v průběhu naplánovaného období více než jednou. Tato situace může vést k nezamýšleným důsledkům.
Pro spouštění naplánovaných úloh v clusteru AKS definujte podle potřeby úlohy Cron pro Kubernetes. Další informace najdete v tématu Spouštění automatizovaných úkolů s využitím úloh Cron.
Určení, jestli je potřeba připojení k místnímu prostředí
Pokud vaše aplikace potřebuje přístup k některým místním službám, budete muset zřídit jednu ze služeb připojení Azure. Další informace najdete v článku věnovaném připojení místní sítě k Azure. Alternativně budete muset aplikaci refaktorovat tak, aby používala veřejně přístupná rozhraní API, která nabízejí vaše místní prostředky.
Určení, jestli se používají fronty nebo témata JMS (Java Message Service)
Pokud vaše aplikace používá fronty nebo témata JMS, budete je muset migrovat na externě hostovaný server JMS. Pro aplikace používající JMS může skvělou migrační strategii představovat Azure Service Bus a rozšířený protokol řízení front zpráv (AMQP). Další informace najdete v tématu Použití služby Java Message Service 1.1 se standardem služby Azure Service Bus a AMQP 1.0.
Pokud jste nakonfigurovali trvalá úložiště JMS, musíte zachytit jejich konfiguraci a po migraci ji použít.
Určení, jestli aplikace využívá rozhraní API specifická pro JBoss EAP
Pokud vaše aplikace využívá rozhraní API specifická pro JBoss EAP, musíte je refaktorovat, aby se tyto závislosti odstranili.
Určení, jestli aplikace používá objekty Entity bean nebo objekty CMP bean ve stylu EJB 2.x
Pokud vaše aplikace používá objekty Entity bean nebo objekty CMP bean ve stylu EJB 2.x, budete muset aplikaci refaktorovat a odebrat tyto závislosti.
Určení, jestli se používá funkce klienta aplikace Java EE
Pokud máte klientské aplikace, které se připojují k vaší (serverové) aplikaci pomocí funkce klienta aplikace Java EE, budete muset klientské aplikace i (serverovou) aplikaci refaktorovat tak, aby používaly rozhraní HTTP API.
Určení, jestli aplikace obsahuje kód specifický pro operační systém
Pokud vaše aplikace obsahuje jakýkoli kód se závislostmi na hostitelském operačním systému, musíte ho refaktorovat, abyste tyto závislosti odebrali. Může být například nutné nahradit jakékoli použití /
cest systému souborů nebo \
v cestě File.Separator
k systému souborů nebo Paths.get
v případě, že je vaše aplikace spuštěná ve Windows.
Určení, jestli se používají časovače EJB
Pokud vaše aplikace používá časovače EJB, budete muset ověřit, jestli jednotlivé instance WildFly můžou nezávisle na sobě aktivovat kód časovačů EJB. Toto ověření je potřeba, protože ve scénáři nasazení Azure Kubernetes Service se každý časovač EJB bude aktivovat ve vlastní instanci WildFly.
Určení, jestli se používají konektory JCA
Pokud vaše aplikace používá konektory JCA, ověřte, že můžete použít konektor JCA na WildFly. Pokud je implementace JCA svázaná s protokolem EAP JBoss, musíte aplikaci refaktorovat, aby se tato závislost odebrala. Pokud můžete použít konektor JCA na WildFly, pak aby byl dostupný, musíte přidat JARs do cesty ke třídě serveru a umístit potřebné konfigurační soubory do správného umístění v adresářích serveru WildFly.
Určení, jestli se používá JAAS
Pokud vaše aplikace používá JAAS, budete muset zjistit konfiguraci JAAS. Pokud používá databázi, můžete ji převést na doménu JAAS ve WildFly. Pokud se jedná o vlastní implementaci, budete muset ověřit, že je možné ji použít ve WildFly.
Určení, jestli aplikace využívá adaptér prostředků
Pokud vaše aplikace potřebuje adaptér prostředků, musí být kompatibilní s WildFly. Zjistěte, jestli adaptér prostředků funguje bez problémů v samostatné instanci WildFly tím, že ji nasadíte na server a správně nakonfigurujete. Pokud adaptér prostředků funguje správně, musíte přidat příslušné soubory JAR do cesty ke třídám serveru image Dockeru a umístit nezbytné konfigurační soubory do správných umístění v adresářích serveru WildFly, aby byl k dispozici.
Určení, jestli se aplikace skládá z několika souborů WAR
Pokud se vaše aplikace skládá z několika souborů WAR, měli byste s těmito soubory WAR zacházet jako se samostatnými aplikacemi a projít tuto příručku pro každý z nich.
Určení, jestli je aplikace zabalená jako soubor EAR
Pokud je vaše aplikace zabalená jako soubor EAR, prověřte soubor application.xml a poznačte si jeho konfiguraci.
Poznámka:
Pokud chcete mít možnost škálovat jednotlivé webové aplikace nezávisle na sobě, abyste mohli lépe používat prostředky Azure Kubernetes Service (AKS), měli byste rozdělit ear do samostatných webových aplikací.
Zjištění všech vnějších procesů a démonů běžících na produkčních serverech
Pokud používáte nějaké procesy, které běží mimo aplikační server, například monitorovací démony, budete je muset eliminovat nebo migrovat jinam.
Místní testování
Před vytvořením imagí kontejneru migrujte aplikaci na verze JDK a WildFly, které máte v plánu používat v AKS. Pečlivě otestujte kompatibilitu a výkon aplikace.
Migrace
Zřízení služeb Azure Container Registry a Azure Kubernetes Service
Pomocí následujících příkazů vytvořte registr kontejnerů a cluster Azure Kubernetes s instančním objektem, který má v registru roli Čtenář. Nezapomeňte zvolit vhodný model sítě pro požadavky na síť vašeho clusteru.
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
Vytvoření image Dockeru pro WildFly
K vytvoření souboru Dockerfile budete potřebovat následující:
- Podporovaná sada JDK.
- Instalace WildFly.
- Parametry modulu runtime JVM
- Způsob předání proměnných prostředí (pokud je používáte)
Pak můžete v případě potřeby provést kroky popsané v následujících částech. Jako výchozí bod pro soubor Dockerfile a webovou aplikaci můžete použít úložiště Rychlého startu pro kontejner WildFly.
Konfigurace svazku FlexVolume služby Key Vault
Vytvořte službu Azure Key Vault a zadejte všechny potřebné tajné klíče. Další informace najdete v tématu Rychlý start: Nastavení a načtení tajného kódu ze služby Azure Key Vault pomocí Azure CLI. Pak nakonfigurujte svazek FlexVolume služby KeyVault tak, aby tyto tajné kódy byly přístupné podům.
Budete také muset aktualizovat spouštěcí skript, který spouští WildFly. Tento skript musí přes spuštěním serveru importovat certifikáty do úložiště klíčů, které používá WildFly.
Nastavení zdrojů dat
Pokud chcete nakonfigurovat WildFly pro přístup ke zdroji dat, musíte do vaší image Dockeru přidat soubor JAR ovladače JDBC a pak spustit odpovídající příkazy rozhraní příkazového řádku JBoss. Tyto příkazy musí nastavit zdroj dat při sestavování image Dockeru.
Následující kroky obsahují pokyny pro PostgreSQL, MySQL a SQL Server.
Stáhněte ovladač JDBC pro PostgreSQL, MySQL nebo SQL Server.
Rozbalte stažený archiv, abyste získali soubor JAR ovladače.
Vytvořte soubor s podobným názvem jako
module.xml
a přidejte do něj následující kód. Nahraďte zástupnou hodnotu<module name>
(včetně ostrých závorek) zaorg.postgres
(PostgreSQL),com.mysql
(MySQL) nebocom.microsoft
(SQL Server). Nahraďte zástupnou hodnotu<JDBC .jar file path>
za název souboru JAR z předchozího kroku, včetně úplné cesty k umístění, do kterého soubor umístíte ve vaší imagi Dockeru, například/opt/database
.<?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>
Vytvořte soubor s podobným názvem jako
datasource-commands.cli
a přidejte do něj následující kód. Nahraďte zástupnou hodnotu<JDBC .jar file path>
za hodnotu, kterou jste použili v předchozím kroku. Nahraďte zástupnou hodnotu<module file path>
za název souboru a cestu z předchozího kroku, například/opt/database/module.xml
.Poznámka:
Microsoft doporučuje používat nejbezpečnější dostupný tok ověřování. Tok ověřování popsaný v tomto postupu, například pro databáze, mezipaměti, zasílání zpráv nebo služby AI, vyžaduje velmi vysoký stupeň důvěryhodnosti v aplikaci a nese rizika, která nejsou přítomna v jiných tocích. Tento tok používejte pouze v případě, že nejsou možné zabezpečit možnosti, jako jsou spravované identity pro připojení bez hesla nebo bez klíčů. V případě místních operací počítačů upřednostňujete identity uživatelů pro připojení bez hesla nebo bez klíčů.
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
Aktualizujte pro svou aplikaci konfiguraci zdroje dat JTA:
Otevřete soubor
src/main/resources/META-INF/persistence.xml
vaší aplikace a vyhledejte element<jta-data-source>
. Následujícím způsobem nahraďte jeho obsah:<jta-data-source>java:jboss/datasources/postgresDS</jta-data-source>
Do souboru
Dockerfile
přidejte následující kód, který zajistí vytvoření zdroje dat při sestavování image Dockeru.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
Určete adresu
DATABASE_CONNECTION_URL
, která se má použít, protože je u každého databázového serveru jiná a liší se od hodnot na webu Azure Portal. WildFly vyžaduje použití následujících formátů adresy URL:jdbc:postgresql://<database server name>:5432/<database name>?ssl=true
Při vytváření souboru YAML nasazení v pozdější fázi budete muset předat proměnné prostředí
DATABASE_CONNECTION_URL
,DATABASE_SERVER_ADMIN_FULL_NAME
aDATABASE_SERVER_ADMIN_PASSWORD
s odpovídajícími hodnotami.
Poznámka:
Microsoft doporučuje používat nejbezpečnější dostupný tok ověřování. Tok ověřování popsaný v tomto postupu, například pro databáze, mezipaměti, zasílání zpráv nebo služby AI, vyžaduje velmi vysoký stupeň důvěryhodnosti v aplikaci a nese rizika, která nejsou přítomna v jiných tocích. Tento tok používejte pouze v případě, že nejsou možné zabezpečit možnosti, jako jsou spravované identity pro připojení bez hesla nebo bez klíčů. V případě místních operací počítačů upřednostňujete identity uživatelů pro připojení bez hesla nebo bez klíčů.
Další informace o konfiguraci připojení k databázi pomocí WildFly najdete v pokynech pro PostgreSQL, MySQL nebo SQL Server.
Nastavení prostředků JNDI
K nastavení jednotlivých prostředků JNDI, které potřebujete ve WildFly nakonfigurovat, obvykle použijete následující postup:
- Stáhněte potřebné soubory JAR a zkopírujte je do image Dockeru.
- Vytvořte soubor WildFly module.xml s odkazy na tyto soubory JAR.
- Vytvořte konfiguraci pro konkrétní prostředek JNDI.
- Vytvořte skript rozhraní příkazového řádku JBoss, který se při sestavování Dockeru použije k registraci prostředku JNDI.
- Přidejte vše do souboru Dockerfile.
- V souboru YAML nasazení předejte odpovídající proměnné prostředí.
Následující příklad ukazuje kroky potřebné k vytvoření prostředku JNDI umožňujícího připojení JMS ke službě Azure Service Bus.
Stáhněte poskytovatele Apache Qpid JMS.
Rozbalte stažený archiv, abyste získali soubory JAR.
Ve složce
/opt/servicebus
vytvořte soubor s podobným názvem jakomodule.xml
a přidejte do něj následující kód. Ujistěte se, že čísla verzí souborů JAR odpovídají názvům souborů JAR z předchozího kroku.<?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>
Ve složce
/opt/servicebus
vytvořte souborjndi.properties
.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}
Vytvořte soubor s podobným názvem jako
servicebus-commands.cli
a přidejte do něj následující kód.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
Do souboru
Dockerfile
přidejte následující kód, který zajistí vytvoření prostředku JNDI při sestavování image Dockeru.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
Při vytváření souboru YAML nasazení v pozdější fázi budete muset předat proměnné prostředí
MDB_CONNECTION_FACTORY
,DEFAULT_SBNAMESPACE
aSB_SAS_POLICY
,SB_SAS_KEY
,MDB_QUEUE
,SB_QUEUE
,MDB_TOPIC
aSB_TOPIC
s odpovídajícími hodnotami.
Kontrola konfigurace WildFly
Projděte si příručku pro správce WildFly, která se věnuje všem dalším krokům před migrací, kterými se předchozí pokyny nezabývají.
Sestavení image Dockeru a její odeslání do služby Azure Container Registry
Po vytvoření souboru Dockerfile budete muset sestavit image Dockeru a publikovat ji ve službě Azure Container Registry.
Pokud jste použili naše úložiště Rychlého startu pro kontejner WildFly na GitHubu, proces sestavení image a jejího odeslání do služby Azure Container Registry bude spočívat v zavolání následujících tří příkazů.
V těchto příkladech proměnná prostředí MY_ACR
obsahuje název vaší služby Azure Container Registry a proměnná MY_APP_NAME
obsahuje název webové aplikace, kterou chcete ve službě Azure Container Registry použít.
Sestavení souboru WAR:
mvn package
Přihlášení ke službě Azure Container Registry:
az acr login --name ${MY_ACR}
Sestavení a odeslání image:
az acr build --image ${MY_ACR}.azurecr.io/${MY_APP_NAME} --file src/main/docker/Dockerfile .
Případně můžete pomocí rozhraní příkazového řádku Dockeru image nejprve sestavit a otestovat místně, jak je znázorněno v následujících příkazech. Tento přístup může zjednodušit testování a doladění image před počátečním nasazením v ACR. Musíte však nainstalovat rozhraní příkazového řádku Dockeru a ujistit se, že je spuštěný proces démon Dockeru.
Sestavení image:
docker build -t ${MY_ACR}.azurecr.io/${MY_APP_NAME}
Místní spuštění image:
docker run -it -p 8080:8080 ${MY_ACR}.azurecr.io/${MY_APP_NAME}
Vaše aplikace je teď přístupná na adrese http://localhost:8080
.
Přihlášení ke službě Azure Container Registry:
az acr login --name ${MY_ACR}
Odeslání image do služby Azure Container Registry:
docker push ${MY_ACR}.azurecr.io/${MY_APP_NAME}
Podrobnější informace o sestavování imagí kontejnerů a jejich ukládání v Azure najdete ve výukovém modulu Sestavování a ukládání imagí kontejnerů s využitím služby Azure Container Registry.
Zřízení veřejné IP adresy
Pokud má být vaše aplikace přístupná mimo interní nebo virtuální sítě, budete potřebovat veřejnou statickou IP adresu. Tuto IP adresu byste měli zřídit ve skupině prostředků uzlu clusteru, jak je znázorněno v následujícím příkladu:
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}."
Nasazení do služby Azure Kubernetes Service (AKS)
Vytvořte a použijte soubory YAML pro Kubernetes. Další informace najdete v tématu Rychlý start: Nasazení clusteru Azure Kubernetes Service (AKS) pomocí Azure CLI. Pokud vytváříte externí nástroj pro vyrovnávání zatížení (pro aplikaci nebo kontroler příchozího přenosu dat), jako LoadBalancerIP
zadejte IP adresu zřízenou v předchozí části.
Externalizované parametry zahrňte jako proměnné prostředí. Další informace najdete v tématu Definice proměnných prostředí pro kontejner. Nezahrnujte tajné kódy (například hesla, klíče rozhraní API a připojovací řetězce JDBC). Těmi se zabývá následující část.
Při vytváření souboru YAML nasazení nezapomeňte na nastavení paměti a procesoru, aby vaše kontejnery měly správnou velikost.
Konfigurace trvalého úložiště
Pokud vaše aplikace vyžaduje jiné než nestálé úložiště, nakonfigurujte minimálně jeden trvalý svazek.
Migrace naplánovaných úloh
Pro spouštění naplánovaných úloh v clusteru AKS definujte podle potřeby úlohy Cron pro Kubernetes. Další informace najdete v tématu Spouštění automatizovaných úkolů s využitím úloh Cron.
Po migraci
Teď když je vaše aplikace migrovaná do služby Azure Kubernetes Service, byste měli ověřit, že funguje podle očekávání. Až to uděláte, máme pro vás několik doporučení, která vaší aplikaci dodají výraznější nativně cloudový charakter.
Doporučení
Zvažte přidání názvu DNS k IP adrese přidělené vašemu kontroleru příchozího přenosu dat nebo nástroji pro vyrovnávání zatížení aplikace. Další informace najdete v tématu Použití protokolu TLS s kontrolerem příchozího přenosu dat ve službě Azure Kubernetes Service (AKS).
Zvažte přidání diagramů HELM pro aplikaci. Tyto grafy umožňují parametrizovat nasazení aplikace tak, aby ji mohli používat a přizpůsobovat různorodí zákazníci.
Navrhněte a implementujte strategii DevOps. Pokud chcete zachovat spolehlivost a zároveň zvýšit rychlost vývoje, zvažte automatizaci nasazení a testování pomocí Azure Pipelines. Další informace najdete v tématu Sestavení a nasazení do služby Azure Kubernetes Service pomocí Azure Pipelines.
Povolte pro cluster monitorování Azure. Další informace najdete v tématu Povolení monitorování pro clustery Kubernetes. Díky tomu bude služba Azure Monitor moct shromažďovat protokoly kontejnerů, sledovat využití atd.
Zvažte zpřístupnění metrik specifických pro aplikaci přes Prometheus. Prometheus je opensourcová architektura metrik široce přijímaná v komunitě Kubernetes. Pokud chcete umožnit agregaci metrik z aplikací a automatizovanou odezvu na abnormální stavy nebo jejich eskalaci, můžete místo hostování vlastního serveru Prometheus nakonfigurovat získávání metrik Prometheus ze služby Azure Monitor. Další informace naleznete v tématu Povolení prometheus a Grafana.
Navrhněte a implementujte strategii provozní kontinuity a zotavení po havárii. U nepostradatelných aplikací zvažte architekturu nasazení ve více oblastech. Další informace najdete v tématu Přehled vysoké dostupnosti a zotavení po havárii pro Službu Azure Kubernetes Service (AKS).
Projděte si zásady podpory verzí Kubernetes. Je vaší zodpovědností udržovat cluster AKS aktualizovaný a zajistit, aby byla neustále provozována podporovaná verze. Další informace najdete v tématu Možnosti upgradu pro clustery Azure Kubernetes Service (AKS).
Všechny členy týmu, kteří zodpovídají za správu clusteru a vývoj aplikací, nechejte přečíst příslušné osvědčené postupy pro AKS. Další informace najdete v tématu o osvědčených postupech operátora clusteru a vývojáře pro vytváření a správu aplikací ve službě Azure Kubernetes Service (AKS).
Ujistěte se, že váš soubor nasazení obsahuje definici způsobu provádění kumulativních aktualizací. Další informace najdete v tématu věnovaném nasazování kumulativních aktualizací v dokumentaci ke Kubernetes.
Nastavte automatické škálování, které vám umožní zvládnout zatížení ve špičce. Další informace najdete v tématu Použití automatického škálování clusteru ve službě Azure Kubernetes Service (AKS).
Pokud chcete dosáhnout lepší optimalizace výkonu, zvažte monitorování velikosti mezipaměti kódu a přidání parametrů JVM
-XX:InitialCodeCacheSize
a-XX:ReservedCodeCacheSize
do souboru Dockerfile. Další informace najdete v tématu věnovaném ladění mezipaměti kódu v dokumentaci Oracle.