Zarządzanie aplikacjami i usługami jako zasobami usługi Azure Resource Manager
Możesz wdrażać aplikacje i usługi w klastrze usługi Service Fabric za pośrednictwem usługi Azure Resource Manager. Oznacza to, że zamiast wdrażać aplikacje i zarządzać nimi za pośrednictwem programu PowerShell lub interfejsu wiersza polecenia po oczekiwaniu na gotowość klastra, można teraz wyrażać aplikacje i usługi w formacie JSON i wdrażać je w tym samym szablonie usługi Resource Manager co klaster. Proces rejestracji, aprowizacji i wdrażania aplikacji obejmuje tylko jeden krok.
Jest to zalecany sposób wdrażania dowolnej konfiguracji, ładu lub aplikacji do zarządzania klastrem, które są wymagane w klastrze. Obejmuje to aplikację Patch Orchestration Application, Watchdogs lub wszystkie aplikacje, które muszą być uruchomione w klastrze przed wdrożeniem innych aplikacji lub usług.
Jeśli ma to zastosowanie, zarządzaj aplikacjami jako zasobami usługi Resource Manager, aby ulepszyć:
- Dziennik inspekcji: usługa Resource Manager przeprowadza inspekcję każdej operacji i przechowuje szczegółowy dziennik aktywności, który może pomóc w śledzeniu wszelkich zmian wprowadzonych w tych aplikacjach i klastrze.
- Kontrola dostępu oparta na rolach platformy Azure (Azure RBAC): zarządzanie dostępem do klastrów i aplikacji wdrożonych w klastrze można wykonać za pomocą tego samego szablonu usługi Resource Manager.
- Usługa Azure Resource Manager (za pośrednictwem witryny Azure Portal) staje się jednorazowym rozwiązaniem do zarządzania klastrem i krytycznymi wdrożeniami aplikacji.
Poniższy fragment kodu przedstawia różne rodzaje zasobów, którymi można zarządzać za pomocą szablonu:
{
"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')]"
}
Dodawanie nowej aplikacji do szablonu usługi Resource Manager
Przygotuj szablon usługi Resource Manager klastra do wdrożenia. Aby uzyskać więcej informacji, zobacz Tworzenie klastra usługi Service Fabric przy użyciu usługi Azure Resource Manager.
Zastanów się nad niektórymi aplikacjami, które planujesz wdrożyć w klastrze. Czy istnieją jakieś, które zawsze będą działać, że inne aplikacje mogą wymagać zależności? Czy planujesz wdrożyć jakiekolwiek aplikacje ładu klastra lub skonfigurować? Te rodzaje aplikacji najlepiej zarządzać za pośrednictwem szablonu usługi Resource Manager, jak opisano powyżej.
Po dowiedzieć się, jakie aplikacje mają być wdrażane w ten sposób, aplikacje muszą być spakowane, spakowane i umieszczone w udziale magazynu. Udział musi być dostępny za pośrednictwem punktu końcowego REST, aby usługa Azure Resource Manager była zużywana podczas wdrażania. Aby uzyskać szczegółowe informacje, zobacz Tworzenie konta magazynu.
W szablonie usługi Resource Manager pod deklaracją klastra opisz właściwości każdej aplikacji. Te właściwości obejmują replikę lub liczbę wystąpień oraz wszystkie łańcuchy zależności między zasobami (inne aplikacje lub usługi). Należy pamiętać, że nie zastępuje to manifestów aplikacji lub usługi, ale raczej opisuje niektóre z nich w ramach szablonu usługi Resource Manager klastra. Oto przykładowy szablon, który obejmuje wdrażanie usługi bezstanowej Service1 i stanowej usługi Service2 w ramach aplikacji 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" } } ] }
Uwaga
Zapoznaj się z dokumentacją usługi Azure Resource Manager usługi Service Fabric, aby znaleźć informacje o użyciu i szczegółach dotyczących poszczególnych właściwości szablonu.
Wdrożyć!
Usuwanie zasobu dostawcy zasobów usługi Service Fabric
Następujące polecenie spowoduje wyzwolenie pakietu aplikacji w celu anulowania aprowizacji z klastra. Spowoduje to wyczyszczenie używanego miejsca na dysku:
$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
Usunięcie aplikacji Microsoft.ServiceFabric/clusters/application z szablonu usługi ARM nie spowoduje anulowania aprowizacji aplikacji. Polecenie programu PowerShell Remove-AzResource, jak pokazano powyżej lub wykonanie wersji typu aplikacji REST DELETE — usuń bezpośrednio to dwie opcje, których można użyć.
Uwaga
Po zakończeniu usuwania nie powinna być już widoczna wersja pakietu w systemie SFX lub ARM. Nie można usunąć zasobu wersji typu aplikacji, z którym działa aplikacja; Usługa ARM/SFRP zapobiegnie temu. Jeśli spróbujesz cofnąć aprowizę uruchomionego pakietu, środowisko uruchomieniowe SF uniemożliwi jego aprowizę.
Zarządzanie istniejącą aplikacją za pomocą usługi Resource Manager
Jeśli klaster jest już uruchomiony, a niektóre aplikacje, którymi chcesz zarządzać jako zasoby usługi Resource Manager, są już wdrożone, zamiast usuwać aplikacje i wdrażać je ponownie, możesz użyć wywołania PUT przy użyciu tych samych interfejsów API, aby aplikacje zostały uznane za zasoby usługi Resource Manager. Aby uzyskać dodatkowe informacje, zobacz Co to jest model zasobów aplikacji usługi Service Fabric?
Uwaga
Aby zezwolić na uaktualnienie klastra w celu ignorowania aplikacji w złej kondycji, klient może określić wartość "maxPercentUnhealthyApplications: 100" w sekcji "upgradeDescription/healthPolicy"; szczegółowe opisy wszystkich ustawień znajdują się w dokumentacji zasad uaktualniania klastra interfejsu API REST usługi Service Fabrics.
Następne kroki
- Użyj interfejsu wiersza polecenia usługi Service Fabric lub programu PowerShell , aby wdrożyć inne aplikacje w klastrze.
- Uaktualnianie klastra usługi Service Fabric