Windows-контейнеры на Red Hat OpenShift

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Windows-контейнеры на Red Hat OpenShift

В конце прошлого года Red Hat OpenShift получила общедоступную версию функционала Windows Container Support, позволяющего включать в состав кластера OpenShift Container Platform узлы Windows Compute Node, чтобы запускать на них рабочие нагрузки в виде Windows-контейнеров и управлять этими контейнерами точно так же, как и Linux-контейнерами. Сегодня расскажем об этом чуть подробнее.

(Очень) краткая история Windows-контейнеров

В 2016 году Microsoft решила разработать свой контейнерный движок, реализующий спецификацию Docker, чтобы Windows-контейнеры можно было запускать с помощью привычных инструментов, например, так:

docker run -it microsoft/windowsservercore cmd

В итоге, Microsoft создала две реализации Windows-контейнеров:

  1. Процесс-контейнеры (они же Windows Server Containers, WSC);

  2. Контейнеры Hyper-V.

Разница между ними хорошо описывается, например, в здесь (EN) или в документации Microsoft.

Обратите внимание, что в этом посте мы говорим только о контейнерах WSC. Высокоуровневая архитектура Windows Containers выглядит следующим образом:

Ограничения Windows-контейнеров

  1. Размер Windows-образа – по сравнению с Linux, он гораздо больше. Впрочем, размер можно уменьшить за счет использования урезанного серверного ядра Nano вместо Windows Server Core, но тогда вы лишаетесь и ряда возможностей, например, вместо PowerShell придется довольствоваться PowerShell Core на основе .NET Core.

  2. GUI-приложения – многие Windows-приложения пишутся в расчете на UI, но в рамках контейнеризации эта парадигма не поддерживается.

  3. Ограничения по выбору версий Windows Server. Windows-контейнеры без проблем могут совместно использовать ядро Windows, но вам не удастся полностью изолировать приложение от системных служб и DLL. Поэтому при запуске контейнерных нагрузок вы ограничены той версией, что стоит на нижележащем Windows-узле. Для Linux-контейнеров такого ограничения нет.

Зачем нужна контейнеризация традиционных Windows-приложений 

Возможность ускорить переход на публичные и гибридные облака. Windows Server занимает существенную долю на рынке серверных ОС, а C# является одним из шести ведущих языков программирования. Контейнеры позволяют значительно ускорить перевод приложений Windows Server в публичное облако.

Сокращение расходов на инфраструктуру и управление Windows-приложениями. Зачем развертывать полноценную виртуальную машину (ВМ) для Microsoft SQL или сервера IIS, если можно обойтись небольшими и легковесными контейнерами? Контейнеры не только позволяют разместить больше нагрузок на одном сервере, но и могут легко перемещаться в средах bare metal, а также в публичных, частных и гибридных облаках, включая мультиоблачные среды.

Больше переносимости, agility и управляемости для Windows-приложений. Благодаря лучшей ресурсоемкости и переносимости контейнеры – это очень привлекательный способ упаковки и доставки приложений. Вместо того, чтобы создавать для каждого приложения отдельную ВМ и создавать в ней весь стек ПО, включая ОС, Windows-контейнеры нескольких приложений можно «повесить» на один и тот же экземпляр Windows. При таком подходе приложения можно создавать в Visual Studio или Visual Studio Code, контейнеризировать и затем запускать везде: в средах OpenShift on premises, а также на платформе OpenShift в облаке Azure или AWS.

Сценарии использования Windows-нагрузок на платформе OpenShift

Следуя 5R-подходу к миграции приложений в облако (Rehost, Refactor, Revise, Rebuild и Replace), сформулированному компанией Gartner, можно выделить следующие сценарии использования Windows-нагрузок на платформе OpenShift:

Этап 5R

Задействуемые функции OpenShift

Сценарий использования

Преимущества

Недостатки

Rehost

OpenShift Virtualization

Перенос ВМ Windows в OpenShift

Самый простой путь, вызывает наименьшее сопротивление

Дает минимум преимуществ контейнеризации

Refactor

Windows Machine Config Operator 

Контейнеризация традиционных приложений .Net framework на Windows Server Containers с последующим развертыванием на узлах Windows Worker Node в OpenShift 

Многие, но не все выгоды контейнеризации и OpenShift

Экосистема Windows-контейнеров поддерживается только на Windows Server 2019 и выше

Rearchitect

Контейнеры RHEL/Red Hat CoreOS

Миграция традиционных приложений.Net framework на to .Net Core с последующим развертыванием на RHEL-контейнерах в OpenShift 

Все выгоды контейнеризации и OpenShift, а также плюсы быстро развивающегося сообщества

Длительный и трудоемкий способ миграции

Rebuild

Контейнеры RHEL/Red Hat CoreOS

Создание изначально облачных приложений на базе Linux-контейнеров с последующим развертыванием на RHEL-контейнерах в OpenShift

Все выгоды контейнеризации и OpenShift, а также плюсы быстро развивающегося сообщества

Разработка приложений с нуля подходит далеко не всем, поскольку многие лишь эксплуатируют готовое ПО

 

Что такое Windows Machine Config Operator (WMCO)

