在Service Fabric中取消配置旧应用程序类型的策略

时间:2017-08-02 17:51:42

标签: azure-service-fabric

有没有办法在群集上设置某种配置来删除服务结构应用程序类型版本?比如只保留最后5个版本或什么?

例如,我有CI / CD将新版本的服务结构应用程序部署到我们的集群,它在集群中留下了许多应用程序版本类型。有没有办法随着时间的推移自动取消设置或只保留一定数量的版本?

3 个答案:

答案 0 :(得分:4)

我有两种选择 -

  • 执行Deploy-FabricApplication.ps1时,指定 UnregisterUnusedApplicationVersionsAfterUpgrade = $ true 。此参数指示是否取消注册升级完成后存在的任何未使用的应用程序版本。

  • 将自定义脚本添加到您的发布定义,部署脚本或您希望的任何内容中,以解析所有已部署的应用类型,并取消设置您认为已过时的那些类型。这是命令 你需要使用 - Unregister-ServiceFabricApplicationType。下面是一个脚本的示例,该脚本取消注册除运行的应用程序类型之外的所有应用程序类型 -

    #resolve all app types
    $appTypes = Get-ServiceFabricApplicationType
    foreach($appType in $appTypes)
    {
       #try to find the match with any of installed applications
       $match = Get-ServiceFabricApplication -ApplicationTypeName $appType.ApplicationTypeName | Where-Object {$_.ApplicationTypeVersion -eq $appType.ApplicationTypeVersion}
       if(!$match)
       {
           Write-Host "Deleting $($appType.ApplicationTypeName) $($appType.ApplicationTypeVersion)"
           Unregister-ServiceFabricApplicationType -ApplicationTypeName $appType.ApplicationTypeName -ApplicationTypeVersion $appType.ApplicationTypeVersion -Force -Confirm
       }    
    }
    

答案 1 :(得分:1)

您可以在集群设置的CleanupUnusedApplicationTypes部分中将true设置为Management,以启用自动清除。来自docs

此配置(如果启用)允许跳过最近的三个未使用版本自动注销未使用的应用程序类型版本,从而减少映像存储所占用的磁盘空间。自动清除将在成功配置该特定应用程序类型时触发,并且每天对所有应用程序类型定期运行一次。可以使用参数“ MaxUnusedAppTypeVersionsToKeep”来配置要跳过的未使用版本数。

我认为这至少需要Service Fabric 6.5。

答案 2 :(得分:0)

我扩展了Kiyrl的答案,保留了当前部署的版本+ n个历史记录。

#resolve all app types
$appTypes = Get-ServiceFabricApplicationType
$deployedAppArray = @()
foreach($appType in $appTypes){    
    #try to find the match with any of installed applications
    $match = Get-ServiceFabricApplication -ApplicationTypeName $appType.ApplicationTypeName | Where-Object {$_.ApplicationTypeVersion -eq $appType.ApplicationTypeVersion}
    if(!$match)
    {
        $oldApp = new-object psobject -property @{
            ApplicationTypeName = $appType.ApplicationTypeName
            ApplicationTypeVersion  = $appType.ApplicationTypeVersion 
        }
        $deployedAppArray += $oldApp
    }    
}

$countToKeep = 2 # keeps this many in addition + currently deployed
$uniqueAppTypes = $deployedAppArray | Group-Object "ApplicationTypeName" | Where-Object { $_.Count -gt $countToKeep } | Select-Object -ExpandProperty Name

foreach($appType in $uniqueAppTypes){ 
    $versionsToRemove = $deployedAppArray | Where-Object {$_.ApplicationTypeName -eq $appType}
    $toRemoveCount =  $versionsToRemove.Length - $countToKeep
    $versionsToRemove = $versionsToRemove | Select-Object -First $toRemoveCount

    foreach($appToRemove in $versionsToRemove){
        Write-Host "Removing $($appToRemove.ApplicationTypeName) $($appToRemove.ApplicationTypeVersion)"
        Unregister-ServiceFabricApplicationType -ApplicationTypeName $appToRemove.ApplicationTypeName -ApplicationTypeVersion $appToRemove.ApplicationTypeVersion -Force
    }
}