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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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