Distribuera och ta bort program med PowerShell


När en programtyp har paketerats är den redo för distribution till ett Azure Service Fabric-kluster. Distributionen omfattar följande tre steg:

  1. Ladda upp programpaketet till avbildningsarkivet.
  2. Registrera programtypen med den relativa sökvägen för bildarkivet.
  3. Skapa programinstansen.

När det distribuerade programmet inte längre krävs kan du ta bort programinstansen och dess programtyp. Om du vill ta bort ett program helt från klustret ingår följande steg:

  1. Ta bort (eller ta bort) programinstansen som körs.
  2. Avregistrera programtypen om du inte längre behöver den.
  3. Ta bort programpaketet från avbildningsarkivet.

Om du använder Visual Studio för att distribuera och felsöka program i ditt lokala utvecklingskluster hanteras alla föregående steg automatiskt via ett PowerShell-skript. Det här skriptet finns i mappen Skript i programprojektet. Den här artikeln innehåller bakgrund om vad skriptet gör så att du kan utföra samma åtgärder utanför Visual Studio.

Ett annat sätt att distribuera ett program är att använda extern etablering. Programpaketet kan paketeras som sfpkg och laddas upp till ett externt arkiv. I det här fallet behövs inte uppladdning till avbildningsarkivet. Distributionen behöver följande steg:

  1. sfpkg Ladda upp till ett externt arkiv. Det externa arkivet kan vara vilket arkiv som helst som exponerar en REST http- eller https-slutpunkt.
  2. Registrera programtypen med hjälp av den externa nedladdnings-URI:n och programtypsinformationen.
  3. Skapa programinstansen.

För rensning tar du bort programinstanserna och avregistrerar programtypen. Eftersom paketet inte kopierades till avbildningsarkivet finns det ingen tillfällig plats att rensa. Etablering från externt arkiv är tillgängligt från och med Service Fabric version 6.1.

Kommentar

Visual Studio stöder för närvarande inte extern etablering.

Anslut till klustret

Innan du kör powershell-kommandon i den här artikeln bör du alltid börja med att använda Anslut-ServiceFabricCluster för att ansluta till Service Fabric-klustret. Kör följande för att ansluta till det lokala utvecklingsklustret:

Connect-ServiceFabricCluster

Exempel på anslutning till ett fjärrkluster eller kluster som skyddas med Microsoft Entra-ID, X509-certifikat eller Windows Active Directory finns i Anslut till ett säkert kluster.

Ladda upp programpaketet

När du laddar upp programpaketet placeras det på en plats som är tillgänglig för interna Service Fabric-komponenter. Om du vill verifiera programpaketet lokalt använder du cmdleten Test-ServiceFabricApplicationPackage .

Kommandot Copy-ServiceFabricApplicationPackage laddar upp programpaketet till klusteravbildningsarkivet.

Anta att du skapar och paketar ett program med namnet MyApplication i Visual Studio 2015. Som standard är namnet på programtypen i ApplicationManifest.xml "MyApplicationType". Programpaketet, som innehåller det nödvändiga programmanifestet, tjänstmanifesten och kod-/konfigurations-/datapaketen, finns i C:\Users<username>\Documents\Visual Studio 2015\Projects\MyApplication\MyApplication\pkg\Debug.

Följande kommando visar innehållet i programpaketet:

$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

Om programpaketet är stort och/eller har många filer kan du komprimera det. Komprimering minskar storleken och antalet filer. Detta resulterar i snabbare registrering och avregistrering av programtypen. Uppladdningstiden kan vara långsammare för närvarande, särskilt om du inkluderar tiden för att komprimera paketet.

Om du vill komprimera ett paket använder du samma Copy-ServiceFabricApplicationPackage-kommando . Komprimering kan göras separat från uppladdning, med hjälp SkipCopy av flaggan eller tillsammans med uppladdningsåtgärden. Det går inte att använda komprimering på ett komprimerat paket. Om du vill avkomprimera ett komprimerat paket använder du samma Copy-ServiceFabricApplicationPackage-kommando med växeln UncompressPackage .

Följande cmdlet komprimerar paketet utan att kopiera det till avbildningsarkivet. Paketet innehåller nu zippade filer för paketen Code och Config . Programmet och tjänstmanifesten är inte zippade eftersom de behövs för många interna åtgärder (till exempel paketdelning, programtypsnamn och versionsextrahering för vissa valideringar). Om du zippar manifesten blir de här åtgärderna ineffektiva.

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

För stora programpaket tar komprimering tid. Använd en snabb SSD-enhet för bästa resultat. Komprimeringstiderna och storleken på det komprimerade paketet skiljer sig också beroende på paketinnehållet. Här är till exempel komprimeringsstatistik för vissa paket, som visar den initiala och komprimerade paketstorleken med komprimeringstiden.

