Udostępnij za pośrednictwem


Konteneryzowanie usług Reliable Services i Reliable Actors usługi Service Fabric w systemie Windows

Usługa Service Fabric obsługuje konteneryzowanie mikrousług usługi Service Fabric (usług Reliable Services i reliable actor based services). Aby uzyskać więcej informacji, zobacz Kontenery usługi Service Fabric.

Ten dokument zawiera wskazówki dotyczące uruchamiania usługi wewnątrz kontenera systemu Windows.

Uwaga

Obecnie ta funkcja działa tylko dla systemu Windows. Aby uruchomić kontenery, klaster musi działać w systemie Windows Server 2016 z kontenerami.

Procedura konteneryzowania aplikacji usługi Service Fabric

  1. Otwórz aplikację usługi Service Fabric w programie Visual Studio.

  2. Dodaj SFBinaryLoader.cs klasy do projektu. Kod w tej klasie jest pomocnikiem do poprawnego załadowania plików binarnych środowiska uruchomieniowego usługi Service Fabric wewnątrz aplikacji podczas uruchamiania wewnątrz kontenera.

  3. Dla każdego pakietu kodu, który chcesz konteneryzować, zainicjuj moduł ładujący w punkcie wejścia programu. Dodaj konstruktor statyczny pokazany w poniższym fragmencie kodu do pliku punktu wejścia programu.

    namespace MyApplication
    {
       internal static class Program
       {
           static Program()
           {
               SFBinaryLoader.Initialize();
           }
    
           /// <summary>
           /// This is the entry point of the service host process.
           /// </summary>
           private static void Main()
           {
    
  4. Skompiluj i spakuj projekt. Aby skompilować i utworzyć pakiet, kliknij prawym przyciskiem myszy projekt aplikacji w Eksplorator rozwiązań i wybierz polecenie Pakiet.

  5. Dla każdego pakietu kodu, który należy konteneryzować, uruchom skrypt programu PowerShell CreateDockerPackage.ps1. Użycie jest następujące:

    Pełna platforma .NET

      $codePackagePath = 'Path to the code package to containerize.'
      $dockerPackageOutputDirectoryPath = 'Output path for the generated docker folder.'
      $applicationExeName = 'Name of the Code package executable.'
      CreateDockerPackage.ps1 -CodePackageDirectoryPath $codePackagePath -DockerPackageOutputDirectoryPath $dockerPackageOutputDirectoryPath -ApplicationExeName $applicationExeName
    

    .NET Core

      $codePackagePath = 'Path to the code package to containerize.'
      $dockerPackageOutputDirectoryPath = 'Output path for the generated docker folder.'
      $dotnetCoreDllName = 'Name of the Code package dotnet Core Dll.'
      CreateDockerPackage.ps1 -CodePackageDirectoryPath $codePackagePath -DockerPackageOutputDirectoryPath $dockerPackageOutputDirectoryPath -DotnetCoreDllName $dotnetCoreDllName
    

    Skrypt tworzy folder z artefaktami platformy Docker w $dockerPackageOutputDirectoryPath. Zmodyfikuj wygenerowany plik Dockerfile na expose dowolnych portach, uruchom skrypty konfiguracji itd. w zależności od potrzeb.

  6. Następnie należy skompilować i wypchnąć pakiet kontenera platformy Docker do repozytorium.

  7. Zmodyfikuj ApplicationManifest.xml i ServiceManifest.xml, aby dodać obraz kontenera, informacje o repozytorium, uwierzytelnianie rejestru i mapowanie port-host. Aby zmodyfikować manifesty, zobacz Tworzenie aplikacji kontenera usługi Azure Service Fabric. Definicja pakietu kodu w manifeście usługi musi zostać zastąpiona odpowiednim obrazem kontenera. Pamiętaj, aby zmienić element EntryPoint na typ ContainerHost.

    <!-- Code package is your service executable. -->
    <CodePackage Name="Code" Version="1.0.0">
    <EntryPoint>
     <!-- Follow this link for more information about deploying Windows containers to Service Fabric: https://aka.ms/sfguestcontainers -->
     <ContainerHost>
       <ImageName>myregistry.azurecr.io/samples/helloworldapp</ImageName>
     </ContainerHost>
    </EntryPoint>
    <!-- Pass environment variables to your container: -->
    </CodePackage>
    
  8. Dodaj mapowanie port-host dla replikatora i punktu końcowego usługi. Ponieważ oba te porty są przypisywane w czasie wykonywania przez usługę Service Fabric, port ContainerPort jest ustawiony na zero, aby użyć przypisanego portu do mapowania.

    <Policies>
    <ContainerHostPolicies CodePackageRef="Code">
     <PortBinding ContainerPort="0" EndpointRef="ServiceEndpoint"/>
     <PortBinding ContainerPort="0" EndpointRef="ReplicatorEndpoint"/>
    </ContainerHostPolicies>
    </Policies>
    
  9. Aby skonfigurować tryb izolacji kontenera, zobacz Konfigurowanie trybu izolacji. System Windows obsługuje dwa tryby izolacji dla kontenerów: tryb procesu oraz tryb funkcji Hyper-V. Poniższe fragmenty kodu pokazują, jak tryb izolacji jest określony w pliku manifestu aplikacji.

    <Policies>
    <ContainerHostPolicies CodePackageRef="Code" Isolation="process">
    ...
    </ContainerHostPolicies>
    </Policies>
    
    <Policies>
    <ContainerHostPolicies CodePackageRef="Code" Isolation="hyperv">
    ...
    </ContainerHostPolicies>
    </Policies>
    

Uwaga

Klaster usługi Service Fabric jest jedną dzierżawą zgodnie z projektem, a hostowane aplikacje są uznawane za zaufane. Jeśli rozważasz hostowanie niezaufanych aplikacji kontenerów, rozważ wdrożenie ich jako kontenerów gościa i zobacz Hosting niezaufanych aplikacji w klastrze usługi Service Fabric.

  1. Aby przetestować tę aplikację, należy wdrożyć ją w klastrze z uruchomioną wersją 5.7 lub nowszą. W przypadku wersji 6.1 lub starszej środowiska uruchomieniowego należy edytować i aktualizować ustawienia klastra, aby włączyć tę funkcję w wersji zapoznawczej. Wykonaj kroki opisane w tym artykule , aby dodać wyświetlone ustawienie poniżej.

      {
        "name": "Hosting",
        "parameters": [
          {
            "name": "FabricContainerAppsEnabled",
            "value": "true"
          }
        ]
      }
    
  2. Następnie wdróż edytowany pakiet aplikacji w tym klastrze.

Teraz powinna istnieć konteneryzowana aplikacja usługi Service Fabric z uruchomionym klastrem.

Następne kroki