Toepassingen implementeren en verwijderen met Behulp van PowerShell


Zodra een toepassingstype is verpakt, is het klaar voor implementatie in een Azure Service Fabric-cluster. Implementatie omvat de volgende drie stappen:

  1. Upload het toepassingspakket naar het afbeeldingsarchief.
  2. Registreer het toepassingstype bij het relatieve pad van het afbeeldingsarchief.
  3. Maak het toepassingsexemplaren.

Zodra de geïmplementeerde toepassing niet meer vereist is, kunt u het toepassingsexemplaren en het bijbehorende toepassingstype verwijderen. Als u een toepassing volledig uit het cluster wilt verwijderen, moet u de volgende stappen uitvoeren:

  1. Verwijder (of verwijder) het actieve toepassingsexemplaren.
  2. Hef de registratie van het toepassingstype op als u dit niet meer nodig hebt.
  3. Verwijder het toepassingspakket uit het installatiekopieënarchief.

Als u Visual Studio gebruikt voor het implementeren en opsporen van fouten in toepassingen in uw lokale ontwikkelcluster, worden alle voorgaande stappen automatisch afgehandeld via een PowerShell-script. Dit script vindt u in de map Scripts van het toepassingsproject. Dit artikel bevat achtergrondinformatie over wat dat script doet, zodat u dezelfde bewerkingen buiten Visual Studio kunt uitvoeren.

Een andere manier om een toepassing te implementeren, is met behulp van externe inrichting. Het toepassingspakket kan worden verpakt als sfpkg en geüpload naar een extern archief. In dit geval is uploaden naar het afbeeldingsarchief niet nodig. Implementatie heeft de volgende stappen nodig:

  1. Upload de sfpkg naar een externe winkel. Het externe archief kan elk archief zijn dat een REST HTTP- of HTTPS-eindpunt beschikbaar maakt.
  2. Registreer het toepassingstype met behulp van de externe download-URI en de informatie over het toepassingstype.
  3. Maak het toepassingsexemplaren.

Voor het opschonen verwijdert u de toepassingsexemplaren en maakt u de registratie van het toepassingstype ongedaan. Omdat het pakket niet is gekopieerd naar het installatiekopieënarchief, is er geen tijdelijke locatie om op te ruimen. Inrichten vanuit externe opslag is beschikbaar vanaf Service Fabric versie 6.1.

Notitie

Visual Studio biedt momenteel geen ondersteuning voor externe inrichting.

Verbinding maken met het cluster

Voordat u PowerShell-opdrachten in dit artikel uitvoert, moet u altijd Verbinding maken-ServiceFabricCluster gebruiken om verbinding te maken met het Service Fabric-cluster. Voer het volgende uit om verbinding te maken met het lokale ontwikkelcluster:

Connect-ServiceFabricCluster

Zie voor voorbeelden van het maken van verbinding met een extern cluster of cluster dat is beveiligd met Behulp van Microsoft Entra ID, X509-certificaten of Windows Active Directory Verbinding maken met een beveiligd cluster.

Het toepassingspakket uploaden

Als u het toepassingspakket uploadt, wordt het op een locatie geplaatst die toegankelijk is voor interne Service Fabric-onderdelen. Als u het toepassingspakket lokaal wilt controleren, gebruikt u de cmdlet Test-ServiceFabricApplicationPackage .

Met de opdracht Copy-ServiceFabricApplicationPackage wordt het toepassingspakket geüpload naar het clusterinstallatiekopiearchief.

Stel dat u een toepassing bouwt en verpakt met de naam MyApplication in Visual Studio 2015. De naam van het toepassingstype die wordt vermeld in applicationManifest.xml is standaard 'MyApplicationType'. Het toepassingspakket, dat het benodigde toepassingsmanifest, servicemanifesten en code/config/data packages bevat, bevindt zich in C:\Users<username>\Documents\Visual Studio 2015\Projects\MyApplication\MyApplication\pkg\Debug.

Met de volgende opdracht wordt de inhoud van het toepassingspakket weergegeven:

