Быстрый старт: Развертывание контейнеров Windows в Service Fabric

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

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

Веб-страница iis по умолчанию

Из этого краткого руководства вы узнаете, как:

  • Упаковка контейнера образов Docker
  • Настройка связи
  • Создание и упаковка приложения Service Fabric
  • Развертывание приложения контейнера в Azure

Note

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

Prerequisites

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

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

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

Выберите приложение 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 и ОС узла.

В среде выполнения Service Fabric версии 6.1 и более поздних версий можно указать несколько образов ОС для каждого контейнера и пометить каждый из них с версией сборки ОС, в которую она должна быть развернута. Это помогает убедиться, что приложение будет работать на разных узлах под управлением различных версий ОС 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> 

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

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

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

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

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

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

Перед выполнением следующего скрипта в PowerShell выполните команду Connect-AzAccount для создания подключения к Azure.

Скопируйте следующий скрипт в буфер обмена и откройте isE Windows PowerShell. Вставьте содержимое в пустое окно Untitled1.ps1. Затем укажите значения переменных в скрипте: subscriptionId, certpwd, certfolder, , adminuseradminpwdи т. д. Указанный каталог 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= в окне PowerShell при выполнении приведенной Import-PfxCertificate выше команды и добавьте в него порт 19000 . Например: mysfcluster.SouthCentralUS.cloudapp.azure.com:19000. Скопируйте его в поле конечной точки подключения . Помните это значение, так как вам потребуется в следующем шаге.

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

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

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

Вы увидите веб-страницу IIS по умолчанию

Очистка

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

Дальнейшие шаги

В этом кратком руководстве вы узнали, как выполнить следующие действия:

  • Упаковка контейнера образов Docker
  • Настройка связи
  • Создание и упаковка приложения Service Fabric
  • Развертывание приложения контейнера в Azure

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