Некоторое время назад мы писали о том, как делать резервное копирование и восстановление базы данных сервера vCenter Server и виртуального модуля vCenter Server Appliance (vCSA). А сегодня мы поговорим о том, как сделать бэкап всей виртуальной машины vCSA с помощью средств PowerCLI.
Для начала напомним, что простейший способ бэкапить сервер vCSA - это сделать его резервную копию в графическом интерфейсе на вкладке Summary:
Но если вам нужно резервное копирование и восстановление с помощью сценариев PowerCLI, то для этого можно использовать функцию Backup-VCSAToFile, о которой Brian Graf рассказывал вот тут. Бэкап может проводиться в следующие хранилища назначения:
FTP
FTPS
HTTP
HTTPS
SCP
Для управления процессом резервного копирования можно использовать следующие функции:
Backup-VCSAToFile
Get-VCSABackupJobs
Get-VCSABackupStatus
Отрабатывает Backup-VCSAToFile следующим образом:
Некто Magnus Andersson на базе функции Backup-VCSAToFile создал вот такой скрипт попроще, который позволяет забэкапить сервер vCSA, задав в заголовке сценария несколько параметров:
Сервер бэкапов и директория
Имя пользователя и пароль на хранилище назначения
Тип бэкапа - Fullbackup (полный) или Seatbackup (только конфигурация vCSA)
Пароль к файлу бэкапа, который понадобится при восстановлении
Тип хранилища бэкапа
Комментарий
Пользоваться скриптом просто, вот он:
# Script to backup vCenter Server Appliance
# Author: Magnus Andersson - Sr Staff Solutions Engineer @Nutanix
# Version 1.0
# Created 2017-11-15
# Kudos to Brian Graf for creating the Backup-VCSAToFile function, used in this script, which can be found here Backup-VCSAToFile Function Created By Brian Graf - https://www.brianjgraf.com/2016/11/18/vsphere-6-5-automate-vcsa-backup/
#
#--------------------------------------------
# User Defined Variables Sections Starts Here
#
# Specify vCenter Server, vCenter Server User name and vCenter Server Password
$vcsa="vcsa01.vcdx56.local"
$vcsauser="vcsabkpuser@vsphere.local"
$vcsapasswd="TopSecret76!"
#
# Backup location
$bkpserver="10.10.100.199/vcsabackups/"
$bkpdir=get-date -uformat %Y-%m-%d
$bkpLocation=$bkpserver+$bkpdir
#
# Specify backup location user and password
$LocationUser="ftps-user"
$LocationPasswd="TopSecret67!"
#
# Specify backup type where Fullbackup is 1 and Seatbackup is 2
$BackupType=2
#
# Specify backup password - needed when performing restore
$bkpPassword="TopSecret68!"
#
# Specify backup localtion type where you must specify HTTP, HTTPS, SCP, FTP or FTPS
$LocationType="FTPS"
#
# Specify Backup Comment
$Comment="vCenter Server Appliance vcsa01.vcdx56.local backup"
#
# User Defined Variables Sections Ends Here
#--------------------------------------------
#
# Import Module VMware.VimAutomation.Cis.Core
Import-module VMware.VimAutomation.Cis.Core
#
# #--------------------------------------------
# Import Backup-VCSAToFile Function
Function Backup-VCSAToFile {
param (
[Parameter(ParameterSetName=’FullBackup’)]
[switch]$FullBackup,
[Parameter(ParameterSetName=’SeatBackup’)]
[switch]$SeatBackup,
[ValidateSet('FTPS', 'HTTP', 'SCP', 'HTTPS', 'FTP')]
$LocationType = "FTP",
$Location,
$LocationUser,
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$LocationPassword,
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$BackupPassword,
$Comment = "Backup job",
[switch]$ShowProgress
)
Begin {
if (!($global:DefaultCisServers)){
[System.Windows.Forms.MessageBox]::Show("It appears you have not created a connection to the CisServer. You will now be prompted to enter your vCenter credentials to continue" , "Connect to CisServer") | out-null
$Connection = Connect-CisServer $global:DefaultVIServer
} else {
$Connection = $global:DefaultCisServers
}
if ($FullBackup) {$parts = @("common","seat")}
if ($SeatBackup) {$parts = @("seat")}
}
Process{
$BackupAPI = Get-CisService com.vmware.appliance.recovery.backup.job
$CreateSpec = $BackupAPI.Help.create.piece.CreateExample()
$CreateSpec.parts = $parts
$CreateSpec.backup_password = $BackupPassword
$CreateSpec.location_type = $LocationType
$CreateSpec.location = $Location
$CreateSpec.location_user = $LocationUser
$CreateSpec.location_password = $LocationPassword
$CreateSpec.comment = $Comment
try {
$BackupJob = $BackupAPI.create($CreateSpec)
}
catch {
Write-Error $Error[0].exception.Message
}
If ($ShowProgress){
do {
$BackupAPI.get("$($BackupJob.ID)") | select id, progress, state
$progress = ($BackupAPI.get("$($BackupJob.ID)").progress)
Write-Progress -Activity "Backing up VCSA" -Status $BackupAPI.get("$($BackupJob.ID)").state -PercentComplete ($BackupAPI.get("$($BackupJob.ID)").progress) -CurrentOperation "$progress% Complete"
start-sleep -seconds 5
} until ($BackupAPI.get("$($BackupJob.ID)").progress -eq 100 -or $BackupAPI.get("$($BackupJob.ID)").state -ne "INPROGRESS")
$BackupAPI.get("$($BackupJob.ID)") | select id, progress, state
}
Else {
$BackupJob | select id, progress, state
}
}
End {}
}
#
#--------------------------------------------
# Create passwords
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$BackupPassword=$bkpPassword
[VMware.VimAutomation.Cis.Core.Types.V1.Secret]$LocationPassword=$LocationPasswd
#
# Connect to vCenter Server Appliance
Connect-CisServer -Server $vcsa -User $vcsauser -Password $vcsapasswd
#
# Start the backup
If ($BackupType -eq 1) {
Backup-VCSAToFile -BackupPassword $BackupPassword -LocationType $LocationType -Location $bkpLocation -LocationUser $LocationUser -LocationPassword $locationPassword -Comment $Comment -Fulbackup ShowProgress
}
Else {
Backup-VCSAToFile -BackupPassword $BackupPassword -LocationType $LocationType -Location $bkpLocation -LocationUser $LocationUser -LocationPassword $locationPassword -Comment $Comment -Seatbackup -ShowProgress
}
#
# Disconnect from vCenter Server Appliance
disconnect-CisServer $vcsa -confirm:$false
#
Надо сказать, что для скрипта нужно использовать пользователя, определенного на уровне SSO, так как если вы возьмете пользователя из AD, но с правами группы SSO Administrators - сценарий все равно работать не будет.
Скачать сценарий можно с репозитория на GitHub по этой ссылке.
Восстановить бэкап vCSA можно через vCenter Server Appliance Installer, выбрав опцию Restore:
Allan Kjaer написал интересный скрипт PowerCLI, который позволит определить, какие логические тома Windows находятся в виртуальных дисках VMDK машин на платформе vSphere. Как-то я сталкивался с такой проблемой, поэтому может быть она не такая уж и редкая.
Скрипт соединяется с управляющим сервером VMware vCenter, запрашивает учетные данные к гостевой ОС Windows, после чего строит отчет о том, на каких дисках VMDK какие разделы были обнаружены. Отчет включает в себя индекс диска Windows, букву диска и метку тома.
Вот так он выглядит:
"vmName vmHardDiskDatastore vmHardDiskVmdk vmHardDiskName windowsDiskIndex windowsDiskSerialNumber vmHardDiskUuid windowsDeviceID drives volumes
------ ------------------- -------------- -------------- ---------------- ----------------------- -------------- --------------- ------ -------
test-vm FC01 test-vm/test-vm.vmdk Hard disk 1 0 6000c29c481f32e9763fe6d2d8dc8f7b 6000C29c481f32e9763fe6d2d8dc8f7b \\.\PHYSICALDRIVE0 C:
test-vm FC01 test-vm/test-vm_1.vmdk Hard disk 2 1 6000c297d1a7352ed5ee1b870023f57d 6000C297d1a7352ed5ee1b870023f57d \\.\PHYSICALDRIVE1 D: Data
test-vm FC03 test-vm/test-vm.vmdk Hard disk 3 2 6000c290e36c2f3b641a56308551e998 6000C290e36c2f3b641a56308551e998 \\.\PHYSICALDRIVE2 {E:, F:} {New Volume, New Volume}
Скрипт не особо тестировался, поэтому запуская его, предварительно смотрите по коду, что именно он делает и как. Посмотреть данный PowerCLI-сценарий можно по этой ссылке.
Рано или поздно каждый администратор приходит к тому, что ему необходимо каким-то образом сохранить, а потом и извлечь учётные данные. Причём это должно быть быстро, эффективно, удобно и самое главное безопасно. Ни один из известных мне способов не отвечал всем этим требованиям одновременно. Я стал искать и нашел свой способ, которым и хочу поделиться с вами. Это PowerCLI! Удивлены? Порой самое простое решение лежит на поверхности.
Как часто вам приходится увеличивать логические диски внутри гостевых ОС ВМ? Довольно часто, не так ли? Вам надо сначала найти вашу ВМ в vSphere Client, потом кликнуть Edit Settings и перво-наперво увеличить виртуальный диск ВМ. После вы должны будете открыть RDP к вашей ВМ, затем открыть Disk Management, выбрать Rescan Disks из контекстного меню и только после этого ещё один правый клик на нужном вам логическом диске и вот сейчас выбрать Extend Volume...
Это Часть 3 в серии о Storage DRS. В предыдущей части мы говорили о том как создавать и удалять SDRS Anti-Affinity правила. Чтобы закрыть тему, нам осталось редактировать/реконфигурировать существующие правила. Логично предположить, что это будет функция Set-SdrsAntiAffinityRule.
Это Часть 2 в серии о Storage DRS. Часть 1 «Как конфигурировать Storage DRS кластеры с PowerCLI – Часть 1» находится здесь. Часть 3 «Как конфигурировать SDRS Anti-Affinity правила с PowerCLI – Часть 3» и может быть даже Часть 4 «Как просмотреть историю операций SDRS кластеров с PowerCLI – Часть 4» ожидаются в ближайшем будущем. Следите за новыми публикациями! Эта статья расскажет о 4 новых функциях...
Напомним, что PowerCLI – это расширение для Windows PowerShell, которое позволяет использовать более 600 командлетов для работы с облачной инфраструктурой. Последняя версия пакета доступна на официальном сайте VMware.
За счет гибких функциональных возможностей надстройки управлять виртуальными машинами стало еще проще. Единственное условие – необходимо разобраться, как это работает на практике.
Get-VM
Get-VM представляет собой классический подход, позволяющий извлекать список виртуальных машин на стороне vCenter. Кроме того, используя Get-VM со стандартным командлетом PowerShell Select-Object, можно запросить интересующие характеристики, например имя виртуальной машины, количество процессоров, объем оперативной памяти и прочую информацию. А затем с помощью Export-CSV экспортировать данные в файл формата CSV для дальнейшей работы с полученной информацией.
Помимо работы с объектами ВМ, Get-VM используется для поиска снимков в виртуальной среде, о которых, вероятнее всего, могли забыть. В примере, представленном ниже, запрашивается список снимков ВМ, а полученный результат выводится в текстовый файл snapshots.txt.
Move-VM
Если перед администратором стоит задача переноса виртуальных машин с одного хоста на другой средствами командной строки, используют командлет Move-VM. В примере ниже производится выборка ВМ, размещенных на узле esxi01, а с помощью Move-VM – перенос виртуальных машин на хост esxi02.
Если же необходимо выполнить «живую миграцию», используют следующую комбинацию:
New-VM
Когда требуется создать одну виртуальную машину, используют командлет New-VM. Обратите внимание, что таким способом создается пустая ВМ, на которую позже устанавливают ОС и соответствующие приложения.
Но существуют и альтернативные варианты развертывания, когда работают с заранее подготовленным шаблоном. В примере ниже путем клонирования виртуальной машины OriginalVM создается ВМ NewVM8 и размещается на узле esxi01.
Если создавать виртуальные машины по отдельности нет ни желания, ни времени, используйте файл ответов в формате CSV. В нем содержатся строки, описывающие параметры виртуальных машин. Такой файл необходимо определить заранее.
Содержимое файла CSV
Invoke-VMS
Командлет Invoke-VMS обеспечивает удаленное выполнение команд и скриптов в гостевой Windows, Linux ОС, запущенной на виртуальной машине. Данная функция помогает автоматизировать задачи на одной или нескольких ВМ.
Обратите внимание, что в приведенном примере запускается скрипт типа Bat и используется переменная среды со следующим синтаксисом: %<environment variable>%, например, % programfiles%. При этом внешние кавычки ($ script = ‘…’) определяют строковую переменную в PowerShell, а внутренние проставляются тогда, когда в значении переменной встречаются пробелы.
Get-VMHost
Командлет Get-VMHost помогает узнать, на каком узле или в каком дата-центре запущена виртуальная машина. В примере ниже запрашивается информация о ВМ с именем MyVM.
Если необходимо получить информацию о ЦОД, прибегают к помощи командлета Get-Datacenter для передачи объекта в параметр Location. Таким образом, получаем следующую строку:
Несмотря на растущую популярность технологии VMware vSAN, большинство крупных предприятий по-прежнему частично или полностью продолжают работать с общими хранилищами (shared storage). Есть достаточно PowerCLI командлетов для конфигурирования большинства аспектов HA/DRS кластеров, однако для SDRS кластеров выбор не велик.
Где-то во время релиза обновленной версии платформы VMware vSphere 6.5 компания VMware выпустила и новую версию фреймворка PowerCLI 6.5, в котором было много новых возможностей, особенно касающихся управления кластером vSAN.
На днях же вышла версия PowerCLI 6.5.2 (сразу же после релиза vSphere 6.5 Update 1), посмотрим что там появилось нового, а также заодно упомянем новые фичи прошлого апдейта - PowerCLI 6.5.1 (он вышел 3 месяца назад).
Если раньше при перемещении ВМ использовался параметр Destination, который принимал тип folder, ESXi-хост, кластер или ресурс-пул (но только одно из вышеперечисленного), то теперь можно использовать параметр InventoryLocation для задания непосредственного конечного положения ВМ. Это упрощает перемещение ВМ, например, между серверами vCenter:
2. Можно использовать ISO из Content Library.
Теперь командлет New-CDDrive имеет параметр ContentLibraryIso, который можно использовать для указания ISO-образа в библиотеке.
3. Обновления экспериментальных фичей:
Set-HardDisk -ZeroOut. Этот параметр можно использовать для заполнения диска нулями при прямом обращении к хосту ESXi.
New-HardDisk -AdvancedSetting. Этот параметр используется для ассоциации правил Storage Distributed Resource Scheduler (SDRS).
New-VM -AdvancedSetting. Аналогично предыдущему пункту - нужен для правил SDRS.
Install-VMHostPatch. Весь этот командлет пока экспериментальный.
А вот что нового было в PowerCLI 6.5.1:
1. Автозагрузка модулей PowerShell.
Теперь после логина и выполнения запроса к командлету автоматически подгружаются все необходимые модули. Например, вот что происходит после выполнения Connect-VIServer (обратите внимание на состав модулей):
2. Новые и обновленные командлеты для групп кластеров DRS и правил VM/Host.
Следующие командлеты были добавлены:
Get-DRSClusterGroup
New-DRSClusterGroup
Set-DRSClusterGroup
Remove-DRSClusterGroup
Get-DRSVMHostRule
New-DRSVMHostRule
Set-DRSVMHostRule
Remove-DRSVMHostRule
3. Новый модуль VMware.VimAutomation.Srm для управления SRM.
Теперь он вынесен из основного модуля в отдельный.
4. Обновления API.
Для работы с внешними продуктами были очень существенно обновлены модули vR Ops (vRealize Operations) и Horizon (для работы с Horizon View 7.1 API).
5. Новые командлеты для iSCSI vSAN.
Здесь появились следующие командлеты для управления инициаторами и таргетами iSCSI:
Get-VsanIscsiInitiatorGroup
New-VsanIscsiInitiatorGroup
Set-VsanIscsiInitiatorGroup
Remove-VsanIscsiInitiatorGroup
Get-VsanIscsiTarget
New-VsanIscsiTarget
Set-VsanIscsiTarget
Remove-VsanIscsiTarget
Get-VsanIscsiInitiatorGroupTargetAssociation
New-VsanIscsiInitiatorGroupTargetAssociation
Remove-VsanIscsiInitiatorGroupTargetAssociation
Get-VsanIscsiLun
New-VsanIscsiLun
Set-VsanIscsiLun
Remove-VsanIscsiLun
Get-VsanStat
Start-VsanDiskFormatUpdate
Get-VSANView
Также модуль Storage получил новые командлеты для механизма storage policy based management (SPBM):
Многие пользователи виртуальной инфраструктуры VMware vSphere часто используют кастомизированные образы гипервизора VMware ESXi, который распространяется OEM-производителями оборудования, например, HP. Эти образы включают в себя специфические драйвера устройств, которые, зачастую, отсутствуют в стандартном комплекте поставки ESXi (это и понятно, так как нельзя поддерживать все устройства всех производителей в одном образе).
Между тем, многие администраторы обновляют такие образы достаточно редко - иногда по полгода ждут пока OEM-вендор выпустит очередную версию образа и накатывают его. Но ведь бывают критические обновления безопасности ESXi, которые нужно установить как можно скорее. Для этого нужно знать, как выглядит процедура обновления кастомного образа vSphere.
Во-первых, нужно понимать, что основные номера билдов и даты релиза гипервизора указаны в статье KB 2143832. А патчи в виде VIB-пакетов можно скачать с портала MyVMware здесь.
Во-вторых, есть утилита PowerCLI Image Builder (о ней мы писали вот тут), которая позволяет поддерживать актуальное состояние образа ESXi с точки зрения последних обновлений, но в то же время сохранять специфический контент кастомных образов.
Ну и, в-третьих, для тех, кто умеет пользоваться утилитой, есть простая команда, которая позволяет склонировать существующий профиль образа и обновить его пакеты, накатив последние патчи ESXi:
Также у VMware есть скрипты PowerCLI, которые демонстрируют более тонкий подход к обновлению образов ESXi. Но надо отметить, что они официально не поддерживаются со стороны техподдержки VMware.
Итак, первый скрипт - esxi-image-creator.ps1 - представляет собой обертку к Image Builder и дает некоторые дополнительные возможности, которые часто требуются для кастомных образов ESXi. Например, он позволяет монтировать depot-файлы и включать или исключать VIB-пакеты из состава образов. Также там есть такие расширенные настройки, как указание билдов по датам выпуска, а не по номерам и т.п. Итоговый образ можно собрать в формате ISO или ZIP.
Второй скрипт -
esxi-image-comparator.ps1 - показывает различия между двумя профилями образов ESXi. Эти различия можно показать в консоли или графическом интерфейсе, а также экспортировать в CSV-файл для последующего анализа.
Как видно из картинки, в процессе работы скрипта можно в интерактивном режиме включать или исключать профили для сравнения.
Вот пример использования утилиты при обновлении кастомного образа Cisco для ESXi 5.5 (обновление U3b от декабря 2015) с последними патчами VMware и обновленными драйверами Cisco для устройств enic и fnic. При этом исключается VIB-пакет tools-light для оптимизации использования с Auto Deploy:
Ну а вот так выглядит результат сравнения обновленного профиля с исходным:
Еще один пример - включение в образ Dell ESXi 6.0U3, который уже был обновлен Dell, патча patch 7a (5224934) с пакетами VIB для NSX и удаление VMware Tools для использования с Auto Deploy.
А вот пример генерации образа для HPE Proliant, содержащего последние обновления из репозитория HP, а также последние обновления оффлайн-бандла ESXi 6.5:
Надо отметить, что не следует использовать публичный репозиторий VMware image profile repository для создания кастомных образов, так как он содержит много различных версий и модификаций, что может привести к созданию образа, который невозможно будет использовать.
Но зато вот такая команда позволит сформировать таблицу с отличиями каждого из релизов VMware ESXi:
Мораль поста такова - нужно пользоваться, по-возможности, кастомными образами ESXi от OEM-производителей, но не забывать накатывать обновления (особенно security patches) от обычных образов VMware ESXi, создаваемых VMware.
В свете последних событий, связанных с WannaCry ransomware, очень актуальным становится проверка наличия того или иного установленного патча (Patch/Hotfix/KB) внутри ОС виртуальных машин. Test-VMHotfix из моего PowerCLI Vi-Module модуля быстро и эффективно проверит все ваши ВМ. Пользоваться функцией проще простого, передайте в pipeline ВМ для проверки и шаблон названия патча в параметре -KB... Таги: VMware, PowerCLI, Security, vSphere, VMachines
На сайте проекта VMware Labs появился интересный PowerCLI-скрипт vCenter Cluster Performance Tool, с помощью которого можно получить информацию о производительности кластера за счет агрегации данных, поступающих от хостов VMware ESXi.
Это уже вторая версия сценария, переработанная на базе механизма модулей PowerCLI 6.0 (ранее она была построена на снипетах).
Для работы сценария понадобится указать 2 следующих параметра:
Интервал от 20 до 300 секунд. По умолчанию это 20 секунд, что соответствует сбору статистики в близкому к реальном времени, а значение 300 даст пятиминутный интервал между сборами, чтобы не создавать лишнюю нагрузку.
Специальный флаг для получения списка уникальных идентификаторов счетчиков производительности, доступных на vCenter Server (нужно указать -1 в качестве аргумента для получения списка). Далее можно использовать один из полученных идентификаторов для вывода соответствующей метрики для кластера.
Возможности скрипта vCenter Cluster Performance Tool:
Сбор всех данных в указанном интервале, которые доступны на каждом хосте заданного кластера.
Простой способ запуска сценария.
Данные сохраняются в файл CSV, которые можно подставить в любое средство визуализации.
Также генерируется график в формате картинки PNG (как показано выше).
Для работы скрипта потребуется VMware vCenter Server 5.0 или более поздний, а также Microsoft Chart Controls для Microsoft .NET Framework 3.5. Скачать vCenter Cluster Performance Tool можно по этой ссылке.
Начиная с VMware vSphere 6.0, компания VMware предлагает администраторам очень удобный механизм для назначения прав доступа на самом высоком уровне при наличии нескольких серверов VMware vCenter - глобальные пермиссии (global permissions).
Для тех, кто использует режим vCenter Enhanced Linked Mode (ELM) с несколькими географически разделенными площадками и разнородными инфраструктурами, глобальные пермиссии - это отличное решение, так как они создаются один раз, после чего распространяются и (что самое главное) поддерживаются в согласованном состоянии на всех серверах vCenter связанной инфраструктуры в рамках одного домена Single Sign-On (SSO).
Вильям Лам, известный своими сценариями для автоматизации инфраструктуры vSphere, написал удобный скрипт GlobalPermissions.ps1, позволяющий добавлять и удалять глобальные пермиссии. Он содержит методы New-GlobalPermission и Remove-GlobalPermission, для которых можно задавать следующие параметры:
vc_server - хост сервера vCenter
vc_username - имя пользователя vCenter
vc_password - пароль пользователя vCenter
vc_user - пользователь vCenter, которому будут назначаться пермиссии
vc_role_id - идентификатор Role ID, который связан с ролью vSphere на данном vCenter Server
propagate - значение true или false для распространения пермиссий вниз по уровням иерархии
Чтобы получить параметр vc_role_id, нужно соединиться с vCenter Server и указать имя роли, выполнив сниппет ниже. В данном примере мы получаем ID административной роли с именем Admin:
(Get-VIRole -Name Admin).ExtensionData.RoleId
Вот пример создания новой глобальной пермиссии для одного из пользователей:
Эта статья предназначена в помощь администраторам VDI, которые обновили свои хосты ESXi, оснащенные картами GRID vGPU, до vSphere версии 6.5. Как сказано Джереми Майном в этом форуме NVIDIA, vSphere 6.5 и драйвер GRID от ноября 2016 требует изменения режима GPU с «Shared» (vSGA) на «Shared Direct» (vGPU) через веб-клиент для включения поддержки режима vGPU виртуальными машинами...
Напомним, что этот продукт позволяет централизованно управлять хост-серверами VMware ESXi за счет автоматизации операций системных администраторов. По-сути, vSphere Management Assistant представляет собой "вынесенную" за пределы серверов ESXi сервисную консоль (консольную ОС), которая для виртуальной инфраструктуры присутствует в единственном экземпляре, но централизованно исполняет сценарии на хостах, используя различные интерфейсы VMware vSphere.
Теперь вместо vMA предлагается использовать интерфейсы vCLI и PowerCLI. В целом, этот подход выглядит достаточно логичным - большинство функций удаленного управления платформой взяли на себя эти фреймворки, а сами ESXi и vCenter отлично управляются через стандартные средства и API.
Сама VMware предлагает использовать интерфейс vSphere Command Line Interface (vCLI) в качестве альтернативы vMA. Между тем, она заявляет о том, что команды esxcfg- и vicfg- также будут выведены из эксплуатации (deprecated). Поэтому администраторам vSphere стоит проверить, не используются ли эти две команды в старых скриптах для управления виртуальной инфраструктурой (подробнее о заменах для этих команд - тут).
Вот какие еще предлагаются альтернативы интерфейсу vCLI и устаревшему модулю vMA:
Фреймворк PowerCLI и средство кроссплатформенного использования PowerCLI Core.
Компания VMware время от времени выпускает видеоролики серии Whiteboarding, где технические специалисты компании рассказывают в понятной форме о продуктах и технологиях, рисуя на доске схемы и элементы интерфейса.
На днях вышло несколько новых видео, посвященных VMware vSphere и PowerCLI и заслуживающих внимания (а еще и со стильным бородатым мужиком в последнем ролике). Давайте взглянем:
О шифровании ВМ и трафика vMotion
О режиме безопасной загрузки (Secure Boot) в VMware vSphere
О механизме доступности управляющего сервера - VMware vCenter High Availability
О топологии составляющих архитектуры VMware vCenter
Об апгрейде VMware vCenter и миграции на vCenter Server Appliance (vCSA)
О методах API access methods в интерфейсе PowerCLI
Ну и, конечно же, обратите внимание на плейлист компании VMware, посвященный новой версии платформы VMware vSphere 6.5 - там есть что посмотреть.
Как некоторые знают, в VMware vSphere 6.5 появилась (а точнее вернулась снова) возможность Automatic VMFS UNMAP - возврат дискового пространства виртуальной машины (ее VMDK) на сторону дискового массива средствами VAAI (vStorage API for Array Integration). Если раньше эта возможность требовала выполнения различных команд, то теперь управление этой штукой доступно из GUI, а возврат дисковых блоков происходит автоматически. Работает UNMAP только для "тонких" (Thin Provisioned) LUN, на которых размещаются тома VMFS.
Из GUI vSphere Web Client можно управлять только UNMAP'ом для томов VMFS 6, для пятой версии файловой системы это нужно делать вручную с помощью ESXCLI. Кроме того, механизм UNMAP работает в асинхронном режиме, а иногда хочется почистить хранилища от неиспользуемых блоков прямо сейчас.
Поэтому весьма кстати, что на сайте EnterpriseDaddy обнаружился полезный PowerCLI-скрипт, который возвращает дисковое пространство в LUN для заданного хранилища хоста ESXi.
Эта функция принимает на вход имя хоста ESXi и Datastore, а также отключает таймаут на исполнение операций, так как возврат дискового пространства LUN может занять часы.
Function Perform-VMFSUnmap {
[CmdletBinding()]
param(
[Parameter(
Mandatory=$true)]
[String[]]$Datastore,
[String]$ESXiHost
)
Set-PowerCLIConfiguration -WebOperationTimeoutSeconds -1 -Scope Session -Confirm:$false
$ESXHost = Get-VMHost $ESXiHost
$DatastoreName = Get-Datastore $Datastore
Write-Host 'Using ESXCLI and connecting to $VMHost' -ForegroundColor Green
$esxcli = Get-EsxCli -VMHost $ESXHost
Write-Host 'Unmapping $Datastore on $VMHost' -ForegroundColor Green
$esxcli.storage.vmfs.unmap($null,$DatastoreName,$null)
}
Многие администраторы виртуальной инфраструктуры VMware vSphere или Horizon View в целях мониторинга пользовательской активности хотели бы иметь возможность снимать скриншоты консоли виртуальных машин. На сайте vcloudnine появился такой скрипт для интерфейса PowerCLI:
Для получения скриншота ВМ убедитесь, что настройки энергосбережения у нее отключены, иначе получите черный экран, в который машина уходит через несколько минут неактивности.
Шесть лет назад, признанный VMware guru William Lam написал отличную статью на эту тему. Сегодня мы автоматизируем его решение с помощью PowerCLI. Прошу любить и жаловать функцию Set-MaxSnapshotNumber из моего PowerCLI Vi-Module модуля. Функция может выполнять следующие 3 действия...
Компания VMware вместе с выпуском обновленной версии платформы vSphere 6.5 выпустила и обновленный интерфейс для администрирования виртуальной инфраструктуры через PowerShell - PowerCLI 6.5 R1. Ну а на днях стал доступен большой и информативный постер на эту тему - VMware PowerCLI 6.5 Release 1 Reference Poster.
Напомним, что постер о PowerCLI 6.3 доступен у нас по ссылке тут (кому интересно - мы писали и о постере PowerCLI 5.8).
В PowerCLI 6.5 R1 появилось множество полезных командлетов для работы с хранилищами, которые добавляют функциональность для работы с vSAN, VVOLs и виртуальными дисками. Также появились отдельные командлеты для работы с виртуальными дисками (при этом нет необходимости обращаться к самой виртуальной машине).
Скачать VMware PowerCLI 6.5 R1 можно по этой ссылке. Release notes доступны тут, User Guide можно скачать здесь, а changelog вот тут. Постер можно скачать по этой ссылке.
PowerShell функция Connect-VMHostPutty из моего PowerCLI Vi-Module модуля поможет вам открывать несколько SSH-сессий putty к хостам ESXi без ввода пароля. Функция на самом деле не требует, чтобы на вашем компьютере был установлен VMware PowerCLI. Всё, что нужно - это PowerShell версии 3.0 или выше. Это очень короткая и простая функция всего с двумя параметрами и только один из них обязательный...
Как известно, с некоторых пор на предприятиях стало модно использовать мессенджер Slack, в котором есть удобные средства совместной работы и интеграции с различными Enterprise-сервисами (например, JIRA).
Компания OpVizor выпустила виртуальный модуль OpBot Virtual Assistant, реализующий бота Slack, который позволит вам исполнять команды PowerCLI / PowerShell для вывода различных статистик прямо в виде сообщений в адрес бота.
Установка виртуального модуля OpBot проста:
Интегрируем OpBot в мессенджер Slack (получаем токен Slack API для импорта в виртуальный модуль).
Скачиваем и конфигурируем OpBot Virtual Appliance.
Для оперирования этого виртуального модуля надо создать специальный аккаунт (желательно с правами Read Only по вполне понятным причинам). При работе с OpBot есть следующие нюансы:
На данный момент один виртуальный модуль может работать с одним сервером vCenter и одним ботом.
Пермиссии задаются в настройках (все команды будут исполняться в контексте указанного аккаунта).
Несколько виртуальных модулей/серверов vCenter могут управляться как одним Slack-ботом, так и разными. Обе модели реализуются через повторное развертывание OVF-шаблона.
При работе используется механизм PowerCLI Core (со всеми его ограничениями).
Начать работу с OpBot Virtual Assistant можно по этой ссылке. Кстати, удобно использовать алиасы для выполнения команд, например:
@yourbotname alias badvms=posh get-view -ViewType VirtualMachine -Filter @{'RunTime.ConnectionState'='disconnected|inaccessible|invalid|orphaned'} | select name
@yourbotname badvms
К сожалению, нету «прямого» пути для миграции шаблонов (VM Templates) с одного датастора на другой (т.н. процедура Storage VMotion). Представляю вашему вниманию функцию Move-Template2Datastore из моего PowerCLI Vi-Module модуля. Функция принимает объект(ы) Template и один объект датастора и производит 3 действия...
А недавно на сайте blog.igics.com появился интересный и полезный PowerCLI-сценарий, который позволит вам вывести в одном гриде (или в файл) все виртуальные машины и версии VMware Tools в них. Вы, конечно же, можете посмотреть версии VMware Tools в vSphere Client, но если у вас большая инфраструктура, да еще и несколько серверов vCenter, то следить за версиями тулзов во всех виртуальных машинах через клиент будет затруднительно.
И тут на помощь вам придет следующий скрипт:
######################################################################################################################################
# Author: David Pasek
# E-mail: david.pasek@gmail.com
# Twitter: david_pasek
# Creation Date: 2016-11-25
#
# Use case:
# Key use case of this script is to report VMtools from all VMs in vCenter
#
# Disclaimer:
# Use it on your own risk. Author is not responsible for any impacts caused by this script.
######################################################################################################################################
#
# CHANGE FOLLOWING VARIABLES BASED ON YOUR SPECIFIC REQUIREMENTS
# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
#
# Report type - table, grid, file, csv-file
$REPORT_TYPE = "csv-file"
# Report file name without file extension. Extension is automatically added. File is created in current working directory.
$REPORT_FILE_NAME = "report-vmtools"
######################################################################################################################################
Clear-Host
# We need VMware PowerCLI snapin
$o = Add-PSSnapin VMware.VimAutomation.Core
$o = Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false
# Connect to vCenter
Write-Host "Connecting to vCenter ..."
$VC = Read-Host "Enter one vCentre Server or multiple vCenter servers delimited by comma."
Write-Host "Enter vCenter credentials ..."
$CRED = Get-Credential
Connect-VIServer -Server $VC -Credential $CRED -ErrorAction Stop | Out-Null
# Add new property (ToolsVersion) to VM
New-VIProperty -Name ToolsVersion -ObjectType VirtualMachine -ValueFromExtensionProperty 'Config.tools.ToolsVersion' -Force | Out-Null
# Initalize report
$Report = @()
foreach ($vm in Get-VM) {
# Numbers mapping is from https://packages.vmware.com/tools/versions
Switch ($vm.ToolsVersion) {
7302 {$GuestToolsVersion = "7.4.6"}
7303 {$GuestToolsVersion = "7.4.7"}
7304 {$GuestToolsVersion = "7.4.8"}
8192 {$GuestToolsVersion = "8.0.0"}
8194 {$GuestToolsVersion = "8.0.2"}
8195 {$GuestToolsVersion = "8.0.3"}
8196 {$GuestToolsVersion = "8.0.4"}
8197 {$GuestToolsVersion = "8.0.5"}
8198 {$GuestToolsVersion = "8.0.6"}
8199 {$GuestToolsVersion = "8.0.7"}
8290 {$GuestToolsVersion = "8.3.2"}
8295 {$GuestToolsVersion = "8.3.7"}
8300 {$GuestToolsVersion = "8.3.12"}
8305 {$GuestToolsVersion = "8.3.17"}
8306 {$GuestToolsVersion = "8.3.18"}
8307 {$GuestToolsVersion = "8.3.19"}
8384 {$GuestToolsVersion = "8.6.0"}
8389 {$GuestToolsVersion = "8.6.5"}
8394 {$GuestToolsVersion = "8.6.10"}
8395 {$GuestToolsVersion = "8.6.11"}
8396 {$GuestToolsVersion = "8.6.12"}
8397 {$GuestToolsVersion = "8.6.13"}
8398 {$GuestToolsVersion = "8.6.14"}
8399 {$GuestToolsVersion = "8.6.15"}
8400 {$GuestToolsVersion = "8.6.16"}
8401 {$GuestToolsVersion = "8.6.17"}
9216 {$GuestToolsVersion = "9.0.0"}
9217 {$GuestToolsVersion = "9.0.1"}
9221 {$GuestToolsVersion = "9.0.5"}
9226 {$GuestToolsVersion = "9.0.10"}
9227 {$GuestToolsVersion = "9.0.11"}
9228 {$GuestToolsVersion = "9.0.12"}
9229 {$GuestToolsVersion = "9.0.13"}
9231 {$GuestToolsVersion = "9.0.15"}
9232 {$GuestToolsVersion = "9.0.16"}
9233 {$GuestToolsVersion = "9.0.17"}
9344 {$GuestToolsVersion = "9.4.0"}
9349 {$GuestToolsVersion = "9.4.5"}
9350 {$GuestToolsVersion = "9.4.6"}
9354 {$GuestToolsVersion = "9.4.10"}
9355 {$GuestToolsVersion = "9.4.11"}
9356 {$GuestToolsVersion = "9.4.12"}
9359 {$GuestToolsVersion = "9.4.15"}
9536 {$GuestToolsVersion = "9.10.0"}
9537 {$GuestToolsVersion = "9.10.1"}
9541 {$GuestToolsVersion = "9.10.5"}
10240 {$GuestToolsVersion = "10.0.0"}
10245 {$GuestToolsVersion = "10.0.5"}
10246 {$GuestToolsVersion = "10.0.6"}
10247 {$GuestToolsVersion = "10.0.8"}
10249 {$GuestToolsVersion = "10.0.9"}
10252 {$GuestToolsVersion = "10.0.12"}
10272 {$GuestToolsVersion = "10.1.0"}
0 {$GuestToolsVersion = "Not installed"}
2147483647 {$GuestToolsVersion = "3rd party - guest managed"}
default {$GuestToolsVersion = "Unknown"}
}
$vminfo = New-Object -Type PSObject -Property @{
Name = $vm.Name
VMhardwareVersion = $vm.Version
ToolsVersion = $vm.ToolsVersion
GuestToolsVersion = $GuestToolsVersion
}
$Report += $vminfo
}
# Show report
Switch ($REPORT_TYPE) {
"grid" { $Report | select Name,VMhardwareVersion,ToolsVersion,GuestToolsVersion | Out-GridView }
"file" { $Report | select Name,VMhardwareVersion,ToolsVersion,GuestToolsVersion | Out-File -FilePath "$REPORT_FILE_NAME.txt" }
"csv-file" { $Report | select Name,VMhardwareVersion,ToolsVersion,GuestToolsVersion | export-csv "$REPORT_FILE_NAME.csv" }
default { $Report | select Name,VMhardwareVersion,ToolsVersion,GuestToolsVersion | Format-Table }
}
Disconnect-VIserver -Server $VC -Force -Confirm:$false
Форму отчета можно редактировать в переменной $REPORT_TYPE, которая задает одно из следующих представлений:
Стандартный вывод таблицы PowerShell в терминале (значение table)
Представление PowerShell GridView (grid)
Текстовый файл, содержащий таблицу (file)
Файл Comma separated values (csv-file)
Прогнав скрипт, мы получим вот такой результат, из которого можно сделать вывод о том, в каких виртуальных машинах нужно обновить VMware Tools (показывается еще и Virtual Hardware Version):
На сайте проекта VMware Labs не так давно появилась очередная полезная утилита для администраторов vSphere - PowerCLI Core. Эта штука позволяет пользователям применять те же самые командлеты PowerCLI на системах Linux, Mac и Docker, которые ранее были доступны только для Windows.
PowerCLI Core использует компоненты Microsoft PowerShell Core и .Net Core.
PowerCLI Core предоставляет мультиплатформенный язык сценариев, который позволяет управлять инфраструктурой VMware vSphere практически с любой ОС. Скрипты PowerCLI, которые были написаны ранее только для Windows-версий фреймворка, теперь можно портировать на различные операционные системы и запустить эти сценарии в них без необходимости их изменения.
На данный момент фреймворк реализует более 280 командлетов, но касаются они только основных возможностей vCenter и ESXi, а также распределенного виртуального коммутатора (vDS). Модули для работы с хранилищами, лицензиями и VMware Update Manager пока не поддерживаются:
Также пока нет и поддержки других расширенных модулей:
На днях компания VMware выпустила обновленную версию интерфейса PowerShell для управления виртуальной инфраструктурой VMware PowerCLI 6.5 R1, которая вышла сразу же после VMware vSphere 6.5.
Давайте посмотрим на новые возможности PowerCLI 6.5 R1:
Обновленные командлеты
Move-VM – теперь можно перемещать машины между серверами vCenter (а также между доменами SSO).
New-VM – можно задавать число ядер CPU.
Open-VMConsoleWindow – теперь поддерживается последняя версия VMware Remote Console (VMRC).
Также другие командлеты были обновлены, чтобы соответствовать vSphere 6.5 API.
Новые Storage Modules
В этой версии PowerCLI появилось множество модулей для работы с хранилищами, которые добавляют функциональность для работы с vSAN, VVOLs и виртуальными дисками. Теперь есть множество командлетов, сфокусированных на жизненном цикле всего кластера vSAN, создание которого теперь может быть полностью автоматизировано.
Вот новые модули, относящиеся к Virtual SAN:
Get-VsanClusterConfiguration
Get-VsanDisk
Get-VsanDiskGroup
Get-VsanFaultDomain
Get-VsanResyncingComponent
Get-VsanSpaceUsage
New-VsanDisk
New-VsanDiskGroup
New-VsanFaultDomain
Remove-VsanDisk
Remove-VsanDiskGroup
Remove-VsanFaultDomain
Set-VsanClusterConfiguration
Set-VsanFaultDomain
Test-VsanClusterHealth
Test-VsanNetworkPerformance
Test-VsanStoragePerformance
Test-VsanVMCreation
Update-VsanHclDatabase
Теперь также появились отдельные командлеты для работы с виртуальными дисками (при этом нет необходимости обращаться к самой виртуальной машине):
Copy-VDisk
Get-VDisk
Move-VDisk
New-VDisk
Remove-VDisk
Set-VDisk
Также есть группа командлетов, которая позволяет управлять новой фичей репликации VVOL, которая появилась в vSphere 6.5. Теперь можно искать fault domains и replication groups, синхронизировать их, а также подготавливать и стартовать процесс фейловера на целевую площадку:
Get-SpbmFaultDomain
Get-SpbmReplicationGroup
Get-SpbmReplicationPair
Start-SpbmReplicationFailover
Start-SpbmReplicationPrepareFailover
Sync-SpbmReplicationGroup
Совместимость с различными версиями vCenter, vSAN и SRM
Теперь PowerCLI 6.5 поддерживает все версии vCenter до 5.5:
А вот поддерживаемые версии vSAN и Site Recovery Manager (SRM):
Horizon Module
Теперь появился отдельный модуль, предназначенный для работы с решением VMware Horizon (пока поддерживается только Horizon 7.0.2). Теперь можно соединяться с Horizon Connection server, используя Connect-HVServer и Disconnect-HVServer, и выполнять различные действия, которые опубликованы через API. Загляните в репозиторий PowerCLI Examples, чтобы посмотреть на примеры использования.
PowerCLI Core
Теперь виртуальный модуль PowerCLI Core также имеет поддержку vSphere 6.5 API. То есть новыми командлетами теперь могут пользоваться и пользователи систем Linux, Mac и Docker.
Скачать VMware PowerCLI 6.5 R1 можно по этой ссылке. Release notes доступны тут, User Guide можно скачать здесь, а changelog вот тут.
Многие Enterprise-администраторы используют алармы (alarms) для оповещения о каких-либо сбоях в виртуальном датацентре VMware vSphere, а наиболее продвинутые из них даже пишут сценарии, выполняемые при том или ином срабатывании аларма в ответ на событие (event).
Но как протестировать выполнение этого действия, если вам нужно вызвать этот аларм, но сам ивент симулировать в производственной среде трудно (например, потеря соединения с хостом ESXi)?
Для этого во фреймворке PowerCLI предусмотрена возможность генерации "фейкового" аларма в VMware vCenter, который не затрагивает производственную среду. Сначала нам нужно найти имя этого ивента, по происхождении которого срабатывает аларм. Нужно пойти по этой ссылке и найти названия, оканчивающиеся на "Event".
Например, найдем HostConnectionLostEvent (потеря соединения с хостом ESXi):
Список событий также можно узнать, выполнив следующий сценарий PowerCLI:
Итак, возьмем событие HostConnectionLostEvent и выполним для него следующий сценарий:
# Usual load modules and connections
import-module VMware.VimAutomation.Core
connect-viserver 192.168.10.99
$server = $global:DefaultVIServer
$entity = Get-View (Get-VMHost -Name 192.168.10.240)
$eventMgr = Get-View $server.ExtensionData.Content.EventManager
# Subsitute your event to trigger
$event = New-Object VMware.Vim.HostConnectionLostEvent
# This property is specific to this event, and is required. This domain and user doesn't have to be an existing account.
$event.UserName = "CAGE.LOCAL\Chaos Monkey"
$hostEventArg = New-Object VMware.Vim.HostEventArgument
$hostEventArg.Host = $entity.MoRef
$hostEventArg.Name = "Host-is-a-label"
$event.Host = $HostEventArg
# Sends the event to vCenter
$eventMgr.PostEvent($event,$null)
Получим сгенерированный аларм в VMware vCenter (кликабельно):
Для некоторых ивентов заполнение некоторых данных свойств является обязательным. Например, если вы поменяете в сценарии выше строчку с инициализацией ивента вот на эту:
Exception calling "PostEvent" with "2" argument(s): "
Required property switchUuid is missing from data object of type UplinkPortVlanUntrunkedEvent
while parsing serialized DataObject of type vim.event.UplinkPortVlanUntrunkedEvent
Это значит, что вам надо добавить требуемый параметр - switchUuid. Заполним его для переменной $event:
$event.SwitchUuid = "Fake UUID"
После этого сценарий PowerCLI выполнится успешно, и мы увидим наш фейковый аларм в консоли vSphere Client:
Таким образом, вам надо изучить структуру свойств события, чтобы корректно исполнять сценарий, приведенный выше.
Представляю вам функцию Compare-VMHost из моего PowerCLI модуля Vi-Module, которая позволяет сравнивать один или группу хостов ESXi с эталонным хостом. Что именно будет сравниваться, регулируется параметром –Compare. На данный момент функция умеет сравнивать по следующим критериям...
Это гостевой пост компании ИТ-ГРАД. Те, кто использует продукты VMware, знают, что управление несколькими гипервизорами ESXi происходит с помощью vCenter Server, который чаще устанавливается на виртуальную машину, распложенную на одном из этих же гипервизоров. Выступая в роли подручного средства администрирования, vCenter Server используется для управления ресурсами, позволяя создавать, удалять, редактировать виртуальные машины.
Вы уверены, что знаете, что происходит на ваших датасторах? Где хранятся ваши ISO-образы? Сколько у вас «осиротевших» (orphaned) виртуальных дисков? Каков их размер, и как давно они там? И что ещё занимает совсем недешёвое пространство на вашей СХД? Функция Search-Datastore из моего PowerCLI модуля Vi-Module ответит вам на все эти и многие другие вопросы.