$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

Als het toepassingspakket groot is en/of veel bestanden heeft, kunt u het comprimeren. De compressie vermindert de grootte en het aantal bestanden. Dit resulteert in een snellere registratie en het ongedaan maken van de registratie van het toepassingstype. De uploadtijd kan momenteel langzamer zijn, met name als u de tijd opneemt om het pakket te comprimeren.

Als u een pakket wilt comprimeren, gebruikt u dezelfde opdracht Copy-ServiceFabricApplicationPackage . Compressie kan los van het uploaden worden uitgevoerd met behulp van de SkipCopy vlag of samen met de uploadbewerking. Het toepassen van compressie op een gecomprimeerd pakket is no-op. Als u een gecomprimeerd pakket wilt opheffen, gebruikt u dezelfde opdracht Copy-ServiceFabricApplicationPackage met de UncompressPackage switch.

Met de volgende cmdlet wordt het pakket gecomprimeerd zonder het naar het installatiekopiearchief te kopiëren. Het pakket bevat nu gezipte bestanden voor de Code en Config pakketten. De toepassing en de servicemanifesten worden niet gezipt, omdat ze nodig zijn voor veel interne bewerkingen (zoals het delen van pakketten, de naam van het toepassingstype en het ophalen van versies voor bepaalde validaties). Als u de manifesten zipt, worden deze bewerkingen inefficiënt.

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

Voor grote toepassingspakketten kost de compressie tijd. Gebruik voor de beste resultaten een snel SSD-station. De compressietijden en de grootte van het gecomprimeerde pakket verschillen ook op basis van de pakketinhoud. Hier ziet u bijvoorbeeld compressiestatistieken voor sommige pakketten, die de initiële en de gecomprimeerde pakketgrootte weergeven, met de compressietijd.

