Megosztás a következőn keresztül:


Alkalmazások és szolgáltatások kezelése Azure-Resource Manager-erőforrásokként

Alkalmazásokat és szolgáltatásokat helyezhet üzembe a Service Fabric-fürtön az Azure Resource Manager keresztül. Ez azt jelenti, hogy ahelyett, hogy alkalmazásokat helyez üzembe és kezel a PowerShell vagy a parancssori felület használatával, miután megvárta, hogy a fürt készen áll, mostantól jSON-ban fejezheti ki az alkalmazásokat és szolgáltatásokat, és üzembe helyezheti őket ugyanabban a Resource Manager sablonban, mint a fürt. Az alkalmazásregisztráció, a kiépítés és az üzembe helyezés folyamata egy lépésben történik.

Ez a javasolt módszer a fürtben szükséges beállítási, irányítási vagy fürtkezelési alkalmazások üzembe helyezésére. Ez magában foglalja a Patch Orchestration alkalmazást, a Watchdogsot vagy azokat az alkalmazásokat, amelyeknek futniuk kell a fürtön más alkalmazások vagy szolgáltatások üzembe helyezése előtt.

Adott esetben az alkalmazásokat Resource Manager erőforrásként kezelve javíthatja a következőket:

  • Auditnapló: Resource Manager minden műveletet naplóz, és részletes tevékenységnaplót vezet, amely segít nyomon követni az alkalmazások és a fürt módosításait.
  • Azure-beli szerepköralapú hozzáférés-vezérlés (Azure RBAC): A fürtökön üzembe helyezett fürtökhöz és alkalmazásokhoz való hozzáférés kezelése ugyanazon Resource Manager sablonnal végezhető el.
  • Az Azure Resource Manager (Azure Portal keresztül) egyablakos megoldássá válik a fürt és a kritikus fontosságú alkalmazások üzembe helyezésének felügyeletére.

Az alábbi kódrészlet azokat az erőforrásokat mutatja be, amelyek sablonnal kezelhetők:

{
    "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')]"
}

Új alkalmazás hozzáadása a Resource Manager-sablonhoz

  1. Készítse elő a fürt Resource Manager sablonját az üzembe helyezéshez. További információ: Service Fabric-fürt létrehozása az Azure Resource Manager használatával.

  2. Gondoljon néhány olyan alkalmazásra, amely üzembe helyezését tervezi a fürtön. Van olyan, amely mindig azt fogja futtatni, hogy más alkalmazások függőségeket vegyenek fel? Tervez fürtirányítási vagy -beállítási alkalmazásokat üzembe helyezni? Az ilyen típusú alkalmazásokat a legjobban egy Resource Manager sablonnal lehet kezelni, ahogy azt fentebb említettük.

  3. Miután rájött, hogy milyen alkalmazásokat szeretne így üzembe helyezni, az alkalmazásokat be kell csomagolni, tömöríteni és tárolómegosztásra kell helyezni. A megosztásnak elérhetőnek kell lennie egy REST-végponton keresztül az Azure Resource Manager számára, hogy az üzembe helyezés során felhasználhassa. A részletekért lásd: Tárfiók létrehozása .

  4. A Resource Manager-sablonban a fürtdeklaráció alatt ismertesse az egyes alkalmazások tulajdonságait. Ezek a tulajdonságok közé tartozik a replikák vagy példányok száma, valamint az erőforrások (más alkalmazások vagy szolgáltatások) közötti függőségi láncok. Vegye figyelembe, hogy ez nem helyettesíti az alkalmazás- vagy szolgáltatásjegyzékeket, hanem a fürt Resource Manager sablonjának részeként ismerteti a bennük lévő elemek egy részét. Íme egy mintasablon, amely egy állapot nélküli service1 és egy állapotalapú service2 üzembe helyezését tartalmazza az Application1 részeként:

    {
     "$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"
         }
       }
     ]
    }
    

    Megjegyzés

    Tekintse meg a Service Fabric Azure-Resource Manager-referenciát az egyes sablontulajdonságok használati adatainak és részleteinek megkereséséhez.

  5. Telepíteni!

Service Fabric erőforrás-szolgáltatói alkalmazás erőforrásának eltávolítása

A következők aktiválják az alkalmazáscsomagot a fürtből való kiépítés megszüntetéséhez, és ez törli a felhasznált lemezterületet:

$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

Ha egyszerűen eltávolítja a Microsoft.ServiceFabric/clusters/application alkalmazást az ARM-sablonból, az nem bontja le az alkalmazást. A PowerShell-parancs Remove-AzResource a fent látható módon, vagy REST DELETE alkalmazástípusú verziók végrehajtása – A közvetlen törlés két lehetőség, amelyek használhatók.

Megjegyzés

Ha az eltávolítás befejeződött, többé nem jelenik meg a csomag verziója az SFX-ben vagy az ARM-ben. Nem törölheti azt az alkalmazástípus-verzióerőforrást, amellyel az alkalmazás fut; Az ARM/SFRP ezt megakadályozza. Ha megpróbálja megszüntetni a futó csomag létrehozását, az SF-futtatókörnyezet megakadályozza azt.

Meglévő alkalmazás kezelése Resource Manager

Ha a fürt már működik, és egyes, Resource Manager erőforrásokként kezelni kívánt alkalmazások már telepítve vannak rajta, az alkalmazások eltávolítása és ismételt üzembe helyezése helyett használhat put hívást ugyanazokkal az API-kkal, hogy az alkalmazásokat Resource Manager erőforrásként nyugtázza. További információ: Mi a Service Fabric-alkalmazás erőforrásmodellje?

Megjegyzés

Annak engedélyezéséhez, hogy a fürtfrissítés figyelmen kívül hagyja a nem megfelelő állapotú alkalmazásokat, az ügyfél megadhat "maxPercentUnhealthyApplications: 100" értéket az "upgradeDescription/healthPolicy" szakaszban; az összes beállítás részletes leírását a Service Fabrics REST API fürtfrissítési szabályzatának dokumentációja tartalmazza.

Következő lépések