Оператор WMCO – это отправная точка для запуска рабочих нагрузок Windows в кластере OpenShift. Именно он позволяет администратору кластера добавлять в кластер узлы Windows worker node и активировать диспетчеризацию (scheduling) Windows-нагрузок. Для WMCO требуется OpenShift 4.6 и выше с настроенной гибридной сетью OVN Kubernetes.

Платформы, поддерживаемые WMCO

Платформа

Уже поддерживается

Скоро будет

Red Hat OpenShift Container Platform (OCP) on Azure

Да

 

OCP on AWS

Да

 

OCP on vSphere

Да (со 2го марта)

 

OCP on Bare metal

Нет

Да

OCP on Red Hat Virtualization

Нет

Да

OCP on Red Hat OpenStack Platform

Нет

Да

Управляемые сервисы OpenShift (Azure Red Hat OpenShift, OpenShift Dedicated итд)

Нет

Да

Операционные системы, которые могут использоваться в качестве Windows Worker Node

Первоначальный релиз WMCO поддерживает Windows Server Long-Term Servicing Channel (LTSC): Windows Server 2019 (версия 10.0.17763.1457 и выше).

Как устроена работа с Windows-нагрузками

Для запуска Windows-нагрузок в кластере OpenShift сначала надо проинсталлировать WMCO, который представляет собой Linux-оператор, работающий на Linux-узлах Control Plane и Compute, и оркестрирующий процессы развертывания и управления Windows-нагрузками в кластере.

Затем надо присоединить к кластеру узел Windows Compute Node, на котором и будут хоститься Windows-нагрузки. Windows Compute Node создается путем создания набора MachineSet для машин Windows Server. К этому набору надо применить специальную метку (label) с указанием образа ОС Windows с установленной средой выполнения Docker-контейнеров (Kubernetes отказался от Docker как среды выполнения и в будущих версиях Kubernetes для Windows-узлов будет использоваться Containerd).

WMCO следит за машинами с Windows-меткой и как только будет создан набор Windows MachineSet и появятся указанные в нем машины, WMCO сконфигурирует нижележащую ВМ Windows, чтобы ее можно было присоединить к кластеру в качестве Compute Node.

WMCO рассчитывает, что в его пространстве имен есть некий заранее заданный секрет с закрытым ключом для взаимодействия с экземпляром Windows. WMCO проверяет этот секрет при загрузке и создает объект user data secret, на который должен ссылаться созданный вами Windows MachineSet. Затем WMCO заполняет user data secret открытым ключом, который соответствует закрытому ключу. Имея эти данные, кластер может подключаться к ВМ Windows по SSH.

После того, как кластер установит соединение с ВМ, Windows-узлом можно управлять точно так же, как и узлами Linux, а диспетчеризация Windows-нагрузок ведется аналогично, через taints, tolerations и node selectors. Для разграничения контейнерных нагрузок Windows и Linux, а также Windows-нагрузок на различных версиях Windows надо использовать объекты RuntimeClass.

Подробнее про установку и настройку WMCO, работу с Windows-контейнерами на различных платформах, а также про обновление WMCO можно прочитать в документации.

Логи Windows-контейнеров

Возможность просмотра логов важна как для отладки, так и в целях безопасности, например, для того, чтобы отследить вредоносные события или утечки секретов. Для Windows-контейнеров Windows в OpenShift доступные следующие логи:

● C:\var\log\kube-proxy\kube-proxy.exe.INFO

● C:\var\log\kube-proxy\kube-proxy.exe.ERROR

● C:\var\log\kube-proxy\kube-proxy.exe.WARNING

● C:\var\log\hybrid-overlay\hybrid-overlay.log

● C:\var\log\kubelet\kubelet.log

● %APPDATA%\Local\Docker\log.txt

Просматривать логи кластера OpenShift Container Platform для Windows-pod’ов можно из командной строки: 

$ oc logs -f windows-pod-name -n openshift-windows

С помощью инструмента must-gather можно собирать следующие логи:

Просмотр логов для Windows-pod’ов из веб-консоли OpenShift Container Platform пока не поддерживается.

Источник: https://habr.com/ru/company/redhatrussia/blog/545484/


Интересные статьи

Интересные статьи

В первой части статьи про OpenShift Egress мы рассмотрели варианты организации фиксированных исходящих IP-адресов для POD в кластере. Но что делать, если надо предоставить доступ во внешн...
Многие компании в определенный момент приходят к тому, что ряд процессов в бизнесе нужно автоматизировать, чтобы не потерять свое место под солнцем и своих заказчиков. Поэтому все...
Эта публикация написана после неоднократных обращений как клиентов, так и (к горести моей) партнеров. Темы обращений были разные, но причиной в итоге оказывался один и тот же сценарий, реализу...
Довольно часто владельцы сайтов просят поставить на свои проекты индикаторы курсов валют и их динамику. Можно воспользоваться готовыми информерами, но они не всегда позволяют должным образом настроить...
Реализация ORM в ядре D7 — очередная интересная, перспективная, но как обычно плохо документированная разработка от 1с-Битрикс :) Призвана она абстрагировать разработчика от механики работы с табл...