Kontejnerizace služeb Reliable Actors a Reliable Services služby Service Fabric ve Windows

Service Fabric podporuje kontejnerizaci mikroslužeb Service Fabric (Reliable Services a reliable actor). Další informace najdete v tématu Kontejnery Service Fabric.

Tento dokument obsahuje pokyny k tomu, aby vaše služba běžela v kontejneru Windows.

Poznámka:

V současné době tato funkce funguje jenom pro Windows. Aby bylo možné spouštět kontejnery, musí cluster běžet ve Windows Serveru 2016 s kontejnery.

Postup kontejnerizace aplikace Service Fabric

  1. Otevřete aplikaci Service Fabric v sadě Visual Studio.

  2. Přidejte do projektu SFBinaryLoader.cs třídy. Kód v této třídě je pomocná rutina pro správné načtení binárních souborů modulu runtime Service Fabric uvnitř vaší aplikace při spuštění uvnitř kontejneru.

  3. Pro každý balíček kódu, který chcete kontejnerizovat, inicializujte zavaděč v vstupním bodu programu. Přidejte statický konstruktor zobrazený v následujícím fragmentu kódu do souboru vstupního bodu 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. Sestavte a zabalte projekt. Chcete-li sestavit a vytvořit balíček, klikněte pravým tlačítkem myši na projekt aplikace v Průzkumník řešení a zvolte příkaz Balíček.

  5. Pro každý balíček kódu, který potřebujete kontejnerizovat, spusťte skript PowerShellu CreateDockerPackage.ps1. Použití je následující:

    Úplná .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
    

    Skript vytvoří složku s artefakty Dockeru na $dockerPackageOutputDirectoryPath. Upravte vygenerovaný soubor Dockerfile na expose libovolné porty, spusťte instalační skripty atd. na základě vašich potřeb.

  6. Dále je potřeba sestavit a odeslat balíček kontejneru Dockeru do úložiště.

  7. Upravte ApplicationManifest.xml a ServiceManifest.xml tak, aby se přidala image kontejneru, informace o úložišti, ověřování registru a mapování portů na hostitele. Informace o úpravách manifestů najdete v tématu Vytvoření aplikace kontejneru Azure Service Fabric. Definice balíčku kódu v manifestu služby musí být nahrazena odpovídající imagí kontejneru. Nezapomeňte změnit 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. Přidejte mapování portu na hostitele pro replikátor a koncový bod služby. Vzhledem k tomu, že Service Fabric přiřazuje oba tyto porty za běhu, je ContainerPort nastaven na nulu, aby se k mapování použil přiřazený port.

    <Policies>
    <ContainerHostPolicies CodePackageRef="Code">
     <PortBinding ContainerPort="0" EndpointRef="ServiceEndpoint"/>
     <PortBinding ContainerPort="0" EndpointRef="ReplicatorEndpoint"/>
    </ContainerHostPolicies>
    </Policies>
    
  9. Informace o konfiguraci režimu izolace kontejneru naleznete v tématu Konfigurace režimu izolace. Systém Windows podporuje pro kontejnery dva režimy izolace: procesy a Hyper-V. Následující fragmenty kódu ukazují, jak je režim izolace zadaný v souboru manifestu aplikace.

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

Poznámka:

Cluster Service Fabric je jedním tenantem podle návrhu a hostované aplikace jsou považovány za důvěryhodné. Pokud uvažujete o hostování nedůvěryhodných kontejnerových aplikací, zvažte jejich nasazení jako kontejnery hostů a projděte si téma Hostování nedůvěryhodných aplikací v clusteru Service Fabric.

  1. Pokud chcete tuto aplikaci otestovat, musíte ji nasadit do clusteru, na kterém běží verze 5.7 nebo vyšší. Pro modul runtime verze 6.1 nebo nižší je potřeba upravit a aktualizovat nastavení clusteru, aby se tato funkce Preview povolila. Podle kroků v tomto článku přidejte další nastavení.

      {
        "name": "Hosting",
        "parameters": [
          {
            "name": "FabricContainerAppsEnabled",
            "value": "true"
          }
        ]
      }
    
  2. Dále nasaďte upravený balíček aplikace do tohoto clusteru.

Teď byste měli mít kontejnerizovanou aplikaci Service Fabric, na které běží váš cluster.

Další kroky