Uygulamaları ve hizmetleri Azure Resource Manager kaynakları olarak yönetme

Azure Resource Manager aracılığıyla Service Fabric kümenize uygulama ve hizmet dağıtabilirsiniz. Bu, kümenin hazır olmasını bekledikten sonra uygulamaları PowerShell veya CLI aracılığıyla dağıtmak ve yönetmek yerine artık uygulamaları ve hizmetleri JSON'da ifade edip bunları kümenizle aynı Resource Manager şablonunda dağıtabileceğiniz anlamına gelir. Uygulama kayıt, sağlama ve dağıtım işlemlerinin tümü tek adımda gerçekleştirilir.

Kümenizde ihtiyacınız olan tüm kurulum, idare veya küme yönetimi uygulamalarını dağıtmanız için önerilen yöntem budur. Buna Patch Orchestration Uygulaması, Watchdogs veya diğer uygulamalar veya hizmetler dağıtılmadan önce kümenizde çalışması gereken uygulamalar dahildir.

Uygun olduğunda, uygulamalarınızı geliştirmek için Resource Manager kaynakları olarak yönetin:

  • Denetim izi: Resource Manager her işlemi denetler ve bu uygulamalarda ve kümenizde yapılan değişiklikleri izlemenize yardımcı olabilecek ayrıntılı bir Etkinlik Günlüğü tutar.
  • Azure rol tabanlı erişim denetimi (Azure RBAC): Kümede dağıtılan kümelere ve uygulamalara erişimi yönetme işlemi aynı Resource Manager şablonu aracılığıyla gerçekleştirilebilir.
  • Azure Resource Manager (Azure portal aracılığıyla), kümenizi ve kritik uygulama dağıtımlarınızı yönetmek için tek bir durak haline gelir.

Aşağıdaki kod parçacığı, şablon aracılığıyla yönetilebilen farklı kaynak türlerini gösterir:

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

Resource Manager şablonunuza yeni uygulama ekleme

  1. Kümenizin Resource Manager şablonunu dağıtım için hazırlayın. Daha fazla bilgi için bkz. Azure Resource Manager kullanarak Service Fabric kümesi oluşturma.

  2. Kümede dağıtmayı planladığınız bazı uygulamaları düşünün. Diğer uygulamaların bağımlılıklarını her zaman çalıştırabilecek herhangi bir uygulama var mı? Herhangi bir küme idaresi veya kurulum uygulaması dağıtmayı planlıyor musunuz? Bu tür uygulamalar, yukarıda açıklandığı gibi en iyi Resource Manager şablonu aracılığıyla yönetilir.

  3. Hangi uygulamaların bu şekilde dağıtılmasını istediğinizi anladıktan sonra, uygulamaların paketlenmiş, sıkıştırılmış ve bir depolama paylaşımına yerleştirilmesi gerekir. Azure Resource Manager dağıtım sırasında kullanılabilmesi için paylaşımın rest uç noktası üzerinden erişilebilir olması gerekir. Ayrıntılar için bkz. Depolama hesabı oluşturma .

  4. Resource Manager şablonunuzda, küme bildiriminizin altında her uygulamanın özelliklerini açıklayın. Bu özellikler çoğaltma veya örnek sayısını ve kaynaklar (diğer uygulamalar veya hizmetler) arasındaki bağımlılık zincirlerini içerir. Bunun Uygulama veya Hizmet bildirimlerinin yerini almadığını, bunun yerine kümenin Resource Manager şablonunun bir parçası olarak içindekilerden bazılarını açıklandığını unutmayın. Application1'in bir parçası olarak durum bilgisi olmayan service Service1 ve durum bilgisi olan bir Hizmet2 dağıtmayı içeren örnek bir şablon aşağıda verilmiştir:

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

    Not

    Kullanımı ve tek tek şablon özellikleriyle ilgili ayrıntıları bulmak için Service Fabric Azure Resource Manager başvurusuna bakın.

  5. Dağıtmak!

Service Fabric Kaynak Sağlayıcısı Uygulama kaynağını kaldırma

Aşağıdakiler, uygulama paketinin kümeden sağlanmasının kaldırılmasını tetikler ve bu işlem kullanılan disk alanını temizler:

$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

ARM şablonunuzdan Microsoft.ServiceFabric/clusters/application'ı kaldırmanız, Uygulamanın sağlamasını kaldırmaz. Yukarıda gösterildiği gibi Remove-AzResource PowerShell komutu veya REST DELETE Uygulama Türü Sürümleri gerçekleştirme - Doğrudan Silme , kullanılabilecek iki seçenektir.

Not

Kaldırma işlemi tamamlandıktan sonra artık SFX veya ARM'de paket sürümünü görmemeniz gerekir. Uygulamanın çalıştığı uygulama türü sürüm kaynağını silemezsiniz; ARM/SFRP bunu engeller. Çalışan paketin sağlamasını kaldırmaya çalışırsanız, SF çalışma zamanı bunu engeller.

Mevcut bir uygulamayı Resource Manager aracılığıyla yönetme

Kümeniz zaten açıksa ve Resource Manager kaynakları olarak yönetmek istediğiniz bazı uygulamalar zaten dağıtıldıysa, uygulamaları kaldırıp yeniden dağıtmak yerine, uygulamaların Resource Manager kaynakları olarak kabullenmesi için aynı API'leri kullanarak put çağrısı kullanabilirsiniz. Ek bilgi için bkz. Service Fabric uygulaması kaynak modeli nedir?

Not

Bir küme yükseltmesinin iyi durumda olmayan uygulamaları yoksaymasına izin vermek için müşteri "upgradeDescription/healthPolicy" bölümünde "maxPercentUnhealthyApplications: 100" belirtebilir; tüm ayarlar için ayrıntılı açıklamalar Service Fabrics REST API Küme Yükseltme İlkesi belgelerindedir.

Sonraki adımlar