Wdrażanie i usuwanie aplikacji przy użyciu programu PowerShell


Po spakowanym typie aplikacji można przystąpić do wdrażania w klastrze usługi Azure Service Fabric. Wdrożenie obejmuje następujące trzy kroki:

  1. Przekaż pakiet aplikacji do magazynu obrazów.
  2. Zarejestruj typ aplikacji przy użyciu ścieżki względnej magazynu obrazów.
  3. Utwórz wystąpienie aplikacji.

Gdy wdrożona aplikacja nie jest już wymagana, możesz usunąć wystąpienie aplikacji i jej typ aplikacji. Aby całkowicie usunąć aplikację z klastra, należy wykonać następujące czynności:

  1. Usuń (lub usuń) uruchomione wystąpienie aplikacji.
  2. Wyrejestruj typ aplikacji, jeśli nie jest już potrzebny.
  3. Usuń pakiet aplikacji z magazynu obrazów.

Jeśli używasz programu Visual Studio do wdrażania i debugowania aplikacji w lokalnym klastrze deweloperów, wszystkie powyższe kroki są obsługiwane automatycznie za pomocą skryptu programu PowerShell. Ten skrypt znajduje się w folderze Scripts projektu aplikacji. Ten artykuł zawiera podstawowe informacje na temat tego, co robi ten skrypt, dzięki czemu można wykonywać te same operacje poza programem Visual Studio.

Innym sposobem wdrożenia aplikacji jest użycie zewnętrznej aprowizacji. Pakiet aplikacji można spakować jako sfpkg i przekazać do magazynu zewnętrznego. W takim przypadku przekazywanie do magazynu obrazów nie jest wymagane. Wdrożenie wymaga następujących kroków:

  1. Przekaż element sfpkg do magazynu zewnętrznego. Magazyn zewnętrzny może być dowolnym magazynem, który uwidacznia punkt końcowy REST http lub https.
  2. Zarejestruj typ aplikacji przy użyciu zewnętrznego identyfikatora URI pobierania i informacji o typie aplikacji.
  3. Utwórz wystąpienie aplikacji.

Aby wyczyścić, usuń wystąpienia aplikacji i wyrejestruj typ aplikacji. Ponieważ pakiet nie został skopiowany do magazynu obrazów, nie ma tymczasowej lokalizacji do oczyszczenia. Aprowizowanie z magazynu zewnętrznego jest dostępne od wersji 6.1 usługi Service Fabric.

Uwaga

Program Visual Studio obecnie nie obsługuje aprowizacji zewnętrznej.

Łączenie z klastrem

Przed uruchomieniem jakichkolwiek poleceń programu PowerShell w tym artykule zawsze zacznij od używania Połączenie-ServiceFabricCluster w celu nawiązania połączenia z klastrem usługi Service Fabric. Aby nawiązać połączenie z lokalnym klastrem deweloperów, uruchom następujące polecenie:

Connect-ServiceFabricCluster

Przykłady nawiązywania połączenia z klastrem zdalnym lub klastrem zabezpieczonym przy użyciu certyfikatów Microsoft Entra ID, X509 lub Windows Active Directory można znaleźć Połączenie z bezpiecznym klastrem.

Przekazywanie pakietu aplikacji

Przekazanie pakietu aplikacji umieszcza go w lokalizacji dostępnej dla wewnętrznych składników usługi Service Fabric. Jeśli chcesz zweryfikować pakiet aplikacji lokalnie, użyj polecenia cmdlet Test-ServiceFabricApplicationPackage .

Polecenie Copy-ServiceFabricApplicationPackage przekazuje pakiet aplikacji do magazynu obrazów klastra.

