Краткое руководство. Развертывание контейнеров Windows в Service Fabric

Azure Service Fabric — это платформа распределенных систем для развертывания масштабируемых надежных микрослужб и контейнеров и управления ими.

Чтобы запустить существующее приложение в контейнере Windows кластера Service Fabric, не требуется вносить изменения в приложение. В этом кратком руководстве показано, как развернуть готовый образ контейнера Docker в приложении Service Fabric. В итоге у вас будет рабочий Windows Server Core 2016 и контейнер для IIS. В этом кратком руководстве описывается развертывание контейнера Windows. Развертывание контейнера Linux описывается в этом кратком руководстве.

Страница служб IIS по умолчанию

Из этого краткого руководства вы узнаете, как выполнять следующие задачи:

  • упаковка контейнера образов Docker;
  • настройка обмена данными;
  • создание и упаковка приложений Service Fabric;
  • развертывание приложения-контейнера в Azure.

Примечание

Для взаимодействия с Azure рекомендуется использовать модуль Azure Az PowerShell. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Предварительные требования

Упаковка контейнера образов Docker с помощью Visual Studio

Пакет SDK и средства для Service Fabric предоставляют шаблон службы для развертывания контейнера в кластере Service Fabric.

Запустите Visual Studio от имени администратора. Выберите File>New>Project ( Файл > Создать > Проект).

Выберите Приложение Service Fabric, назовите его MyFirstContainer и щелкните Создать.

Выберите Контейнер в шаблонах размещенных контейнеров и приложений.

В поле Имя образа введите mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016. Это базовый образ Windows Server Core Server и IIS.

Настройте сопоставление порта контейнера с портом узла, чтобы входящие запросы к службе через порт 80 сопоставлялись с портом 80 в контейнере. Укажите порт контейнера (80) и узла (80).

Присвойте службе имя MyContainerService и нажмите кнопку ОК.

Диалоговое окно создания службы

Укажите сборку операционной системы для образа контейнера

Контейнеры, созданные с помощью одной версии Windows Server могут не работать на узле под управлением другой версии Windows Server. Например, созданные с помощью Windows Server версии 1709 контейнеры не работают на узлах под управлением Windows Server 2016. Дополнительные сведения см. в разделе ОС контейнера Windows Server и совместимость ОС узлов.

В версии 6.1 среды выполнения Service Fabric и более поздних можно указать несколько образов операционной системы на контейнер и отметить каждый из них, указав версию сборки операционной системы, для которой он будет развертываться. Это помогает обеспечить запуск приложения на узлах под управлением других версий ОС Windows. Дополнительные сведения см. в разделе Указание сборок ОС для образов контейнеров.

Корпорация Майкрософт публикует различные образы для версий IIS, встроенных в разных версиях Windows Server. Чтобы убедиться в том, что Service Fabric развертывает контейнер, совместимый с версией Windows Server на узлах кластера, где он развертывает приложение, добавьте следующие строки в файл ApplicationManifest.xml. Версия сборки для Windows Server 2016 — 14393, а версия сборки для Windows Server версии 1709 — 16299.

    <ContainerHostPolicies CodePackageRef="Code"> 
      <ImageOverrides> 
        ...
	      <Image Name="mcr.microsoft.com/windows/servercore/iis:windowsservercore-1803" /> 
          <Image Name= "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016" Os="14393" /> 
          <Image Name="mcr.microsoft.com/windows/servercore/iis:windowsservercore-1709" Os="16299" /> 
      </ImageOverrides> 
    </ContainerHostPolicies> 

Манифест служб продолжает указывать только один образ для наносервера, mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016.

Кроме того, в файле ApplicationManifest.xml измените значение параметра PasswordEncrypted на false. Учетная запись и пароль не указаны для образа общедоступного контейнера, находящегося в центре Docker, поэтому мы отключили возможность шифрования, так как шифрование пустого пароля приведет к возникновению ошибки сборки.

<RepositoryCredentials AccountName="" Password="" PasswordEncrypted="false" />

Создание кластера

В следующем примере сценария создается кластер Service Fabric из пяти узлов, защищенный с помощью сертификата X.509. Команда создает самозаверяющий сертификат и отправляет его в новое хранилище ключей. Сертификат также копируется в локальный каталог. Дополнительные сведения о создании кластера с помощью этого сценария см. в статье Создание кластера Service Fabric.

При необходимости установите Azure PowerShell с помощью инструкций, приведенных в руководстве по Azure PowerShell.

Прежде чем запустить следующий сценарий, в PowerShell выполните командлет Connect-AzAccount, чтобы создать подключение к Azure.

Скопируйте приведенный ниже сценарий в буфер обмена и откройте интегрированную среду сценариев Windows PowerShell. Вставьте содержимое в пустое окно Untitled1.ps1. Затем укажите значения для содержащихся в сценарии переменных: subscriptionId, certpwd, certfolder, adminuser, adminpwd и т. д. Указанный для certfolder каталог должен существовать до запуска сценария.

