Share via


Toepassingen en services beheren als Azure Resource Manager-resources

U kunt toepassingen en services implementeren in uw Service Fabric-cluster via Azure Resource Manager. Dit betekent dat in plaats van toepassingen te implementeren en beheren via PowerShell of CLI nadat u hebt gewacht totdat het cluster gereed is, u nu toepassingen en services in JSON kunt uitdrukken en implementeren in dezelfde Resource Manager-sjabloon als uw cluster. Het proces van toepassingsregistratie, -inrichting en -implementatie wordt in één stap uitgevoerd.

Dit is de aanbevolen manier voor het implementeren van installatie-, governance- of clusterbeheertoepassingen die u in uw cluster nodig hebt. Dit omvat de Patch Orchestration-toepassing, Watchdogs of toepassingen die in uw cluster moeten worden uitgevoerd voordat andere toepassingen of services worden geïmplementeerd.

Beheer uw toepassingen indien van toepassing als Resource Manager-resources om het volgende te verbeteren:

  • Audittrail: Resource Manager controleert elke bewerking en houdt een gedetailleerd activiteitenlogboek bij waarmee u wijzigingen in deze toepassingen en uw cluster kunt traceren.
  • Op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC): het beheren van toegang tot clusters en toepassingen die op het cluster zijn geïmplementeerd, kan worden uitgevoerd via dezelfde Resource Manager-sjabloon.
  • Azure Resource Manager (via Azure Portal) wordt een one-stop-shop voor het beheren van uw cluster en kritieke toepassingsimplementaties.

In het volgende fragment ziet u de verschillende soorten resources die kunnen worden beheerd via een sjabloon:

{
    "apiVersion": "2019-03-01",
    "type": "Microsoft.ServiceFabric/clusters/applicationTypes",
    "name": "[concat(parameters('clusterName'), '/', parameters('applicationTypeName'))]",
    "location": "[variables('clusterLocation')]",
},
{
    "apiVersion": "2019-03-01",
    "type": "Microsoft.ServiceFabric/clusters/applicationTypes/versions",
    "name": "[concat(parameters('clusterName'), '/', parameters('applicationTypeName'), '/', parameters('applicationTypeVersion'))]",
    "location": "[variables('clusterLocation')]",
},
{
    "apiVersion": "2019-03-01",
    "type": "Microsoft.ServiceFabric/clusters/applications",
    "name": "[concat(parameters('clusterName'), '/', parameters('applicationName'))]",
    "location": "[variables('clusterLocation')]",
},
{
    "apiVersion": "2019-03-01",
    "type": "Microsoft.ServiceFabric/clusters/applications/services",
    "name": "[concat(parameters('clusterName'), '/', parameters('applicationName'), '/', parameters('serviceName'))]",
    "location": "[variables('clusterLocation')]"
}