Załóżmy, że tworzysz i pakujesz aplikację o nazwie MyApplication w programie Visual Studio 2015. Domyślnie nazwa typu aplikacji wyświetlana w pliku ApplicationManifest.xml to "MyApplicationType". Pakiet aplikacji zawierający niezbędny manifest aplikacji, manifesty usługi i pakiety code/config/data znajduje się w folderze C:\Users<username>\Documents\Visual Studio 2015\Projects\MyApplication\MyApplication\pkg\Debug.

Następujące polecenie wyświetla zawartość pakietu aplikacji:

$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

Jeśli pakiet aplikacji jest duży i/lub zawiera wiele plików, możesz go skompresować. Kompresja zmniejsza rozmiar i liczbę plików. Powoduje to szybsze rejestrowanie i wyrejestrowywanie typu aplikacji. Czas przekazywania może być obecnie wolniejszy, zwłaszcza jeśli uwzględnisz czas kompresji pakietu.

Aby skompresować pakiet, użyj tego samego polecenia Copy-ServiceFabricApplicationPackage . Kompresję można wykonać oddzielnie od przekazywania, używając SkipCopy flagi lub razem z operacją przekazywania. Stosowanie kompresji w skompresowanym pakiecie nie działa. Aby usunąć skompresowany pakiet, użyj tego samego polecenia Copy-ServiceFabricApplicationPackage z przełącznikiem UncompressPackage .

Następujące polecenie cmdlet kompresuje pakiet bez kopiowania go do magazynu obrazów. Pakiet zawiera teraz spakowane pliki dla Code pakietów i Config . Aplikacja i manifesty usługi nie są spakowane, ponieważ są one potrzebne do wielu operacji wewnętrznych (takich jak udostępnianie pakietów, wyodrębnianie nazwy typu aplikacji i wyodrębnianie wersji w celu przeprowadzenia pewnych weryfikacji). Spakowanie manifestów spowoduje, że te operacje będą nieefektywne.

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

W przypadku dużych pakietów aplikacji kompresja zajmuje trochę czasu. Aby uzyskać najlepsze wyniki, użyj szybkiego dysku SSD. Czas kompresji i rozmiar skompresowanego pakietu różnią się również w zależności od zawartości pakietu. Na przykład poniżej przedstawiono statystyki kompresji dla niektórych pakietów, które pokazują początkowy i skompresowany rozmiar pakietu z czasem kompresji.

