null

Обновление Service Fabric в конфигурации DevCluster

Так как при конфигурации DevCluster все ноды располагаются на одной физической машине, производить Rolling-upgrade, когда обновление устанавливается поочерёдно на каждый узел, а приложения мигрируют на соседние, как это происходит при стандартной кластерной конфигурации, не представляется возможным.
Официальным способом обновления в таком случае является удаление кластера и создание нового с той же конфигурацией. Это вызывает ряд проблем, таких как необходимость заново деплоить все приложения.

Для решения проблемы был выработан сценарий, при котором производится обновление DevCluster без потери приложений и их данных.
Команды выполняются локально на машине с развёрнутым SF в PowerShell с правами Администратора:

Подключаемся к кластеру (-ConnectionEndpoint можно не указывать, так как кластер локальный)

Connect-ServiceFabricCluster

Проверяем наличие зарегистрированных пакетов обновлений в кластере
В нашем случае их нет (кроме текущего)

Get-ServiceFabricRegisteredClusterCodeVersion

CodeVersion
-----------
6.1.456.9494

Получаем доступные к обновлению версии SF и ссылки на скачивание пакета обновления

Get-ServiceFabricRuntimeUpgradeVersion -BaseVersion 6.1.456.9494

Version      SupportExpiryDate  TargetPackageLocation
-------      -----------------  ---------------------
6.1.456.9494 30.05.2018 0:00:00 https://download.microsoft.com/download/B/0/B/B0BCCAC5-65AA-4BE3-AB13-D5FF5890F4B5/6.1.456.9494/MicrosoftAzureServiceFabric.6.1.456.9494.cab
6.1.467.9494 30.05.2018 0:00:00 https://download.microsoft.com/download/B/0/B/B0BCCAC5-65AA-4BE3-AB13-D5FF5890F4B5/6.1.467.9494/MicrosoftAzureServiceFabric.6.1.467.9494.cab
6.1.472.9494                    https://download.microsoft.com/download/B/0/B/B0BCCAC5-65AA-4BE3-AB13-D5FF5890F4B5/6.1.472.9494/MicrosoftAzureServiceFabric.6.1.472.9494.cab

Скачиваем пакет любым удобным способом
Копируем скачанный пакет в хранилище образов

Copy-ServiceFabricClusterPackage -Code -CodePackagePath .\MicrosoftAzureServiceFabric.6.1.472.9494.cab -ImageStoreConnectionString "fabric:ImageStore"

Регистрируем пакет обновления в SF

Register-ServiceFabricClusterPackage -Code -CodePackagePath MicrosoftAzureServiceFabric.6.1.472.9494.cab

Проверяем доступность нового пакета для обновления
Теперь доступно две версии: 6.1.456.9494, 6.1.472.9494

Get-ServiceFabricRegisteredClusterCodeVersion

CodeVersion
-----------
6.1.456.9494
6.1.472.9494

Запускаем обновление кластера до требуемой версии без Health-check проверок кластера в процессе, так как в процессе обновления и перезагрузки одной ноды перезапускается весь SF (следствие конфигурации DevCluster), в этот момент Health-check показывает недоступность кластера и обновление останавливается

Start-ServiceFabricClusterUpgrade -Code -CodePackageVersion 6.1.472.9494 -UnmonitoredAuto

Следить за прогрессом обновления можно с помощью команды

Get-ServiceFabricClusterUpgrade

TargetCodeVersion             : 6.1.472.9494
TargetConfigVersion           : 1
StartTimestampUtc             : 21.03.2018 14:43:33
UpgradeState                  : RollingForwardPending
UpgradeDuration               : 00:10:04
CurrentUpgradeDomainDuration  : 00:00:00
CurrentUpgradeDomainProgress  : UD2

                                NodeName            : Node3
                                UpgradePhase        : Upgrading

NextUpgradeDomain             : UD2
UpgradeDomainsStatus          : { "UD0" = "Completed";
                                "UD1" = "Completed";
                                "UD2" = "Pending" }
UpgradeKind                   : Rolling
RollingUpgradeMode            : UnmonitoredAuto
ForceRestart                  : False
UpgradeReplicaSetCheckTimeout : 49710.06:28:15

При обновлении происходят множественные перезапуски SF, что приводит к недоступности его ConnectionEndpoint и, соответственно, выполнение вышеуказанной команды становится невозможно.
Для выхода из ситуации можно воспользоваться Монитором ресурсов Windows и отслеживать открытые TCP-порты. Когда среди них присутствует порт 19000, кластер доступен для подключения с помощью Connect-ServiceFabricCluster.

Во время обновления может потребоваться перезагрузка сервера, если SF долгое время не запускается на порту 19000.

Также можно запустить обновление в режиме UnmonitoredManual, в таком случае, после каждой ноды, обновление будет приостанавливаться и ждать ручного продолжения.
Продолжить обновление на следующей ноде, находящейся в Upgrade-домене UD1

Resume-ServiceFabricClusterUpgrade -UpgradeDomainName "UD1"

Изменить режим обновления уже после его запуска:

Update-ServiceFabricClusterUpgrade -UpgradeMode UnmonitoredManual