Ursprunglig storlek (MB) Antal filer Komprimeringstid Komprimerad paketstorlek (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

När ett paket har komprimerats kan det laddas upp till ett eller flera Service Fabric-kluster efter behov. Distributionsmekanismen är densamma för komprimerade och okomprimerade paket. Komprimerade paket lagras som sådana i klusteravbildningsarkivet. Paketen är okomprimerade på noden innan programmet körs.

I följande exempel laddas paketet upp till avbildningsarkivet till en mapp med namnet "MyApplicationV1":

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

Om du inte anger parametern -ApplicationPackagePathInImageStore kopieras programpaketet till mappen "Felsöka" i avbildningsarkivet.

Kommentar

Copy-ServiceFabricApplicationPackage identifierar automatiskt lämpligt avbildningsarkiv anslutningssträng om PowerShell-sessionen är ansluten till ett Service Fabric-kluster. För Service Fabric-versioner som är äldre än 5.6 måste argumentet -ImageStore Anslut ionString uttryckligen anges.

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

Cmdleten Get-ImageStore Anslut ionStringFromClusterManifest, som är en del av Service Fabric SDK PowerShell-modulen, används för att hämta avbildningsarkivet anslutningssträng. Om du vill importera SDK-modulen kör du:

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

Mer information om avbildningsarkivet och avbildningsarkivet anslutningssträng finns i Förstå anslutningssträng för avbildningsarkivet.

Den tid det tar att ladda upp ett paket varierar beroende på flera faktorer. Några av dessa faktorer är antalet filer i paketet, paketstorleken och filstorlekarna. Nätverkshastigheten mellan källdatorn och Service Fabric-klustret påverkar också uppladdningstiden. Standardtimeouten för Copy-ServiceFabricApplicationPackage är 30 minuter. Beroende på de faktorer som beskrivs kan du behöva öka tidsgränsen. Om du komprimerar paketet i kopieringsanropet måste du även överväga komprimeringstiden.

Registrera programpaketet

Programtypen och versionen som deklareras i programmanifestet blir tillgängliga för användning när programpaketet registreras. Systemet läser paketet som laddades upp i föregående steg, verifierar paketet, bearbetar paketinnehållet och kopierar det bearbetade paketet till en intern systemplats.

Kör cmdleten Register-ServiceFabricApplicationType för att registrera programtypen i klustret och göra den tillgänglig för distribution:

Registrera programpaketet som kopierats till avbildningsarkivet

När ett paket tidigare kopierades till avbildningsarkivet anger registeråtgärden den relativa sökvägen i avbildningsarkivet.

Register-ServiceFabricApplicationType -ApplicationPathInImageStore MyApplicationV1
Register application type succeeded

"MyApplicationV1" är mappen i avbildningsarkivet där programpaketet finns. Programtypen med namnet "MyApplicationType" och version "1.0.0" (båda finns i programmanifestet) är nu registrerad i klustret.

Registrera programpaketet som kopierats till ett externt arkiv

Från och med Service Fabric version 6.1 stöder etableringen nedladdning av paketet från ett externt arkiv. Nedladdnings-URI:n representerar sökvägen till sfpkg programpaketet där programpaketet kan laddas ned med hjälp av HTTP- eller HTTPS-protokoll. Paketet måste ha laddats upp tidigare till den här externa platsen. URI:n måste tillåta LÄS-åtkomst så att Service Fabric kan ladda ned filen. Filen sfpkg måste ha tillägget ".sfpkg". Etableringsåtgärden bör innehålla information om programtyp, som finns i programmanifestet.

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

Kommandot Register-ServiceFabricApplicationType returnerar endast när systemet har registrerat programpaketet. Hur lång tid registreringen tar beror på programpaketets storlek och innehåll. Om det behövs kan parametern -TimeoutSec användas för att ange en längre tidsgräns (standardtidsgränsen är 60 sekunder).

Om du har ett stort programpaket eller om du har överskridna tidsgränser använder du parametern -Async . Kommandot returnerar när klustret accepterar registerkommandot. Registeråtgärden fortsätter efter behov. Kommandot Get-ServiceFabricApplicationType listar programtypsversionerna och deras registreringsstatus. Du kan använda det här kommandot för att avgöra när registreringen är klar.

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

Ta bort ett programpaket från avbildningsarkivet

Om ett paket kopierades till avbildningsarkivet bör du ta bort det från den tillfälliga platsen när programmet har registrerats. Om du tar bort programpaket från avbildningsarkivet frigörs systemresurser. Att behålla oanvända programpaket förbrukar disklagring och leder till problem med programprestanda.

Remove-ServiceFabricApplicationPackage -ApplicationPackagePathInImageStore MyApplicationV1

Skapa programmet

Du kan instansiera ett program från alla programtyper som har registrerats med hjälp av cmdleten New-ServiceFabricApplication . Namnet på varje program måste börja med schemat "fabric:" och måste vara unikt för varje programinstans. Alla standardtjänster som definieras i programmanifestet för målprogramtypen skapas också.

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

Flera programinstanser kan skapas för en viss version av en registrerad programtyp. Varje programinstans körs isolerat med en egen arbetskatalog och process.

Om du vill se vilka namngivna appar och tjänster som körs i klustret kör du cmdletarna Get-ServiceFabricApplication och 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

Ta bort ett program

När en programinstans inte längre behövs kan du permanent ta bort den med hjälp av cmdleten Remove-ServiceFabricApplication . Remove-ServiceFabricApplication tar automatiskt bort alla tjänster som tillhör programmet, vilket permanent tar bort alla tjänsttillstånd.

Varning

Den här åtgärden kan inte ångras och programtillståndet kan inte återställas.

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

Avregistrera en programtyp

När en viss version av en programtyp inte längre behövs bör du avregistrera programtypen med cmdleten Unregister-ServiceFabricApplicationType . Om du avregistrerar oanvända programtyper frigörs lagringsutrymme som används av avbildningslagret genom att filer av programtyp tas bort. Avregistrera en programtyp tar inte bort programpaketet som kopierades till den temporära platsen för avbildningsarkivet, om kopian till avbildningsarkivet användes. En programtyp kan avregistreras så länge inga program instansieras mot den och inga väntande programuppgraderingar refererar till den.

Kör Get-ServiceFabricApplicationType för att se de programtyper som för närvarande är registrerade i klustret:

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

Kör Unregister-ServiceFabricApplicationType för att avregistrera en viss programtyp:

Unregister-ServiceFabricApplicationType MyApplicationType 1.0.0

Felsökning

Copy-ServiceFabricApplicationPackage ber om en ImageStore Anslut ionString

Service Fabric SDK-miljön bör redan ha rätt standardinställningar konfigurerade. Men om det behövs bör ImageStore Anslut ionString för alla kommandon matcha det värde som Service Fabric-klustret använder. Du hittar ImageStore Anslut ionString i klustermanifestet som hämtas med hjälp av kommandona Get-ServiceFabricClusterManifest och Get-ImageStore Anslut ionStringFromClusterManifest:

Get-ImageStoreConnectionStringFromClusterManifest(Get-ServiceFabricClusterManifest)

Cmdleten Get-ImageStore Anslut ionStringFromClusterManifest, som är en del av Service Fabric SDK PowerShell-modulen, används för att hämta avbildningsarkivet anslutningssträng. Om du vill importera SDK-modulen kör du:

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

ImageStore Anslut ionString finns i klustermanifestet:

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

    [...]

Mer information om avbildningsarkivet och avbildningsarkivet anslutningssträng finns i Förstå anslutningssträng för avbildningsarkivet.

Distribuera ett stort programpaket

Problem: Copy-ServiceFabricApplicationPackage överskrider tidsgränsen för ett stort programpaket (gb i ordningen). Prova:

  • Ange en större timeout för kommandot Copy-ServiceFabricApplicationPackage med TimeoutSec parametern . Som standard är tidsgränsen 30 minuter.
  • Kontrollera nätverksanslutningen mellan källdatorn och klustret. Om anslutningen är långsam kan du överväga att använda en dator med en bättre nätverksanslutning. Om klientdatorn finns i en annan region än klustret kan du överväga att använda en klientdator i en närmare eller samma region som klustret.
  • Kontrollera om du stöter på extern begränsning. När avbildningsarkivet till exempel har konfigurerats för att använda Azure Storage kan uppladdningen begränsas.

Problem: Uppladdningspaketet har slutförts, men Register-ServiceFabricApplicationType överskrider tidsgränsen. Försök:

  • Komprimera paketet innan du kopierar till avbildningsarkivet. Komprimering minskar storleken och antalet filer, vilket i sin tur minskar mängden trafik och arbete som Service Fabric måste utföra. Uppladdningsåtgärden kan vara långsammare (särskilt om du inkluderar komprimeringstiden), men det går snabbare att registrera och avregistrera programtypen.
  • Ange en större timeout för Register-ServiceFabricApplicationType med TimeoutSec parametern .
  • Ange Async växel för Register-ServiceFabricApplicationType. Kommandot returnerar när klustret accepterar kommandot och registreringen av programtypen fortsätter asynkront. Därför behöver du inte ange en högre tidsgräns i det här fallet. Kommandot Get-ServiceFabricApplicationType visar alla registrerade programtypsversioner och deras registreringsstatus. Du kan använda det här kommandot för att avgöra när registreringen är klar.
Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Distribuera programpaket med många filer

Problem: Register-ServiceFabricApplicationType överskrider tidsgränsen för ett programpaket med många filer (i storleksordningen tusentals). Prova:

  • Komprimera paketet innan du kopierar till avbildningsarkivet. Komprimering minskar antalet filer.
  • Ange en större timeout för Register-ServiceFabricApplicationType med TimeoutSec parametern .
  • Ange Async växel för Register-ServiceFabricApplicationType. Kommandot returnerar när klustret accepterar kommandot och registreringen av programtypen fortsätter asynkront. Därför behöver du inte ange en högre tidsgräns i det här fallet. Kommandot Get-ServiceFabricApplicationType visar alla registrerade programtypsversioner och deras registreringsstatus. Du kan använda det här kommandot för att avgöra när registreringen är klar.
Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Nästa steg

Paketera ett program

Uppgradering av Service Fabric-program

Introduktion till Service Fabric-hälsa

Diagnostisera och felsöka en Service Fabric-tjänst

Modellera ett program i Service Fabric