Oorspronkelijke grootte (MB) Aantal bestanden Compressietijd Gecomprimeerde pakketgrootte (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

Zodra een pakket is gecomprimeerd, kan het naar behoefte worden geüpload naar een of meerdere Service Fabric-clusters. Het implementatiemechanisme is hetzelfde voor gecomprimeerde en niet-gecomprimeerde pakketten. Gecomprimeerde pakketten worden als zodanig opgeslagen in het archief met clusterinstallatiekopieën. De pakketten worden niet gecomprimeerd op het knooppunt voordat de toepassing wordt uitgevoerd.

In het volgende voorbeeld wordt het pakket geüpload naar het afbeeldingsarchief, naar een map met de naam 'MyApplicationV1':

Copy-ServiceFabricApplicationPackage -ApplicationPackagePath $path -ApplicationPackagePathInImageStore MyApplicationV1 -TimeoutSec 1800

Als u de parameter -ApplicationPackagePathInImageStore niet opgeeft, wordt het toepassingspakket gekopieerd naar de map Foutopsporing in het installatiekopiearchief.

Notitie

Copy-ServiceFabricApplicationPackage detecteert automatisch het juiste installatiekopiearchief verbindingsreeks als de PowerShell-sessie is verbonden met een Service Fabric-cluster. Voor Service Fabric-versies ouder dan 5.6 moet het argument -ImageStore Verbinding maken ionString expliciet worden opgegeven.

PS C:\> Copy-ServiceFabricApplicationPackage -ApplicationPackagePath $path -ApplicationPackagePathInImageStore MyApplicationV1 -ImageStoreConnectionString (Get-ImageStoreConnectionStringFromClusterManifest(Get-ServiceFabricClusterManifest)) -TimeoutSec 1800

De cmdlet Get-ImageStore Verbinding maken ionStringFromClusterManifest, die deel uitmaakt van de Service Fabric SDK PowerShell-module, wordt gebruikt om het installatiekopiearchief op te halen verbindingsreeks. Voer het volgende uit om de SDK-module te importeren:

Import-Module "$ENV:ProgramFiles\Microsoft SDKs\Service Fabric\Tools\PSModule\ServiceFabricSDK\ServiceFabricSDK.psm1"

Zie Meer informatie over het afbeeldingsarchief verbindingsreeks voor aanvullende informatie over het afbeeldingsarchief en het verbindingsreeks van het afbeeldingsarchief.

De tijd die nodig is om een pakket te uploaden, verschilt afhankelijk van meerdere factoren. Sommige van deze factoren zijn het aantal bestanden in het pakket, de pakketgrootte en de bestandsgrootte. De netwerksnelheid tussen de bronmachine en het Service Fabric-cluster heeft ook invloed op de uploadtijd. De standaardtime-out voor Copy-ServiceFabricApplicationPackage is 30 minuten. Afhankelijk van de beschreven factoren moet u mogelijk de time-out verhogen. Als u het pakket in de kopieeroproep comprimeert, moet u ook rekening houden met de compressietijd.

Het toepassingspakket registreren

Het toepassingstype en de versie die in het toepassingsmanifest zijn gedeclareerd, zijn beschikbaar voor gebruik wanneer het toepassingspakket is geregistreerd. Het systeem leest het pakket dat in de vorige stap is geüpload, controleert het pakket, verwerkt de inhoud van het pakket en kopieert het verwerkte pakket naar een interne systeemlocatie.

Voer de cmdlet Register-ServiceFabricApplicationType uit om het toepassingstype in het cluster te registreren en beschikbaar te maken voor implementatie:

Het toepassingspakket registreren dat is gekopieerd naar het installatiekopieënarchief

Wanneer een pakket eerder naar het installatiekopieënarchief is gekopieerd, geeft de registerbewerking het relatieve pad in het afbeeldingsarchief op.

Register-ServiceFabricApplicationType -ApplicationPathInImageStore MyApplicationV1
Register application type succeeded

'MyApplicationV1' is de map in het afbeeldingsarchief waar het toepassingspakket zich bevindt. Het toepassingstype met de naam MyApplicationType en versie 1.0.0 (beide zijn te vinden in het toepassingsmanifest) is nu geregistreerd in het cluster.

Het toepassingspakket registreren dat is gekopieerd naar een extern archief

Vanaf Service Fabric versie 6.1 biedt inrichting ondersteuning voor het downloaden van het pakket vanuit een externe store. De download-URI vertegenwoordigt het pad naar het sfpkg toepassingspakket van waaruit het toepassingspakket kan worden gedownload met behulp van HTTP- of HTTPS-protocollen. Het pakket moet eerder zijn geüpload naar deze externe locatie. De URI moet LEEStoegang toestaan, zodat Service Fabric het bestand kan downloaden. Het sfpkg bestand moet de extensie '.sfpkg' hebben. De inrichtingsbewerking moet de informatie over het toepassingstype bevatten, zoals te vinden is in het toepassingsmanifest.

Register-ServiceFabricApplicationType -ApplicationPackageDownloadUri "https://sftestresources.blob.core.windows.net:443/sfpkgholder/MyAppPackage.sfpkg" -ApplicationTypeName MyApp -ApplicationTypeVersion V1 -Async

De opdracht Register-ServiceFabricApplicationType retourneert alleen nadat het systeem het toepassingspakket heeft geregistreerd. Hoe lang de registratie duurt, is afhankelijk van de grootte en inhoud van het toepassingspakket. Indien nodig kan de parameter -TimeoutSec worden gebruikt om een langere time-out op te geven (de standaardtime-out is 60 seconden).

Als u een groot toepassingspakket hebt of als u time-outs ondervindt, gebruikt u de parameter -Async . De opdracht wordt geretourneerd wanneer het cluster de registeropdracht accepteert. De registratiebewerking wordt zo nodig voortgezet. Met de opdracht Get-ServiceFabricApplicationType worden de versies van het toepassingstype en de bijbehorende registratiestatus vermeld. U kunt deze opdracht gebruiken om te bepalen wanneer de registratie is voltooid.

Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Een toepassingspakket verwijderen uit het installatiekopieënarchief

Als een pakket is gekopieerd naar het installatiekopieënarchief, moet u het verwijderen van de tijdelijke locatie nadat de toepassing is geregistreerd. Als u toepassingspakketten verwijdert uit het installatiekopieënarchief, worden systeembronnen vrijgemaakt. Ongebruikte toepassingspakketten verbruiken schijfopslag en leiden tot prestatieproblemen van toepassingen.

Remove-ServiceFabricApplicationPackage -ApplicationPackagePathInImageStore MyApplicationV1

De toepassing maken

U kunt een toepassing instantiëren vanuit elke versie van het toepassingstype die is geregistreerd met behulp van de cmdlet New-ServiceFabricApplication . De naam van elke toepassing moet beginnen met het 'fabric:' -schema en moet uniek zijn voor elk toepassingsexemplaren. Sstandaardservices gedefinieerd in het toepassingsmanifest van het doeltoepassingstype worden ook aangemaakt.

New-ServiceFabricApplication fabric:/MyApp MyApplicationType 1.0.0
ApplicationName        : fabric:/MyApp
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
ApplicationParameters  : {}

Er kunnen meerdere toepassingsexemplaren worden gemaakt voor elke versie van een geregistreerd toepassingstype. Elk toepassingsexemplaren worden geïsoleerd uitgevoerd, met een eigen werkmap en een eigen proces.

Als u wilt zien welke benoemde apps en services worden uitgevoerd in het cluster, voert u de cmdlets Get-ServiceFabricApplication en Get-ServiceFabricService uit:

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

Een toepassing verwijderen

Wanneer een toepassingsexemplaren niet meer nodig zijn, kunt u het permanent verwijderen met behulp van de cmdlet Remove-ServiceFabricApplication . Remove-ServiceFabricApplication verwijdert automatisch alle services die deel uitmaken van de toepassing en verwijdert permanent alle servicestatussen.

Waarschuwing

Deze bewerking kan niet worden omgekeerd en de toepassingsstatus kan niet worden hersteld.

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

Registratie van een toepassingstype ongedaan maken

Wanneer een bepaalde versie van een toepassingstype niet meer nodig is, moet u de registratie van het toepassingstype opheffen met de cmdlet Unregister-ServiceFabricApplicationType . Als u de registratie van ongebruikte toepassingstypen ongedaan maakt, wordt opslagruimte vrijgemaakt die door het installatiekopiearchief wordt gebruikt door de bestanden van het toepassingstype te verwijderen. Als u de registratie van een toepassingstype ongedaan maakt, wordt het toepassingspakket dat naar de tijdelijke locatie van het installatiekopiearchief is gekopieerd, niet verwijderd als de kopie naar het installatiekopiearchief is gebruikt. Een toepassingstype kan niet worden geregistreerd zolang er geen toepassingen worden geïnstantieerd en er worden geen wachtende toepassingsupgrades naar verwezen.

Voer Get-ServiceFabricApplicationType uit om de toepassingstypen te zien die momenteel zijn geregistreerd in het cluster:

Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Voer Unregister-ServiceFabricApplicationType uit om de registratie van een specifiek toepassingstype ongedaan te maken:

Unregister-ServiceFabricApplicationType MyApplicationType 1.0.0

Problemen oplossen

Copy-ServiceFabricApplicationPackage vraagt om een ImageStore Verbinding maken ionString

De Service Fabric SDK-omgeving moet al de juiste standaardinstellingen hebben ingesteld. Maar indien nodig moet de ImageStore Verbinding maken ionString voor alle opdrachten overeenkomen met de waarde die het Service Fabric-cluster gebruikt. U vindt de ImageStore Verbinding maken ionString in het clustermanifest, opgehaald met behulp van de opdrachten Get-ServiceFabricClusterManifest en Get-ImageStore Verbinding maken ionStringFromClusterManifest:

Get-ImageStoreConnectionStringFromClusterManifest(Get-ServiceFabricClusterManifest)

De cmdlet Get-ImageStore Verbinding maken ionStringFromClusterManifest, die deel uitmaakt van de Service Fabric SDK PowerShell-module, wordt gebruikt om het installatiekopiearchief op te halen verbindingsreeks. Voer het volgende uit om de SDK-module te importeren:

Import-Module "$ENV:ProgramFiles\Microsoft SDKs\Service Fabric\Tools\PSModule\ServiceFabricSDK\ServiceFabricSDK.psm1"

De ImageStore Verbinding maken ionString vindt u in het clustermanifest:

<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>

    [...]

Zie Meer informatie over het afbeeldingsarchief verbindingsreeks voor aanvullende informatie over het afbeeldingsarchief en het verbindingsreeks van het afbeeldingsarchief.

Groot toepassingspakket implementeren

Probleem: Copy-ServiceFabricApplicationPackage time-out voor een groot toepassingspakket (volgorde van GB). Probeer:

  • Geef een grotere time-out op voor de opdracht Copy-ServiceFabricApplicationPackage , met TimeoutSec parameter. De time-out is standaard 30 minuten.
  • Controleer de netwerkverbinding tussen uw broncomputer en cluster. Als de verbinding traag is, kunt u overwegen een machine met een betere netwerkverbinding te gebruiken. Als de clientcomputer zich in een andere regio bevindt dan het cluster, kunt u overwegen om een clientcomputer in een dichtere of dezelfde regio als het cluster te gebruiken.
  • Controleer of u externe beperking hebt bereikt. Wanneer het installatiekopieënarchief bijvoorbeeld is geconfigureerd voor het gebruik van Azure Storage, kan uploaden worden beperkt.

Probleem: Het uploaden van het pakket is voltooid, maar er treedt een time-out op bij Register-ServiceFabricApplicationType . Proberen:

  • Comprimeer het pakket voordat u naar het installatiekopiearchief kopieert. De compressie vermindert de grootte en het aantal bestanden, wat op zijn beurt de hoeveelheid verkeer vermindert en het werk dat Service Fabric moet uitvoeren. De uploadbewerking kan langzamer zijn (met name als u de compressietijd opneemt), maar het toepassingstype registreren en de registratie ongedaan maken is sneller.
  • Geef een grotere time-out op voor Register-ServiceFabricApplicationType met TimeoutSec parameter.
  • Geef Async de schakeloptie voor Register-ServiceFabricApplicationType op. De opdracht wordt geretourneerd wanneer het cluster de opdracht accepteert en de registratie van het toepassingstype asynchroon wordt voortgezet. Daarom hoeft u in dit geval geen hogere time-out op te geven. Met de opdracht Get-ServiceFabricApplicationType worden alle geregistreerde versies van het toepassingstype en de registratiestatus weergegeven. U kunt deze opdracht gebruiken om te bepalen wanneer de registratie is voltooid.
Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Toepassingspakket met veel bestanden implementeren

Probleem: Er treedt een time-out op voor register-ServiceFabricApplicationType voor een toepassingspakket met veel bestanden (volgorde van duizenden). Probeer:

  • Comprimeer het pakket voordat u naar het installatiekopiearchief kopieert. De compressie vermindert het aantal bestanden.
  • Geef een grotere time-out op voor Register-ServiceFabricApplicationType met TimeoutSec parameter.
  • Geef Async de schakeloptie voor Register-ServiceFabricApplicationType op. De opdracht wordt geretourneerd wanneer het cluster de opdracht accepteert en de registratie van het toepassingstype asynchroon wordt voortgezet. Daarom hoeft u in dit geval geen hogere time-out op te geven. Met de opdracht Get-ServiceFabricApplicationType worden alle geregistreerde versies van het toepassingstype en de registratiestatus weergegeven. U kunt deze opdracht gebruiken om te bepalen wanneer de registratie is voltooid.
Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Volgende stappen

Toepassingspakket maken

Service Fabric-toepassingsupgrade

Inleiding tot Service Fabric-status

Problemen met een Service Fabric-service vaststellen en oplossen

Een toepassing modelleren in Service Fabric