Nasazení a odebrání aplikací pomocí PowerShellu
Jakmile je typ aplikace zabalený, je připravený k nasazení do clusteru Azure Service Fabric. Nasazení zahrnuje následující tři kroky:
- Nahrajte balíček aplikace do úložiště imagí.
- Zaregistrujte typ aplikace v relativní cestě k úložišti obrázků.
- Vytvořte instanci aplikace.
Jakmile se nasazená aplikace už nevyžaduje, můžete instanci aplikace a její typ aplikace odstranit. K úplnému odebrání aplikace z clusteru patří následující kroky:
- Odeberte (nebo odstraňte) spuštěnou instanci aplikace.
- Pokud ho už nepotřebujete, zrušíte registraci typu aplikace.
- Odeberte balíček aplikace z úložiště imagí.
Pokud k nasazování a ladění aplikací v místním vývojovém clusteru používáte Visual Studio, všechny předchozí kroky se automaticky zpracovávají pomocí skriptu PowerShellu. Tento skript se nachází ve složce Scripts projektu aplikace. Tento článek obsahuje základní informace o tom, co tento skript dělá, abyste mohli provádět stejné operace mimo Visual Studio.
Dalším způsobem, jak nasadit aplikaci, je použití externího zřizování. Balíček aplikace lze zabalit jako sfpkg
externí úložiště a nahrát ho do externího úložiště. V takovém případě není potřeba nahrát do úložiště imagí. Nasazení vyžaduje následující kroky:
- Nahrajte soubor
sfpkg
do externího úložiště. Externí úložiště může být libovolné úložiště, které zveřejňuje koncový bod REST HTTP nebo https. - Pomocí identifikátoru URI externího stahování a informací o typu aplikace zaregistrujte typ aplikace.
- Vytvořte instanci aplikace.
Pro vyčištění odeberte instance aplikace a zrušte registraci typu aplikace. Vzhledem k tomu, že balíček nebyl zkopírován do úložiště imagí, není k vyčištění žádné dočasné umístění. Zřizování z externího úložiště je k dispozici od Service Fabric verze 6.1.
Poznámka:
Visual Studio v současné době nepodporuje externí zřizování.
Připojení ke clusteru
Před spuštěním jakýchkoli příkazů PowerShellu v tomto článku vždy začněte pomocí Connect-ServiceFabricCluster pro připojení ke clusteru Service Fabric. Pokud se chcete připojit k místnímu vývojovému clusteru, spusťte následující příkaz:
Connect-ServiceFabricCluster
Příklady připojení ke vzdálenému clusteru nebo clusteru zabezpečenému pomocí Microsoft Entra ID, certifikátů X509 nebo Služby Windows Active Directory naleznete v tématu Připojení k zabezpečenému clusteru.
Nahrání balíčku aplikace
Nahrání balíčku aplikace ho umístí do umístění, které je přístupné interními komponentami Service Fabric. Pokud chcete balíček aplikace ověřit místně, použijte rutinu Test-ServiceFabricApplicationPackage .
Příkaz Copy-ServiceFabricApplicationPackage nahraje balíček aplikace do úložiště imagí clusteru.
Předpokládejme, že sestavíte a zabalíte aplikaci s názvem MyApplication v sadě Visual Studio 2015. Ve výchozím nastavení je název typu aplikace uvedený v ApplicationManifest.xml "MyApplicationType". Balíček aplikace, který obsahuje potřebný manifest aplikace, manifesty služby a balíčky kódu/config/data, se nachází v umístění C:\Users<username>\Documents\Visual Studio 2015\Projects\MyApplication\MyApplication\pkg\Debug.
Následující příkaz zobrazí obsah balíčku aplikace:
$path = 'C:\Users\<user\>\Documents\Visual Studio 2015\Projects\MyApplication\MyApplication\pkg\Debug'
tree /f $path
Folder PATH listing for volume OSDisk
Volume serial number is 0459-2393
C:\USERS\USER\DOCUMENTS\VISUAL STUDIO 2015\PROJECTS\MYAPPLICATION\MYAPPLICATION\PKG\DEBUG
│ ApplicationManifest.xml
│
└───Stateless1Pkg
│ ServiceManifest.xml
│
├───Code
│ Microsoft.ServiceFabric.Data.dll
│ Microsoft.ServiceFabric.Data.Interfaces.dll
│ Microsoft.ServiceFabric.Internal.dll
│ Microsoft.ServiceFabric.Internal.Strings.dll
│ Microsoft.ServiceFabric.Services.dll
│ ServiceFabricServiceModel.dll
│ Stateless1.exe
│ Stateless1.exe.config
│ Stateless1.pdb
│ System.Fabric.dll
│ System.Fabric.Strings.dll
│
└───Config
Settings.xml
Pokud je balíček aplikace velký nebo obsahuje mnoho souborů, můžete ho zkomprimovat. Komprese zmenšuje velikost a počet souborů. Výsledkem je rychlejší registrace a zrušení registrace typu aplikace. Čas nahrávání může být v současné době pomalejší, zejména pokud zahrnete čas komprese balíčku.
Ke komprimaci balíčku použijte stejný příkaz Copy-ServiceFabricApplicationPackage . Kompresi je možné provést odděleně od nahrávání, pomocí příznaku SkipCopy
nebo společně s operací nahrávání. Použití komprese u komprimovaného balíčku není op.
Pokud chcete komprimovaný balíček zrušit, použijte stejný příkaz Copy-ServiceFabricApplicationPackage s přepínačem UncompressPackage
.
Následující rutina komprimuje balíček bez zkopírování do úložiště imagí. Balíček teď obsahuje komprimované soubory pro balíčky Code
a Config
balíčky.
Aplikace a manifesty služby nejsou zazipovány, protože jsou potřeba pro mnoho interních operací (jako je sdílení balíčků, název aplikace a extrakce verzí pro určitá ověření). Zazipování manifestů by tyto operace bylo neefektivní.
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath $path -CompressPackage -SkipCopy
tree /f $path
Folder PATH listing for volume OSDisk
Volume serial number is 0459-2393
C:\USERS\USER\DOCUMENTS\VISUAL STUDIO 2015\PROJECTS\MYAPPLICATION\MYAPPLICATION\PKG\DEBUG
| ApplicationManifest.xml
|
└───Stateless1Pkg
Code.zip
Config.zip
ServiceManifest.xml
U rozsáhlých balíčků aplikací komprese nějakou dobu trvá. Nejlepších výsledků dosáhnete, když použijete rychlou jednotku SSD. Časy komprese a velikost komprimovaného balíčku se také liší v závislosti na obsahu balíčku. Tady je například statistika komprese pro některé balíčky, které zobrazují počáteční a komprimovanou velikost balíčku s časem komprese.
Počáteční velikost (MB) | Počet souborů | Čas komprese | Komprimovaná velikost balíčku (MB) |
---|---|---|---|
100 | 100 | 00:00:03.3547592 | 60 |
512 | 100 | 00:00:16.3850303 | 307 |
1024 | 500 | 00:00:32.5907950 | 615 |
2048 | 1000 | 00:01:04.3775554 | 1231 |
5012 | 100 | 00:02:45.2951288 | 3074 |
Jakmile je balíček komprimovaný, můžete ho podle potřeby nahrát do jednoho nebo několika clusterů Service Fabric. Mechanismus nasazení je stejný pro komprimované a nekomprimované balíčky. Komprimované balíčky se ukládají jako takové v úložišti imagí clusteru. Balíčky se nekomprimují na uzlu před spuštěním aplikace.
Následující příklad nahraje balíček do úložiště imagí do složky s názvem MyApplicationV1:
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath $path -ApplicationPackagePathInImageStore MyApplicationV1 -TimeoutSec 1800
Pokud nezadáte parametr -ApplicationPackagePathInImageStore , balíček aplikace se zkopíruje do složky Debug v úložišti obrázků.
Poznámka:
Copy-ServiceFabricApplicationPackage automaticky rozpozná příslušné úložiště imagí připojovací řetězec, pokud je relace PowerShellu připojená ke clusteru Service Fabric. Pro verze Service Fabric starší než 5.6 musí být argument -ImageStoreConnectionString explicitně zadán.
PS C:\> Copy-ServiceFabricApplicationPackage -ApplicationPackagePath $path -ApplicationPackagePathInImageStore MyApplicationV1 -ImageStoreConnectionString (Get-ImageStoreConnectionStringFromClusterManifest(Get-ServiceFabricClusterManifest)) -TimeoutSec 1800
Rutina Get-ImageStoreConnectionStringFromClusterManifest, která je součástí modulu PowerShell sady Service Fabric SDK, slouží k získání úložiště imagí připojovací řetězec. Pokud chcete importovat modul SDK, spusťte:
Import-Module "$ENV:ProgramFiles\Microsoft SDKs\Service Fabric\Tools\PSModule\ServiceFabricSDK\ServiceFabricSDK.psm1"
Další informace o úložišti imagí a úložišti imagí připojovací řetězec najdete v tématu Vysvětlení připojovací řetězec úložiště imagí.
Doba potřebnou k nahrání balíčku se liší v závislosti na několika faktorech. Mezi tyto faktory patří počet souborů v balíčku, velikost balíčku a velikosti souborů. Rychlost sítě mezi zdrojovým počítačem a clusterem Service Fabric má vliv také na čas nahrávání. Výchozí časový limit pro Copy-ServiceFabricApplicationPackage je 30 minut. V závislosti na popsaných faktorech možná budete muset časový limit zvýšit. Pokud komprimujete balíček při volání kopírování, musíte zvážit také dobu komprese.
Registrace balíčku aplikace
Typ a verze aplikace deklarované v manifestu aplikace budou k dispozici pro použití při registraci balíčku aplikace. Systém přečte balíček nahraný v předchozím kroku, ověří balíček, zpracuje obsah balíčku a zkopíruje zpracovaný balíček do interního systémového umístění.
Spuštěním rutiny Register-ServiceFabricApplicationType zaregistrujte typ aplikace v clusteru a zpřístupnit ho pro nasazení:
Registrace balíčku aplikace zkopírovaného do úložiště imagí
Při kopírování balíčku do úložiště imagí určuje operace registrace relativní cestu v úložišti imagí.
Register-ServiceFabricApplicationType -ApplicationPathInImageStore MyApplicationV1
Register application type succeeded
MyApplicationV1 je složka v úložišti imagí, kde se nachází balíček aplikace. Typ aplikace s názvem MyApplicationType a verzí 1.0.0 (oba se nacházejí v manifestu aplikace) je teď zaregistrovaný v clusteru.
Registrace balíčku aplikace zkopírovaného do externího úložiště
Počínaje Service Fabric verze 6.1 podporuje zřízení stahování balíčku z externího úložiště. Identifikátor URI pro stažení představuje cestu k sfpkg
balíčku aplikace, ze kterého lze balíček aplikace stáhnout pomocí protokolů HTTP nebo HTTPS. Balíček musel být dříve odeslán do tohoto externího umístění. Identifikátor URI musí povolit přístup pro čtení, aby služba Service Fabric mohla soubor stáhnout. Soubor sfpkg
musí mít příponu ".sfpkg". Operace zřizování by měla obsahovat informace o typu aplikace, jak je nalezeno v manifestu aplikace.
Register-ServiceFabricApplicationType -ApplicationPackageDownloadUri "https://sftestresources.blob.core.windows.net:443/sfpkgholder/MyAppPackage.sfpkg" -ApplicationTypeName MyApp -ApplicationTypeVersion V1 -Async
Příkaz Register-ServiceFabricApplicationType se vrátí až po úspěšném zaregistrování balíčku aplikace v systému. Doba trvání registrace závisí na velikosti a obsahu balíčku aplikace. V případě potřeby lze parametr -TimeoutSec použít k zadání delšího časového limitu (výchozí časový limit je 60 sekund).
Pokud máte velký balíček aplikace nebo pokud dochází k vypršení časových limitů, použijte parametr -Async . Příkaz se vrátí, když cluster přijme příkaz register. Operace registrace pokračuje podle potřeby. Příkaz Get-ServiceFabricApplicationType uvádí verze typu aplikace a jejich stav registrace. Tento příkaz můžete použít k určení, kdy se registrace dokončí.
Get-ServiceFabricApplicationType
ApplicationTypeName : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status : Available
DefaultParameters : { "Stateless1_InstanceCount" = "-1" }
Odebrání balíčku aplikace z úložiště imagí
Pokud se balíček zkopíroval do úložiště imagí, měli byste ho po úspěšné registraci aplikace odebrat z dočasného umístění. Odstranění balíčků aplikací z úložiště imagí uvolní systémové prostředky. Udržování nepoužívaných balíčků aplikací spotřebovává diskové úložiště a vede k problémům s výkonem aplikací.
Remove-ServiceFabricApplicationPackage -ApplicationPackagePathInImageStore MyApplicationV1
Vytvoření aplikace
Pomocí rutiny New-ServiceFabricApplication můžete vytvořit instanci aplikace z libovolné verze typu aplikace, která byla úspěšně zaregistrována. Název každé aplikace musí začínat schématem "fabric:" a musí být jedinečný pro každou instanci aplikace. Vytvoří se také všechny výchozí služby definované v manifestu aplikace cílového typu aplikace.
New-ServiceFabricApplication fabric:/MyApp MyApplicationType 1.0.0
ApplicationName : fabric:/MyApp
ApplicationTypeName : MyApplicationType
ApplicationTypeVersion : 1.0.0
ApplicationParameters : {}
Pro libovolnou verzi registrované aplikace je možné vytvořit více instancí aplikace. Každá instance aplikace běží izolovaně s vlastním pracovním adresářem a procesem.
Pokud chcete zjistit, které pojmenované aplikace a služby běží v clusteru, spusťte rutiny Get-ServiceFabricApplication a Get-ServiceFabricService :
Get-ServiceFabricApplication
ApplicationName : fabric:/MyApp
ApplicationTypeName : MyApplicationType
ApplicationTypeVersion : 1.0.0
ApplicationStatus : Ready
HealthState : Ok
ApplicationParameters : {}
Get-ServiceFabricApplication | Get-ServiceFabricService
ServiceName : fabric:/MyApp/Stateless1
ServiceKind : Stateless
ServiceTypeName : Stateless1Type
IsServiceGroup : False
ServiceManifestVersion : 1.0.0
ServiceStatus : Active
HealthState : Ok
Odebrání aplikace
Pokud už instanci aplikace nepotřebujete, můžete ji trvale odebrat pomocí rutiny Remove-ServiceFabricApplication . Remove-ServiceFabricApplication automaticky odebere všechny služby, které patří do aplikace, trvale odebere veškerý stav služby.
Upozorňující
Tuto operaci nelze vrátit zpět a stav aplikace nelze obnovit.
Remove-ServiceFabricApplication fabric:/MyApp
Confirm
Continue with this operation?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"):
Remove application instance succeeded
Get-ServiceFabricApplication
Zrušení registrace typu aplikace
Pokud už konkrétní verzi typu aplikace nepotřebujete, měli byste zrušit registraci typu aplikace pomocí rutiny Unregister-ServiceFabricApplicationType . Zrušení registrace nepoužívaných typů aplikací uvolní místo úložiště používané úložištěm imagí odebráním souborů typu aplikace. Zrušení registrace typu aplikace neodebere balíček aplikace zkopírovaný do dočasného umístění úložiště imagí, pokud byla použita kopie do úložiště imagí. Typ aplikace je možné zrušit, pokud na něj nejsou instance žádné aplikace a žádné nevyřízené upgrady aplikací na něj odkazují.
Spuštěním rutiny Get-ServiceFabricApplicationType zobrazte typy aplikací aktuálně zaregistrované v clusteru:
Get-ServiceFabricApplicationType
ApplicationTypeName : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status : Available
DefaultParameters : { "Stateless1_InstanceCount" = "-1" }
Spuštěním příkazu Unregister-ServiceFabricApplicationType zrušíte registraci konkrétního typu aplikace:
Unregister-ServiceFabricApplicationType MyApplicationType 1.0.0
Řešení problému
Copy-ServiceFabricApplicationPackage žádá o imageStoreConnectionString
Prostředí sady Service Fabric SDK by už mělo mít nastavené správné výchozí hodnoty. V případě potřeby by ale imageStoreConnectionString pro všechny příkazy měl odpovídat hodnotě, kterou cluster Service Fabric používá. ImageStoreConnectionString najdete v manifestu clusteru, který se načte pomocí příkazů Get-ServiceFabricClusterManifest a Get-ImageStoreConnectionStringFromClusterManifest:
Get-ImageStoreConnectionStringFromClusterManifest(Get-ServiceFabricClusterManifest)
Rutina Get-ImageStoreConnectionStringFromClusterManifest, která je součástí modulu PowerShell sady Service Fabric SDK, slouží k získání úložiště imagí připojovací řetězec. Pokud chcete importovat modul SDK, spusťte:
Import-Module "$ENV:ProgramFiles\Microsoft SDKs\Service Fabric\Tools\PSModule\ServiceFabricSDK\ServiceFabricSDK.psm1"
ImageStoreConnectionString se nachází v manifestu clusteru:
<ClusterManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" Name="Server-Default-SingleNode" Version="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
[...]
<Section Name="Management">
<Parameter Name="ImageStoreConnectionString" Value="file:D:\ServiceFabric\Data\ImageStore" />
</Section>
[...]
Další informace o úložišti imagí a úložišti imagí připojovací řetězec najdete v tématu Vysvětlení připojovací řetězec úložiště imagí.
Nasazení velkého balíčku aplikace
Problém: Časový limit copy-ServiceFabricApplicationPackage pro velký balíček aplikace (pořadí GB). Vyzkoušejte:
- Zadejte větší časový limit příkazu Copy-ServiceFabricApplicationPackage s parametrem
TimeoutSec
. Ve výchozím nastavení je časový limit 30 minut. - Zkontrolujte síťové připojení mezi zdrojovým počítačem a clusterem. Pokud je připojení pomalé, zvažte použití počítače s lepším síťovým připojením. Pokud je klientský počítač v jiné oblasti než cluster, zvažte použití klientského počítače v bližší nebo stejné oblasti jako cluster.
- Zkontrolujte, jestli nesáhnete na externí omezování. Pokud je například úložiště imagí nakonfigurované tak, aby používalo úložiště Azure, může dojít k omezení nahrávání.
Problém: Nahrávání balíčku se úspěšně dokončilo, ale vyprší časový limit register-ServiceFabricApplicationType . Zkusit:
- Před zkopírováním do úložiště imagí zkomprimujte balíček . Komprese zmenšuje velikost a počet souborů, což zase snižuje objem provozu a práci, kterou musí Service Fabric provést. Operace nahrávání může být pomalejší (zejména pokud zahrnete čas komprese), ale registrace a zrušení registrace typu aplikace je rychlejší.
- Zadejte větší časový limit pro Register-ServiceFabricApplicationType s parametrem
TimeoutSec
. - Zadejte
Async
přepínač pro Register-ServiceFabricApplicationType. Příkaz se vrátí, když cluster přijme příkaz a registrace typu aplikace pokračuje asynchronně. Z tohoto důvodu není nutné v tomto případě zadat vyšší časový limit. Příkaz Get-ServiceFabricApplicationType zobrazí seznam všech úspěšně registrovaných verzí typu aplikace a jejich stav registrace. Tento příkaz můžete použít k určení, kdy se registrace dokončí.
Get-ServiceFabricApplicationType
ApplicationTypeName : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status : Available
DefaultParameters : { "Stateless1_InstanceCount" = "-1" }
Nasazení balíčku aplikace s mnoha soubory
Problém: U balíčku aplikace s mnoha soubory (pořadí tisíců) vyprší časový limit register-ServiceFabricApplicationType . Vyzkoušejte:
- Před zkopírováním do úložiště imagí zkomprimujte balíček . Komprese snižuje počet souborů.
- Zadejte větší časový limit pro Register-ServiceFabricApplicationType s parametrem
TimeoutSec
. - Zadejte
Async
přepínač pro Register-ServiceFabricApplicationType. Příkaz se vrátí, když cluster přijme příkaz a registrace typu aplikace pokračuje asynchronně. Z tohoto důvodu není nutné v tomto případě zadat vyšší časový limit. Příkaz Get-ServiceFabricApplicationType zobrazí seznam všech úspěšně registrovaných verzí typu aplikace a jejich stav registrace. Tento příkaz můžete použít k určení, kdy se registrace dokončí.
Get-ServiceFabricApplicationType
ApplicationTypeName : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status : Available
DefaultParameters : { "Stateless1_InstanceCount" = "-1" }
Další kroky
Upgrade aplikace Service Fabric