Aracılığıyla paylaş


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

Uygulama ve hizmetlerinizi Service Fabric kümesine Azure Resource Manager üzerinden 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 edebilir ve bunları kümenizle aynı Resource Manager şablonunda dağıtabileceğiniz anlamına gelir. Uygulama kaydetme, hazırlama ve dağıtma işlemlerinin tümü tek bir adımda gerçekleşir.

Kümenizde ihtiyacınız olan tüm kurulum, idare veya küme yönetimi uygulamalarını dağıtmanın önerilen yolu 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, geliştirmek için uygulamalarınızı 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 noktadan oluşan bir mağaza 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 uygulamalardan bazılarını düşünün. Diğer uygulamaların bağımlılıkları alabileceği her zaman çalıştırılacak 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 şekilde 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'ın dağıtım sırasında kullanılabilmesi için paylaşıma 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ı, kümenin Resource Manager şablonunun bir parçası olarak içindekilerin bazılarını açıklandığını unutmayın. Application1'in bir parçası olarak durum bilgisi olmayan service1 ve durum bilgisi olan bir Service2 hizmeti 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

    Tek tek şablon özellikleriyle ilgili kullanımı ve 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ırmak, Uygulamanın sağlamasını kaldırmaz. Yukarıda gösterildiği gibi PowerShell komutu Remove-AzResource 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.

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

Kümeniz zaten çalışır durumdaysa 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 uygulama 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 belgelerinde verilmiştir.

Sonraki adımlar