Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 na Windows Serveru s nainstalovaným Dockerem. Přečtěte si informace o instalaci modulu Runtime Mirantis.
Postup kontejnerizace aplikace Service Fabric
Otevřete aplikaci Service Fabric ve Visual Studiu.
Přidejte třídu SFBinaryLoader.cs do svého projektu. 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.
Pro každý balíček kódu, který chcete kontejnerizovat, inicializujte zavaděč v vstupním bodu programu. Přidejte do Program.cs novou funkci Main a přejmenujte starý Main na RealMain, například v příkladu níže. To je nutné ke zpoždění načítání všech závislostí Service Fabric, dokud se neinicializuje SFBinaryLoader.
namespace MyApplication { internal static class Program { private static void Main() { SFBinaryLoader.Initialize(); RealMain(); } /// <summary> /// This is the entry point of the service host process. /// </summary> private static void RealMain() {Sestavte a zabalte projekt. Pokud chcete sestavit a vytvořit balíček, klikněte pravým tlačítkem na projekt aplikace v Průzkumníku řešení a zvolte příkaz Balíček .
Pro každý balíček kódu, který potřebujete kontejnerizovat, spusťte skript PowerShelluCreateDockerPackage.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 $dotnetCoreDllNameSkript vytvoří složku s artefakty Dockeru na $dockerPackageOutputDirectoryPath. Upravte vygenerovaný soubor Dockerfile na
exposelibovolné porty, spusťte instalační skripty atd. na základě vašich potřeb.Dále je potřeba sestavit a odeslat balíček kontejneru Dockeru do úložiště.
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>Přidejte mapování portů na hostitele pro váš 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>Informace o konfiguraci režimu izolace kontejneru naleznete v tématu Konfigurace režimu izolace. Systém Windows podporuje dva režimy izolace kontejnerů: proces 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>(Volitelné) Nakonfigurujte certifikát pro ruční komunikaci mezi službami. Ve výchozím nastavení je primární certifikát clusteru nutný pro ruční komunikaci mezi různými kontejnerizovanými službami. Tento certifikát není nainstalován uvnitř kontejnerů ve stejné formě, jako je na samotném uzlu. Jedním ze způsobů, jak to vyřešit, je zahrnout soubor .pfx do kontejneru spolu se skriptem PowerShellu pro instalaci certifikátu uvnitř kontejneru. Dalším způsobem by bylo nakonfigurovat cluster tak, aby se certifikát nepožadoval. Přečtěte si další informace o scénářích zabezpečení clusteru Service Fabric.
(Volitelné) Nakonfigurujte protokolovací nástroj Ktl tak, aby používal uživatelský režim. Stavové služby můžou mít při spouštění v kontejnerech chybu kvůli rozdílům v systému souborů. Tato chyba se zobrazí v Service Fabric Exploreru následujícím způsobem:
System.Runtime.InteropServices.COMException (-2147024463) A device which does not exist was specified. (0x800701B1) ...Chybu lze opravit aktualizací manifestu clusteru tak, aby nastavil UseUserModeKtlLogger na true v části TransactionalReplicator . Postupujte podle kroků v tomto článku.
{ "name": "TransactionalReplicator", "parameters": [ { "name": "UseUserModeKtlLogger", "value": "true" } ] }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 povolila funkce náhledu. Podle kroků v tomto článku přidejte uvedené nastavení.
{ "name": "Hosting", "parameters": [ { "name": "FabricContainerAppsEnabled", "value": "true" } ] }Dále nasaďte upravený balíček aplikace do tohoto clusteru.
Poznámka:
Cluster Service Fabric je navržen pro jednoho nájemce a hostované aplikace jsou považovány za důvěryhodné. Pokud zvažujete hostování nedůvěryhodných kontejnerových aplikací, zvažte jejich nasazení jako kontejnery hostů a podívejte se na hostování nedůvěryhodných aplikací v clusteru Service Fabric.
Teď byste měli mít kontejnerizovanou aplikaci Service Fabric, na které běží váš cluster.
Další kroky
- Přečtěte si další informace o spouštění kontejnerů ve službě Service Fabric.
- Seznamte se s životním cyklem aplikace Service Fabric.