Краткое руководство. Развертывание контейнеров Windows в Service Fabric
Azure Service Fabric — это платформа распределенных систем для развертывания масштабируемых надежных микрослужб и контейнеров и управления ими.
Чтобы запустить существующее приложение в контейнере Windows кластера Service Fabric, не требуется вносить изменения в приложение. В этом кратком руководстве показано, как развернуть готовый образ контейнера Docker в приложении Service Fabric. В итоге у вас будет рабочий Windows Server Core 2016 и контейнер для IIS. В этом кратком руководстве описывается развертывание контейнера Windows. Развертывание контейнера Linux описывается в этом кратком руководстве.
Из этого краткого руководства вы узнаете, как выполнять следующие задачи:
- упаковка контейнера образов Docker;
- настройка обмена данными;
- создание и упаковка приложений Service Fabric;
- развертывание приложения-контейнера в Azure.
Примечание.
Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.
Необходимые компоненты
- Подписка Azure. Вы можете создать бесплатную учетную запись.
- Компьютер разработки:
- Visual Studio 2019 или Windows 2019.
- Пакет SDK и средства для Service Fabric.
Упаковка контейнера образов 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 по умолчанию:
Очистка
Пока кластер работает, с вас будет взиматься плата. Рекомендуем удалить кластер.
Следующие шаги
Из этого руководства вы узнали, как выполнить следующие действия:
- упаковка контейнера образов Docker;
- настройка обмена данными;
- создание и упаковка приложений Service Fabric;
- развертывание приложения-контейнера в Azure.
Дополнительные сведения о работе с контейнерами Windows в Service Fabric см. в руководстве для приложений-контейнеров Windows.