Een nieuwe toepassing toevoegen aan uw Resource Manager-sjabloon

  1. Bereid de Resource Manager-sjabloon van uw cluster voor op implementatie. Zie Een Service Fabric-cluster maken met behulp van Azure Resource Manager voor meer informatie.

  2. Denk na over enkele toepassingen die u wilt implementeren in het cluster. Zijn er die altijd worden uitgevoerd waarop andere toepassingen afhankelijk kunnen zijn? Bent u van plan om clustergovernance of installatietoepassingen te implementeren? Deze soorten toepassingen worden het beste beheerd via een Resource Manager-sjabloon, zoals hierboven is besproken.

  3. Zodra u hebt vastgesteld welke toepassingen u op deze manier wilt implementeren, moeten de toepassingen worden verpakt, gezipt en op een opslagshare worden geplaatst. De share moet toegankelijk zijn via een REST-eindpunt dat Azure Resource Manager kan gebruiken tijdens de implementatie. Zie Een opslagaccount maken voor meer informatie.

  4. Beschrijf in uw Resource Manager-sjabloon, onder uw clusterdeclaratie, de eigenschappen van elke toepassing. Deze eigenschappen omvatten replica of aantal exemplaren en eventuele afhankelijkheidsketens tussen resources (andere toepassingen of services). Houd er rekening mee dat dit geen vervanging is voor de manifesten van de toepassing of service, maar wel een deel van de inhoud ervan als onderdeel van de Resource Manager-sjabloon van het cluster. Hier volgt een voorbeeldsjabloon met het implementeren van een stateless service1 en een stateful service Service2 als onderdeel van Application1:

    {
     "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
     "contentVersion": "1.0.0.0",
     "parameters": {
       "clusterName": {
         "type": "string",
         "defaultValue": "Cluster",
         "metadata": {
           "description": "Name of your cluster - Between 3 and 23 characters. Letters and numbers only."
         }
       },
       "applicationTypeName": {
         "type": "string",
         "defaultValue": "ApplicationType",
         "metadata": {
           "description": "The application type name."
         }
       },
       "applicationTypeVersion": {
         "type": "string",
         "defaultValue": "1",
         "metadata": {
           "description": "The application type version."
         }
       },
       "appPackageUrl": {
         "type": "string",
         "metadata": {
           "description": "The URL to the application package sfpkg file."
         }
       },
       "applicationName": {
         "type": "string",
         "defaultValue": "Application1",
         "metadata": {
           "description": "The name of the application resource."
         }
       },
       "serviceName": {
         "type": "string",
         "defaultValue": "Application1~Service1",
         "metadata": {
           "description": "The name of the service resource in the format of {applicationName}~{serviceName}."
         }
       },
       "serviceTypeName": {
         "type": "string",
         "defaultValue": "Service1Type",
         "metadata": {
           "description": "The name of the service type."
         }
       },
       "serviceName2": {
         "type": "string",
         "defaultValue": "Application1~Service2",
         "metadata": {
           "description": "The name of the service resource in the format of {applicationName}~{serviceName}."
         }
       },
       "serviceTypeName2": {
         "type": "string",
         "defaultValue": "Service2Type",
         "metadata": {
           "description": "The name of the service type."
         }
       }
     },
     "variables": {
       "clusterLocation": "[resourcegroup().location]"
     },
     "resources": [
       {
         "apiVersion": "2019-03-01",
         "type": "Microsoft.ServiceFabric/clusters/applicationTypes",
         "name": "[concat(parameters('clusterName'), '/', parameters('applicationTypeName'))]",
         "location": "[variables('clusterLocation')]",
         "dependsOn": [],
         "properties": {
           "provisioningState": "Default"
         }
       },
       {
         "apiVersion": "2019-03-01",
         "type": "Microsoft.ServiceFabric/clusters/applicationTypes/versions",
         "name": "[concat(parameters('clusterName'), '/', parameters('applicationTypeName'), '/', parameters('applicationTypeVersion'))]",
         "location": "[variables('clusterLocation')]",
         "dependsOn": [
           "[concat('Microsoft.ServiceFabric/clusters/', parameters('clusterName'), '/applicationTypes/', parameters('applicationTypeName'))]"
         ],
         "properties": {
           "provisioningState": "Default",
           "appPackageUrl": "[parameters('appPackageUrl')]"
         }
       },
       {
         "apiVersion": "2019-03-01",
         "type": "Microsoft.ServiceFabric/clusters/applications",
         "name": "[concat(parameters('clusterName'), '/', parameters('applicationName'))]",
         "location": "[variables('clusterLocation')]",
         "dependsOn": [
           "[concat('Microsoft.ServiceFabric/clusters/', parameters('clusterName'), '/applicationTypes/', parameters('applicationTypeName'), '/versions/', parameters('applicationTypeVersion'))]"
         ],
         "properties": {
           "provisioningState": "Default",
           "typeName": "[parameters('applicationTypeName')]",
           "typeVersion": "[parameters('applicationTypeVersion')]",
           "parameters": {},
           "upgradePolicy": {
             "upgradeReplicaSetCheckTimeout": "01:00:00.0",
             "forceRestart": "false",
             "rollingUpgradeMonitoringPolicy": {
               "healthCheckWaitDuration": "00:02:00.0",
               "healthCheckStableDuration": "00:05:00.0",
               "healthCheckRetryTimeout": "00:10:00.0",
               "upgradeTimeout": "01:00:00.0",
               "upgradeDomainTimeout": "00:20:00.0"
             },
             "applicationHealthPolicy": {
               "considerWarningAsError": "false",
               "maxPercentUnhealthyDeployedApplications": "50",
               "defaultServiceTypeHealthPolicy": {
                 "maxPercentUnhealthyServices": "50",
                 "maxPercentUnhealthyPartitionsPerService": "50",
                 "maxPercentUnhealthyReplicasPerPartition": "50"
               }
             }
           }
         }
       },
       {
         "apiVersion": "2019-03-01",
         "type": "Microsoft.ServiceFabric/clusters/applications/services",
         "name": "[concat(parameters('clusterName'), '/', parameters('applicationName'), '/', parameters('serviceName'))]",
         "location": "[variables('clusterLocation')]",
         "dependsOn": [
           "[concat('Microsoft.ServiceFabric/clusters/', parameters('clusterName'), '/applications/', parameters('applicationName'))]"
         ],
         "properties": {
           "provisioningState": "Default",
           "serviceKind": "Stateless",
           "serviceTypeName": "[parameters('serviceTypeName')]",
           "instanceCount": "-1",
           "partitionDescription": {
             "partitionScheme": "Singleton"
           },
           "correlationScheme": [],
           "serviceLoadMetrics": [],
           "servicePlacementPolicies": []
         }
       },
       {
         "apiVersion": "2019-03-01",
         "type": "Microsoft.ServiceFabric/clusters/applications/services",
         "name": "[concat(parameters('clusterName'), '/', parameters('applicationName'), '/', parameters('serviceName2'))]",
         "location": "[variables('clusterLocation')]",
         "dependsOn": [
           "[concat('Microsoft.ServiceFabric/clusters/', parameters('clusterName'), '/applications/', parameters('applicationName'))]"
         ],
         "properties": {
           "provisioningState": "Default",
           "serviceKind": "Stateful",
           "serviceTypeName": "[parameters('serviceTypeName2')]",
           "targetReplicaSetSize": "3",
           "minReplicaSetSize": "2",
           "replicaRestartWaitDuration": "00:01:00.0",
           "quorumLossWaitDuration": "00:02:00.0",
           "standByReplicaKeepDuration": "00:00:30.0",
           "partitionDescription": {
             "partitionScheme": "UniformInt64Range",
             "count": "5",
             "lowKey": "1",
             "highKey": "5"
           },
           "hasPersistedState": "true",
           "correlationScheme": [],
           "serviceLoadMetrics": [],
           "servicePlacementPolicies": [],
           "defaultMoveCost": "Low"
         }
       }
     ]
    }
    

    Notitie

    Raadpleeg de Service Fabric Azure Resource Manager-verwijzing voor het zoeken naar gebruik en details over afzonderlijke sjablooneigenschappen.

  5. Implementeren!

