Как удалить виртуальную машину Vmware ESXI
Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов на просторах рунета Pyatilistnik.org. В прошлый раз мы с вами успешно определили причину медленной работы компьютера, который тормозил из-за компонента software reporter tool встроенного в Google. Двигаемся дальше и сегодня разберем ситуацию, когда вам необходимо удалить виртуальную машину на гипервизоре Vmware ESXI 6.5 и выше. Думаю это будет полезно для новичков, которые кроме графического метода могут быть не знакомы с другими.
Постановка задачи
В моей инфраструктуре есть система управления виртуализацией VMware vSphere 7 и кластер построенный на базе ESXI 6.5. Недавно я создавал новую отказоустойчивую терминальную ферму HA RDS на базе Windows Server 2016, состоящую из 50 виртуальных машин. RDS ферма работает без проблем и нареканий, поэтому старые виртуальные сервера от фермы на базе Windows Server 2012 R2 я могу смело удалять, но я хочу их удалить разными методами, чтобы напомнить что-то себе и научить чему-то вас.
Удаление виртуальной машины через vSphare или ESXI интерфейс
Данный метод по удалению виртуальной машины со всеми файлами является самым простым. Его суть заключается в том, что вы будите использовать веб-интерфейс вашего гипервизора. В vCenter переходите в раздел "Hosts and Clusters" и среди списка серверов находите нужный в моем примере, это будет виртуальная машина term82. Щелкаем по нему правым кликом мыши и из контекстного меню выберите пункт "Delete from disk"
- Delete from disk - Полностью удаляет всю виртуальную машину со всеми файлами с ваших датасторов, без возможности ее восстановления штатными средствами
- Remove from Inventory - Удаляет виртуальную машину из видимости "Hosts and Clusters", но сами файлы виртуальной машины будут все еще лежать на вашем датасторе, это используют например при переносе виртуальных машин между серверами vCenter, где файлы сервера просто добавляются в Inventory.
Вас еще раз предупредят, что файлы виртуального сервера будут уничтожены, вам нужно подтвердить действие.
То же самое вы можете выполнить и на самом веб-интерфейсе отдельного ESXI хоста. Находите нужную виртуальную машину и так же через контекстное меню вы выбираете пункт "Delete", это более понятная формулировка, чем в vSphere.
Тут так же нужно подтвердить свое действие по удалению.
Как удалить виртуальную машину через PowerCLI
Чем плохи графические методы, это отсутствием автоматизации и невозможностью массового удаления виртуальных машин. Предположим, что вам нужно бахнуть 50 серверов, сколько времени вы потратите на это и графики, а если вообще нужно выполнить удаленно. Поэтому вы должны использовать оболочку PowerCLI. Он устанавливается в систему отдельно, как это сделать я рассказывал вот тут.
Подключаемся к нашему vCenter серверу или ESXI хосту. Для этого введите в оболочке команду:
Далее есть такой командлет Get-VM, который может вам показать наличие нужных виртуальных машин. Мои виртуальные машины все называются term70-80. Зная это я могу вывести полный список.
Далее для удаления виртуальной машины есть командлет Remove-VM со своими ключами:
- VM - Задает виртуальные машины, которые вы хотите удалить.
- Confirm - Если значение равно $true, это означает, что командлет запрашивает подтверждение перед запуском. Если значение равно $false, командлет запускается без запроса подтверждения пользователя.
- DeletePermanently - Указывает, что вы хотите удалить виртуальные машины не только из инвентаря, но и из хранилища данных.
RunAsync - Указывает, что команда немедленно возвращается, не дожидаясь завершения задачи. В этом режиме выходом командлета является объект Task. Для получения дополнительных сведений о параметре RunAsync запустите «help About_RunAsync» в консоли VMware PowerCLI. - Server - Указывает сервер vCenter Server, на котором вы хотите запустить командлет. Если этому параметру не задано значение, команда выполняется на серверах по умолчанию.
- WhatIf - Указывает, что командлет запускается только для отображения изменений, которые будут внесены, и на самом деле никакие объекты не изменяются.
Давайте теперь для примера удалим виртуальную машину term79, для этого введите:
У вас появится подтверждение на удаление, говорим "Y".
Н на самом деле ваша виртуальная машина не удалена, а просто теперь не зарегистрирована на vCenter, об этом говорит задание "Unregister virtual machine".
Файлы сервера все также продолжают лежать на датасторе.
Давайте теперь используем ключ -DeletePermanently, это позволит полностью с датасторов удалить виртуальный сервер.
У вас выскочит подтверждение ваших действия, если нажмете "Y", то файлы VM будут полностью удалены.
Если не хотите видеть подтверждения, то воспользуемся ключом -Confirm:$false
В веб интерфейсе вы увидите задание по удалению сервера.
Как массово удалить виртуальную машину через PowerCLI
После знакомства с командлетами нужно научиться автоматизировать наши задания и посмотреть, как сделать все то же самое, но с большим количеством серверов. Тут есть несколько простых конструкций. Создадим переменную с двумя серверами:
Удостоверимся, что в нее попадают наши два виртуальных сервера и произведем удаление $VMs.
Как видим при удалении переменной $VMs, у нас идет запрос на удаление двух виртуальных серверов, term72 и term73.
То же самое можно сделать имя файл со списком серверов, который так же помещается в переменную. Вам нужно заранее подготовить обычный txt файл, где каждый сервер будет находится на новой строке. Далее есть такой командлет Get-Content. Пишем:
Проверяем, что в переменную $VMs попали сервера из файла.
Далее выполняем команду по удалению виртуалок.
После выполнения команды, если вывести запрос по поиску всех серверов с именем term*, то мы ничего не обнаруживаем.
Если в этот момент посмотреть vCenter, то тут вы увидите массовые задания по удалению.
Так же я могу с вами поделиться полезным скриптом, который проверяет статус виртуальной машины, если она работает, то идет выключение, а уже потом удаление.
$VMs = (Get-Content servers.txt)
$vmObj = Get-vm $vms
# Проверяем статус виртуальных машин, если что то выключаем их
foreach($active in $vmObj){
if($active.PowerState -eq "PoweredOn"){
Stop-VM -VM $active -Confirm:$false -RunAsync | Out-Null}
}
Start-Sleep -Seconds 7
# Производим удаление виртуальных машин
foreach($delete in $vmObj){
Remove-VM -VM $delete -DeleteFromDisk -Confirm:$false -RunAsync | Out-Null}
На этом у меня все, мы разобрали разные методы удаления виртуальных машин. Если, что-то не понятно, то жду вас в комментариях. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.