#Provide the subscription Id
$subscriptionId = 'yourSubscriptionId'

# Certificate variables.
$certpwd="Password#1234" | ConvertTo-SecureString -AsPlainText -Force
$certfolder="c:\mycertificates\"

# Variables for VM admin.
$adminuser="vmadmin"
$adminpwd="Password#1234" | ConvertTo-SecureString -AsPlainText -Force 

# Variables for common values
$clusterloc="SouthCentralUS"
$clustername = "mysfcluster"
$groupname="mysfclustergroup"       
$vmsku = "Standard_D2_v2"
$vaultname = "mykeyvault"
$subname="$clustername.$clusterloc.cloudapp.azure.com"

# Set the number of cluster nodes. Possible values: 1, 3-99
$clustersize=5 

# Set the context to the subscription Id where the cluster will be created
Select-AzSubscription -SubscriptionId $subscriptionId

# Create the Service Fabric cluster.
New-AzServiceFabricCluster -Name $clustername -ResourceGroupName $groupname -Location $clusterloc `
-ClusterSize $clustersize -VmUserName $adminuser -VmPassword $adminpwd -CertificateSubjectName $subname `
-CertificatePassword $certpwd -CertificateOutputFolder $certfolder `
-OS WindowsServer2016DatacenterwithContainers -VmSku $vmsku -KeyVaultName $vaultname

Предоставив значения для переменных, нажмите клавишу F5, чтобы запустить сценарий.

После выполнения сценария и создания кластера в выходных данных найдите значение ClusterEndpoint. Пример:

...
ClusterEndpoint : https://southcentralus.servicefabric.azure.com/runtime/clusters/b76e757d-0b97-4037-a184-9046a7c818c0

Установка сертификата для кластера

Теперь мы установим PFX-файл в хранилище сертификатов CurrentUser\My. PFX-файл будет расположен в каталоге, указанном с помощью переменной среды certfolder в приведенном выше сценарии PowerShell.

Перейдите в этот каталог, а затем выполните следующую команду PowerShell, подставив имя PFX-файла, который находится в каталоге certfolder, и пароль, указанный в переменной certpwd. В этом примере текущий каталог получает значение каталога, указанного в переменной certfolder в сценарии PowerShell. Из этого каталога выполняется команда Import-PfxCertificate:

PS C:\mycertificates> Import-PfxCertificate -FilePath .\mysfclustergroup20190130193456.pfx -CertStoreLocation Cert:\CurrentUser\My -Password (ConvertTo-SecureString Password#1234 -AsPlainText -Force)

Эта команда возвращает отпечаток:

  ...
  PSParentPath: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

Thumbprint                                Subject
----------                                -------
0AC30A2FA770BEF566226CFCF75A6515D73FC686  CN=mysfcluster.SouthCentralUS.cloudapp.azure.com

Запомните значение отпечатка для выполнения следующего шага.

Развертывание приложения в Azure с помощью Visual Studio

Теперь, когда приложение готово, можно развернуть его в кластер напрямую из Visual Studio.

Щелкните правой кнопкой мыши MyFirstContainer в обозревателе решений и выберите команду Опубликовать. Появится диалоговое окно "Опубликовать".

Скопируйте содержимое после CN= из результатов выполнения приведенной выше команды Import-PfxCertificate в окне PowerShell и добавьте к нему порт 19000. Например, mysfcluster.SouthCentralUS.cloudapp.azure.com:19000. Скопируйте его в поле Конечная точка подключения. Запомните это значение, так как оно понадобится при выполнении предстоящего шага.

Щелкните Расширенные параметры подключения и проверьте сведения о параметрах подключения. Значения FindValue и ServerCertThumbprint должны соответствовать отпечатку сертификата, установленного при выполнении командлета Import-PfxCertificate на предыдущем шаге.

Диалоговое окно

Нажмите кнопку Опубликовать.

Имя каждого приложения в кластере должно быть уникальным. В случае конфликта имен переименуйте проект Visual Studio и повторите развертывание.

Откройте браузер и перейдите по адресу, указанному в поле Конечная точка подключения на предыдущем шаге. При необходимости можно добавить в начало URL-адреса идентификатор схемы http:// и порт :80. Например http://mysfcluster.SouthCentralUS.cloudapp.azure.com:80..

Откроется веб-страница IIS по умолчанию: Веб-страница IIS по умолчанию

Очистка

Пока кластер работает, с вас будет взиматься плата. Рекомендуем удалить кластер.

Дальнейшие действия

В этом кратком руководстве рассматривались следующие темы:

  • упаковка контейнера образов Docker;
  • настройка обмена данными;
  • создание и упаковка приложений Service Fabric;
  • развертывание приложения-контейнера в Azure.

Дополнительные сведения о работе с контейнерами Windows в Service Fabric см. в руководстве для приложений-контейнеров Windows.