Resourceprovidertoepassingsresource voor Service Fabric verwijderen

Met het volgende wordt het app-pakket geactiveerd dat de inrichting van het cluster ongedaan wordt gemaakt. Hierdoor wordt de gebruikte schijfruimte opgeschoond:

$resourceGroup = 'sftestcluster'
$cluster = $resourceGroup
$applicationType = 'VotingType'
$application = 'Voting'
$applicationVersion = '1.0.0'

$sf = Get-AzResource -ResourceGroupName $resourceGroup -ResourceName $cluster
$app = Get-AzResource -ResourceId "$($sf.Id)/applications/$application"
$appType = Get-AzResource -ResourceId "$($sf.Id)/applicationTypes/$applicationType"
$appTypeVersion = Get-AzResource -ResourceId "$($appType.Id)/versions/$applicationVersion"

# remove application
Remove-AzResource -ResourceId $app.Id

# remove application type version
Remove-AzResource -ResourceId $appTypeVersion.Id

# remove application type 
# Remove-AzResource -ResourceId $appType.Id

Als u Microsoft.ServiceFabric/clusters/toepassing uit uw ARM-sjabloon verwijdert, wordt de inrichting van de toepassing niet ongedaan gemaakt. PowerShell-opdracht Remove-AzResource zoals hierboven wordt weergegeven of als u een REST DELETE-toepassingstypeversie uitvoert: Verwijderen is rechtstreeks twee opties die kunnen worden gebruikt.

Notitie

Zodra het verwijderen is voltooid, ziet u de pakketversie niet meer in SFX of ARM. U kunt de versieresource van het toepassingstype waarmee de toepassing wordt uitgevoerd, niet verwijderen. ARM/SFRP voorkomt dit. Als u de inrichting van het actieve pakket ongedaan probeert te maken, voorkomt SF Runtime dit.

Een bestaande toepassing beheren via Resource Manager

Als uw cluster al is geïnstalleerd en sommige toepassingen die u wilt beheren als Resource Manager-resources al zijn geïmplementeerd, in plaats van de toepassingen te verwijderen en opnieuw te implementeren, kunt u een PUT-aanroep gebruiken met dezelfde API's om ervoor te zorgen dat de toepassingen worden bevestigd als Resource Manager-resources. Zie Wat is het Service Fabric-toepassingsresourcemodel voor meer informatie?

Notitie

Als u wilt toestaan dat een clusterupgrade beschadigde apps negeert, kan de klant 'maxPercentUnhealthyApplications: 100' opgeven in de sectie upgradeDescription/healthPolicy; Gedetailleerde beschrijvingen voor alle instellingen bevinden zich in de documentatie over het upgradebeleid voor Rest API-clusters van Service Fabrics.

Volgende stappen