Conteneuriser vos services Service Fabric Reliable Actors et Reliable Services sur Windows
Service Fabric prend en charge la conteneurisation des microservices Service Fabric (services basés sur Reliable Services et Reliable Actors). Pour en savoir plus, voir Service Fabric et conteneurs.
Ce document fournit des conseils pour rendre votre service opérationnel à l’intérieur d’un conteneur Windows.
Notes
Actuellement, cette fonctionnalité fonctionne uniquement pour Windows. Pour exécuter des conteneurs, le cluster doit être en cours d’exécution sur Windows Server 2016 avec des conteneurs.
Étapes de conteneurisation de votre application Service Fabric
Ouvrez l’application Service Fabric dans Visual Studio.
Ajoutez la classe SFBinaryLoader.cs à votre projet. Le code de cette classe correspond à une application auxiliaire qui gère le chargement correct des binaires du runtime Service Fabric dans l’application, lorsqu’elle est exécutée au sein d’un conteneur.
Pour chaque package de code que vous souhaitez conteneuriser, initialisez le chargeur au point d’entrée du programme. Ajoutez le constructeur statique indiqué dans l’extrait de code suivant à votre fichier de point d’entrée du programme.
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() {
Générez et créez un package de votre projet. Pour générer et créer un package, cliquez avec le bouton droit sur le projet d’application dans l’Explorateur de solutions, puis choisissez la commande Package.
Pour chaque package de code que vous voulez conteneuriser, exécutez le script PowerShell suivant : CreateDockerPackage.ps1. Procédez comme suit :
.NET complet
$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
Ce script crée un dossier avec des artefacts Docker à l’emplacement $dockerPackageOutputDirectoryPath. Modifiez le fichier Dockerfile généré pour
expose
les ports, exécuter les scripts de configuration, etc. selon vos besoins.Vous devez ensuite générer et envoyer (push) votre package de conteneur Docker vers votre référentiel.
Modifiez les fichiers ApplicationManifest.xml et ServiceManifest.xml de manière à ajouter le mappage des ports aux hôtes, l’authentification des registres, les informations sur les référentiels et l’image de votre conteneur. Pour savoir comment modifier les manifestes, voir Créer votre première application de conteneur Service Fabric sur Windows. La définition du package de code dans le manifeste de service doit être remplacée par l’image de conteneur correspondante. N’oubliez pas de remplacer la valeur du paramètre EntryPoint par un type 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>
Ajoutez le mappage des ports aux hôtes dans le cas du point de terminaison du réplicateur et du service. Comme ces ports sont affectés tous les deux lors du runtime par Service Fabric, la valeur ContainerPort est définie sur zéro, afin que le port affecté soit utilisé pour le mappage.
<Policies> <ContainerHostPolicies CodePackageRef="Code"> <PortBinding ContainerPort="0" EndpointRef="ServiceEndpoint"/> <PortBinding ContainerPort="0" EndpointRef="ReplicatorEndpoint"/> </ContainerHostPolicies> </Policies>
Pour configurer le mode d’isolation de conteneur, voir Configurer le mode d’isolation. Windows prend en charge deux modes d’isolation pour les conteneurs : Processus et Hyper-V. Les extraits de code suivants montrent comment le mode d’isolation est spécifié dans le fichier manifeste de l’application.
<Policies> <ContainerHostPolicies CodePackageRef="Code" Isolation="process"> ... </ContainerHostPolicies> </Policies>
<Policies> <ContainerHostPolicies CodePackageRef="Code" Isolation="hyperv"> ... </ContainerHostPolicies> </Policies>
Notes
Un cluster Service Fabric est monolocataire par conception et les applications hébergées sont considérées comme approuvées. Si vous envisagez d’héberger des applications conteneur non approuvées, envisagez de les déployer en tant que conteneurs invités et consultez Héberger des applications non approuvées dans un cluster Service Fabric.
Pour tester cette application, vous devez la déployer sur un cluster qui exécute la version 5.7 ou plus. Pour les versions de runtime 6.1 ou inférieures, vous devez modifier et mettre à jour les paramètres de cluster pour activer cette fonctionnalité en préversion. Suivez les étapes de cet article pour ajouter le paramètre représenté ensuite.
{ "name": "Hosting", "parameters": [ { "name": "FabricContainerAppsEnabled", "value": "true" } ] }
Ensuite, déployez le package d’application modifié sur ce cluster.
Vous devez maintenant disposer d’une application Service Fabric en conteneur exécutant votre cluster.
Étapes suivantes
- En savoir plus sur l’exécution des conteneurs sur Service Fabric.
- En savoir plus sur le cycle de vie des applications Service Fabric.