Rozmiar początkowy (MB) Liczba plików Czas kompresji Rozmiar skompresowanego pakietu (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

Po skompresowaniu pakietu można go przekazać do jednego lub wielu klastrów usługi Service Fabric w razie potrzeby. Mechanizm wdrażania jest taki sam w przypadku skompresowanych i nieskompresowanych pakietów. Skompresowane pakiety są przechowywane jako takie w magazynie obrazów klastra. Pakiety są nieskompresowane w węźle przed uruchomieniem aplikacji.

Poniższy przykład przekazuje pakiet do magazynu obrazów do folderu o nazwie "MyApplicationV1":

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

Jeśli nie określisz parametru -ApplicationPackagePathInImageStore , pakiet aplikacji zostanie skopiowany do folderu "Debugowanie" w magazynie obrazów.

Uwaga

Pakiet Copy-ServiceFabricApplicationPackage automatycznie wykryje odpowiedni magazyn obrazów parametry połączenia, jeśli sesja programu PowerShell jest połączona z klastrem usługi Service Fabric. W przypadku wersji usługi Service Fabric starszych niż 5.6 należy jawnie podać argument -ImageStore Połączenie ionString.

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

Polecenie cmdlet Get-ImageStore Połączenie ionStringFromClusterManifest, które jest częścią modułu PowerShell zestawu SDK usługi Service Fabric, służy do pobierania magazynu obrazów parametry połączenia. Aby zaimportować moduł ZESTAWU SDK, uruchom polecenie:

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

Aby uzyskać dodatkowe informacje na temat magazynu obrazów i magazynu obrazów parametry połączenia, zobacz Omówienie magazynu obrazów parametry połączenia.

Czas przekazywania pakietu różni się w zależności od wielu czynników. Niektóre z tych czynników to liczba plików w pakiecie, rozmiar pakietu i rozmiary plików. Szybkość sieci między maszyną źródłową a klastrem usługi Service Fabric również wpływa na czas przekazywania. Domyślny limit czasu dla elementu Copy-ServiceFabricApplicationPackage wynosi 30 minut. W zależności od opisanych czynników może być konieczne zwiększenie limitu czasu. Jeśli kompresujesz pakiet w wywołaniu kopiowania, należy również wziąć pod uwagę czas kompresji.

Rejestrowanie pakietu aplikacji

Typ aplikacji i wersja zadeklarowana w manifeście aplikacji stają się dostępne do użycia podczas rejestrowania pakietu aplikacji. System odczytuje pakiet przekazany w poprzednim kroku, weryfikuje pakiet, przetwarza zawartość pakietu i kopiuje przetworzony pakiet do wewnętrznej lokalizacji systemu.

Uruchom polecenie cmdlet Register-ServiceFabricApplicationType, aby zarejestrować typ aplikacji w klastrze i udostępnić go do wdrożenia:

Rejestrowanie pakietu aplikacji skopiowanego do magazynu obrazów

Gdy pakiet został wcześniej skopiowany do magazynu obrazów, operacja rejestrowania określa ścieżkę względną w magazynie obrazów.

Register-ServiceFabricApplicationType -ApplicationPathInImageStore MyApplicationV1
Register application type succeeded

"MyApplicationV1" to folder w magazynie obrazów, w którym znajduje się pakiet aplikacji. Typ aplikacji o nazwie "MyApplicationType" i wersji "1.0.0" (oba znajdują się w manifeście aplikacji) są teraz zarejestrowane w klastrze.

Rejestrowanie pakietu aplikacji skopiowanego do magazynu zewnętrznego

Począwszy od usługi Service Fabric w wersji 6.1, aprowizowanie obsługuje pobieranie pakietu ze sklepu zewnętrznego. Identyfikator URI pobierania reprezentuje ścieżkę do pakietu aplikacji, z którego można pobrać sfpkg pakiet aplikacji przy użyciu protokołów HTTP lub HTTPS. Pakiet musi zostać wcześniej przekazany do tej lokalizacji zewnętrznej. Identyfikator URI musi zezwalać na dostęp do odczytu, aby usługa Service Fabric mogła pobrać plik. Plik sfpkg musi mieć rozszerzenie ".sfpkg". Operacja aprowizacji powinna zawierać informacje o typie aplikacji, jak znaleziono w manifeście aplikacji.

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

Polecenie Register-ServiceFabricApplicationType jest zwracane dopiero po pomyślnym zarejestrowaniu pakietu aplikacji przez system. Czas rejestracji zależy od rozmiaru i zawartości pakietu aplikacji. W razie potrzeby parametr -TimeoutSec może służyć do podawania dłuższego limitu czasu (domyślny limit czasu to 60 sekund).

Jeśli masz duży pakiet aplikacji lub jeśli występują przekroczenia limitu czasu, użyj parametru -Async . Polecenie jest zwracane, gdy klaster akceptuje polecenie register. Operacja rejestrowania jest kontynuowana zgodnie z potrzebami. Polecenie Get-ServiceFabricApplicationType zawiera listę wersji typów aplikacji i ich stanu rejestracji. Tego polecenia można użyć do określenia, kiedy rejestracja jest wykonywana.

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

Usuwanie pakietu aplikacji z magazynu obrazów

Jeśli pakiet został skopiowany do magazynu obrazów, należy go usunąć z lokalizacji tymczasowej po pomyślnym zarejestrowaniu aplikacji. Usuwanie pakietów aplikacji z magazynu obrazów zwalnia zasoby systemowe. Przechowywanie nieużywanych pakietów aplikacji zużywa magazyn dysku i prowadzi do problemów z wydajnością aplikacji.

Remove-ServiceFabricApplicationPackage -ApplicationPackagePathInImageStore MyApplicationV1

Tworzenie aplikacji

Możesz utworzyć wystąpienie aplikacji z dowolnej wersji typu aplikacji, która została pomyślnie zarejestrowana przy użyciu polecenia cmdlet New-ServiceFabricApplication . Nazwa każdej aplikacji musi zaczynać się od schematu "fabric:" i musi być unikatowa dla każdego wystąpienia aplikacji. Tworzone są również wszystkie usługi domyślne zdefiniowane w manifeście aplikacji docelowej.

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

Dla dowolnej wersji zarejestrowanego typu aplikacji można utworzyć wiele wystąpień aplikacji. Każde wystąpienie aplikacji działa w izolacji z własnym katalogiem roboczym i procesem.

Aby sprawdzić, które nazwane aplikacje i usługi są uruchomione w klastrze, uruchom polecenia cmdlet Get-ServiceFabricApplication i 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

Usuwanie aplikacji

Gdy wystąpienie aplikacji nie jest już potrzebne, można je trwale usunąć, używając polecenia cmdlet Remove-ServiceFabricApplication . Remove-ServiceFabricApplication automatycznie usuwa wszystkie usługi należące do aplikacji, a także trwale usuwa cały stan usługi.

Ostrzeżenie

Nie można cofnąć tej operacji, a nie można odzyskać stanu aplikacji.

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

Wyrejestrowywanie typu aplikacji

Jeśli określona wersja typu aplikacji nie jest już potrzebna, należy wyrejestrować typ aplikacji przy użyciu polecenia cmdlet Unregister-ServiceFabricApplicationType . Wyrejestrowywanie nieużywanych typów aplikacji zwalnia miejsce do magazynowania używane przez magazyn obrazów przez usunięcie plików typu aplikacji. Wyrejestrowywanie typu aplikacji nie powoduje usunięcia pakietu aplikacji skopiowanego do lokalizacji tymczasowej magazynu obrazów, jeśli użyto kopii do magazynu obrazów. Typ aplikacji może być wyrejestrowany tak długo, jak żadne aplikacje nie są tworzone dla niego i nie odwołują się do niej oczekujące uaktualnienia aplikacji.

Uruchom polecenie Get-ServiceFabricApplicationType , aby wyświetlić typy aplikacji aktualnie zarejestrowane w klastrze:

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

Uruchom polecenie Unregister-ServiceFabricApplicationType , aby wyrejestrować określony typ aplikacji:

Unregister-ServiceFabricApplicationType MyApplicationType 1.0.0

Rozwiązywanie problemów

Copy-ServiceFabricApplicationPackage prosi o magazyn obrazów Połączenie ionString

Środowisko zestawu SDK usługi Service Fabric powinno już mieć skonfigurowane poprawne ustawienia domyślne. Jednak w razie potrzeby parametr ImageStore Połączenie ionString dla wszystkich poleceń powinien odpowiadać wartości używanej przez klaster usługi Service Fabric. Plik ImageStore Połączenie ionString można znaleźć w manifeście klastra pobranym przy użyciu poleceń Get-ServiceFabricClusterManifest i Get-ImageStore Połączenie ionStringFromClusterManifest:

Get-ImageStoreConnectionStringFromClusterManifest(Get-ServiceFabricClusterManifest)

Polecenie cmdlet Get-ImageStore Połączenie ionStringFromClusterManifest, które jest częścią modułu PowerShell zestawu SDK usługi Service Fabric, służy do pobierania magazynu obrazów parametry połączenia. Aby zaimportować moduł ZESTAWU SDK, uruchom polecenie:

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

Plik ImageStore Połączenie ionString znajduje się w manifeście klastra:

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

    [...]

Aby uzyskać dodatkowe informacje na temat magazynu obrazów i magazynu obrazów parametry połączenia, zobacz Omówienie magazynu obrazów parametry połączenia.

Wdrażanie dużego pakietu aplikacji

Problem: Limit czasu kopiowania pliku ServiceFabricApplicationPackage dla dużego pakietu aplikacji (kolejność GB). Spróbuj:

  • Określ większy limit czasu dla polecenia Copy-ServiceFabricApplicationPackage z parametrem TimeoutSec . Domyślnie limit czasu wynosi 30 minut.
  • Sprawdź połączenie sieciowe między maszyną źródłową a klastrem. Jeśli połączenie działa wolno, rozważ użycie maszyny z lepszym połączeniem sieciowym. Jeśli maszyna kliencka znajduje się w innym regionie niż klaster, rozważ użycie maszyny klienckiej w bliżej lub tym samym regionie co klaster.
  • Sprawdź, czy występuje ograniczenie zewnętrzne. Na przykład gdy magazyn obrazów jest skonfigurowany do korzystania z usługi Azure Storage, przekazywanie może być ograniczone.

Problem: Przekazywanie pakietu zostało ukończone pomyślnie, ale upłynął limit czasu Register-ServiceFabricApplicationType . Spróbuj:

  • Kompresuj pakiet przed skopiowaniem do magazynu obrazów. Kompresja zmniejsza rozmiar i liczbę plików, co z kolei zmniejsza ilość ruchu i pracy wymaganej przez usługę Service Fabric. Operacja przekazywania może być wolniejsza (zwłaszcza jeśli uwzględnisz czas kompresji), ale rejestrowanie i anulowanie rejestracji typu aplikacji jest szybsze.
  • Określ większy limit czasu dla parametru Register-ServiceFabricApplicationTypeTimeoutSec.
  • Określ Async przełącznik register-ServiceFabricApplicationType. Polecenie jest zwracane, gdy klaster akceptuje polecenie, a rejestracja typu aplikacji jest kontynuowana asynchronicznie. Z tego powodu nie ma potrzeby określania wyższego limitu czasu w tym przypadku. Polecenie Get-ServiceFabricApplicationType wyświetla listę wszystkich pomyślnie zarejestrowanych wersji typów aplikacji i ich stanu rejestracji. Tego polecenia można użyć do określenia, kiedy rejestracja jest wykonywana.
Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Wdrażanie pakietu aplikacji z wieloma plikami

Problem: Limit czasu register-ServiceFabricApplicationType dla pakietu aplikacji z wieloma plikami (kolejność tysięcy). Spróbuj:

  • Kompresuj pakiet przed skopiowaniem do magazynu obrazów. Kompresja zmniejsza liczbę plików.
  • Określ większy limit czasu dla parametru Register-ServiceFabricApplicationTypeTimeoutSec.
  • Określ Async przełącznik register-ServiceFabricApplicationType. Polecenie jest zwracane, gdy klaster akceptuje polecenie, a rejestracja typu aplikacji jest kontynuowana asynchronicznie. Z tego powodu nie ma potrzeby określania wyższego limitu czasu w tym przypadku. Polecenie Get-ServiceFabricApplicationType wyświetla listę wszystkich pomyślnie zarejestrowanych wersji typów aplikacji i ich stanu rejestracji. Tego polecenia można użyć do określenia, kiedy rejestracja jest wykonywana.
Get-ServiceFabricApplicationType
ApplicationTypeName    : MyApplicationType
ApplicationTypeVersion : 1.0.0
Status                 : Available
DefaultParameters      : { "Stateless1_InstanceCount" = "-1" }

Następne kroki

Tworzenie pakietu aplikacji

Uaktualnianie aplikacji usługi Service Fabric

Wprowadzenie do kondycji usługi Service Fabric

Diagnozowanie i rozwiązywanie problemów z usługą Service Fabric

Modelowanie aplikacji w usłudze Service Fabric