Часть 1 «Как конфигурировать Storage DRS кластеры с PowerCLI – Часть 1» находится здесь. Часть 3 «Как конфигурировать SDRS Anti-Affinity правила с PowerCLI – Часть 3» и может быть даже Часть 4 «Как просмотреть историю операций SDRS кластеров с PowerCLI – Часть 4» ожидаются в ближайшем будущем. Следите за новыми публикациями!
Эта статья расскажет о 4 новых функциях: Add-SdrsAntiAffinityRule, Remove-SdrsAntiAffinityRule, Get-SdrsAntiAffinityRule и Invoke-SdrsRecommendation из моего PowerCLI Vi-Module модуля.
Add-SdrsAntiAffinityRule
Как вы помните, anti-affinity правила бывают двух типов: VMDK или Intra-VM и VM или Inter-VM. Функция позволяет создавать оба типа правил.
VMDK anti-affinity правила
Давайте возьмём наш SDRS кластер и посмотрим на его текущую конфигурацию. Имеет смысл создавать Intra-VM правила только если свойство DefaultIntraVmAffinity кластера имеет значение KeepTogether.
PS C:\> Get-DatastoreCluster DEV | Get-SdrsCluster
PS C:\> Get-DatastoreCluster DEV | Get-SdrsAntiAffinityRule
Сейчас давайте возьмём ВМ, у которой есть более одного диска. Мы должны видеть, что все её диски до создания правила находятся на одном Датасторе (свойство Filename).
PS C:\> Get-VM vm1 | Get-HardDisk
Мы не будем использовать параметр –Harddisk, т.к. мы собираемся добавить все диски ВМ в наше правило! Также мы используем параметр -Enabled для активации правила. Опциональный параметр -Apply сразу после создания правила активирует SDRS рекомендации.
Подождите, пока не окончатся 2 задачи: «Configure Storage DRS» и «Execute Storage vMotion for Storage DRS» и снова проверьте вашу ВМ. С этого момента диски этой ВМ никогда не встретятся на одном Датасторе (если это, конечно, возможно).
PS C:\> Get-VM vm1 | Get-HardDisk
Учтите, что параметр -Apply активирует рекомендации, не относящиеся к конкретному правилу, а ко всему SDRS кластеру! Советую использовать его в не рабочее время в производственных средах.
VM anti-affinity rules
Для создания Inter-VM anti-affinity правила достаточно передать минимум 2 ВМ в параметре -VMGroup. Допустим у вас есть 10 ВМ, имеющих имена от «vm100» до «vm109», и вы хотите распределить их между Датасторами SDRS кластера (естественно, если ваш кластер содержит достаточное количество Датасторов для этого).
Возвращаемые объекты содержат те же свойства для обоих типов правил, но для Inter-VM правил свойство HardDisks всегда будет пустым, т.к. не имеет смысла.
Вся основная логика для функции Add-SdrsAntiAffinityRule позаимствована из функции Set-SdrsAntiAffinity, написанной известным PowerCLI гуру Люком Декенсом (Luc Dekens). Я лишь сделал некоторые изменения для своих нужд и улучшения (на мой взгляд).
Remove-SdrsAntiAffinityRule
Вы решили удалить правило/правила, которые вам больше не нужны. Просто передайте их через pipeline от Get-SdrsAntiAffinityRule к Remove-SdrsAntiAffinityRule и подтвердите, какие из них удалить.
Подтверждение будет запрошено отдельно на каждое правило, если только вы не использовали параметр -Confirm:$false. Существует возможность без подтверждения удалить все правила в каком-либо SDRS кластере или даже во всех кластерах в Inventory! Пожалуйста, используйте параметр -Confirm очень аккуратно. Лучше десять раз нажать Enter, подтверждая удаление, чем безвозвратно что-нибудь стереть. По умолчанию этот параметр равен $true, т.е. всегда запрашивать подтверждение.
Функция возвращает дату последнего действия (свойство LastAction), совершённого SDRS планировщиком до того, как применить текущие рекомендации (свойство Refreshed) и, конечно же имя самого кластера (DatastoreCluster).
Подведём итог
Обе функции, и Add-SdrsAntiAffinityRule и Remove-SdrsAntiAffinityRule используют 2 вспомогательные функции: Get-SdrsAntiAffinityRule и Start-SleepProgress, включённые в модуль. Функция Start-SleepProgress ждёт 10 секунд перед тем, как вызвать Get-SdrsAntiAffinityRule.
Функция Get-SdrsAntiAffinityRule очень проста в использовании, и я не буду описывать её в статье, я просто приведу несколько примеров с ней.
Чуть не забыл, все SDRS функции, а значит и весь Vi-Module модуль, теперь (начиная с версии 1.3) требуют PowerShell минимум версии 5.0, так что, кто ещё этого не сделал, срочно обновляйтесь.
Проверить текущую версию PowerShell и Vi-Module модуля можно следующими командами.