Пулы ресурсов Hyper-V в Windows Server 2012: Практика

Продолжим рассматривать работу пулов ресурсов Hyper-V в Windows Server 2012. В статье [[Пулы ресурсов Hyper-V в Windows Server 2012: Теория]] обсуждалась терминология и единицы измерения для ключевых типов пулов. Сейчас речь пойдет о том, как следует производить измерение потребляемых ресурсов.

Два типа измерения потребляемых ресурсов

В Windows Server 2012 Hyper-V есть два способа сбора информации о потребляемых ресурсах.
В простейшем способе я могу настроить измерение ресурсов, потребляемых любой конкретной виртуальной машиной, выполнив командлет Measure-VM. При этом не нужно создавать никаких пулов ресурсов, не принципиально в каких пулах состоят те или иные ресурсы данной ВМ. Будет просто собираться информация обо всех используемых данной машиной ресурсах и предоставляться в виде таблицы.
Если же стоит более интересная задача отслеживания используемых ресурсов для конкретного заказчика, который использует несколько виртуальных машин, то можно создать уникальные пулы ресурсов для данного заказчика, привязать ресурсы его виртуальных машин к данным пулам, включить измерение ресурсов для данных пулов, включить измерение для нужных виртуальных машин, и получать результирующую информацию в виде суммы по каждому типу ресурса в рамках заданного пула.
Давайте немного более подробно рассмотрим оба подхода. Для первого случая для начала проверим состояние своих пулов ресурсов при помощи командлета Get-VMResourcePool. Затем я включу измерение для машины VM1 командлетом Measure-VM и опять проверю состояние пулов ресурсов. Обратим внимание на то, что корневые пулы, которые присутствуют на любом сервере, по умолчанию не производят измерений, но после того, как хотя бы одна машина начинает измерять потребляемые ресурсы, корневые пулы переходят в состояние ResourceMeteringEnabled. 
Теперь рассмотрим ситуацию, когда у нас есть два заказчика, и у каждого из них есть несколько виртуальных машин. Потребуется создавать ресурсные пулы для данных заказчиков для каждого типа ресурсов, которые мы собираемся тарифицировать, а также привязывать ресурсы машин этих заказчиков к данным пулам и включать измерение для машин и пулов.

http://virtualization.su/img/Resource_pools_03.png

Пулы ресурсов для процессора.

При помощи командлета New-VMResourcePool создадим два дочерних пула vCPUTenant1 и vCPUTenant2 для измерения процессорных ресурсов виртуальных машин обоих заказчиков. Для всех машин первого заказчика привяжем процессорное время машин к пулу vCPUTenant1 при помощи кмдлета Set-VMProcessor, а для машин второго заказчика укажем пул vCPUTenant2.
Посмотрим, к каким пулам теперь принадлежат процессорные ресурсы наших машин при помощи Get-VMProcessor.

http://virtualization.su/img/Resource_pools_02.png

Пулы ресурсов для памяти

Аналогично создадим пулы ресурсов памяти MemoryTenant1 и MemoryTenant2 для наших заказчиков, и привяжем ресурсы памяти их машин к соответствующим пулам.

http://virtualization.su/img/Resource_pools_04.png

Пулы ресурсов виртуальных жестких дисков

С пулами ресурсов для VHD/VHDX дисков будет несколько интереснее. Дело в том, что если ресурсы процессора и памяти от заказчика к заказчику особо не отличаются – те же мегагерцы или мегабайты, суммируй и выставляй счета, то для дисков ситуация может быть другой. Действительно, дисковые ресурсы бывают разные – какие-то быстрые и надежные LUN стоят дорого, какие-то медленные или не настолько надежные стоят дешевле. Соответственно, мы можем захотеть создавать различные ресурсные пулы для разных LUNов одного заказчика, чтобы тарифицировать их по разному. В моем примере я этого делать не буду, но обращаю ваше внимание на то, что пул привязан к пути размещения дисков, и каждый такой путь можно тарифицировать по разному. Обратите внимание, в примере ниже параметр указывающий пути размещения дан во множественном числе «Paths», он позволяет указывать несколько дисков в один пул ресурсов, перечисляя их через запятую, каждый из путей указывается, в таком случае, в двойных кавычках.

http://virtualization.su/img/Resource_pools_05.png

Что более интересно, после создания дочерних пулов дисковых ресурсов, можно присваивать ресурсы виртуальных машин к данным пулам не только из PowerShell, но и из консоли Hyper-V Manager.

http://virtualization.su/img/Resource_pools_09.png

Пулы ресурсов сетевых адаптеров

Для работы с сетью настроек еще больше чем для дисков. Как я уже отмечалось во вводной статье, можно создавать разные пулы для разных виртуальных коммутаторов, и, более того, по разному тарифицировать трафик в различные подсети, разделяя трафик на входящий и исходящий. В примере ниже создается два пула LanTenant1 и LanTenant2, в оба пула добавляется коммутатор Public, привязываются интерфейсы машин к соответствующему пулу и предлагается автоматически выбирать доступный коммутатор. При необходимости можно явно задать имя коммутатора в пределах пула, если тот включает сразу несколько коммутаторов.

http://virtualization.su/img/Resource_pools_10.png

Именно использование имени пула с автоматическим выбором коммутаторов позволяет мне выбрать корневой Root пул с автоматически заполняемым именем коммутатора и не заботиться о том, как называется виртуальный коммутатор на узле. Выбор сетевых ресурсных пулов также доступен из Hyper-V Manager после создания первого дочернего сетевого пула.

http://virtualization.su/img/Resource_pools_11.png

Получение результатов и сброс статистики

Для того, чтобы посмотреть всю статистику по конкретной измеряемой виртуальной машине следует воспользоваться командлетом Measure-VM. Для запроса информации из ресурсного пула заказчика по сумме потребленных ресурсов конкретного типа для всех его машин, командлетом Get-VMResourcePool. Если вы эту информацию используете не только для анализа, но для тарификации, то после выставления счета следует сбросить счетчики для каждой машины при помощи Reset-VMResourceMetering.