Einer der entscheidenden Vorteile der Virtualisierungstechnologie ist die Loslösung der betreffenden Systeme von der jeweiligen physikalischen Hardware. In VMware Virtualisierungsumgebung vSphere können über einen sogenannten vMotion-Vorgang Virtuelle Maschinen ohne Downtime zwischen physikalischen Hosts verschoben werden, ohne dass das jeweilige System dadurch spürbar beeinträchtigt werden würde.

Technologie auf und sorgen dafür, dass durch eine dynamische Vereteilung der virtuellen Maschinen über die in einer Umgebung zur Verfügung stehenden Hosts die physikalischen Ressourcen möglichst gut genutzt werden.

Es gibt allerdings eine Reihe von Gründen, die verhindern können, dass eine virtuelle Maschine von einem Host auf einen anderen durch einen vMotion-Vorgang migriert werden kann. Einer dieser Gründe könnte z.B. sein, dass eine virtuelle Maschine in ihr virtuelles CD-Laufwerk eine ISO-Datei bereitgestellt hat, auf die der betreffende Zielhost keinen Zugriff hat. vSphere wird in diesem Fall die Migration der virtuellen Maschine nicht zulassen. Ein weiterer Grund kann etwa sein, dass der Netzwerkadapter der virtuellen Maschine mit einer Portgruppe verbunden ist, die auf dem Zielhost nicht existiert.

Es gibt noch zahlreiche weitere vMotion-Hürden und so ist es nur natürlich, dass sich in jeder größere vSphere-Umgebung die eine oder andere virtuelle Maschine befindet, für die mindestens ein Grund zutrifft, warum sie nicht auf einen andern Host migriert werden kann.

Aber wie findet man heraus, ob es in der eigenen vSphere-Umgebung solche vMotion-faulen virtuellen Maschinen gibt? Der triviale Weg das herauszufinden, wäre zu versuchen, jede einzelne virtuelle Maschine über vMotion auf einen anderen Host zu verschieben. Vor jedem vMotion-Vorgang wird die betreffende virtuelle Maschine im Hinblick auf dne jeweiligen Host einer Kompatibilitätsprüfung unterzogen. Diese kann eine Warnung oder einen Fehler aufweisen. Eine Warnung bedeutet, dass ein vMotion-Vorgang zwar möglich aber unter Umständen nicht empfehlenswert ist. Eine häufige Warnung ist etwa, dass die VMware-Tools auf einer virtuellen Maschine nicht installiert sind und daher kein Heartbeat für die virtuelle Maschine auf dem Zielhost verfügbar ist. Scheitert die Kompatibilitätsprüfung allerdings mit einem Fehler, wird vSphere den VMotion-Vorgang für die betreffende VM ganz verweigern.

Um die vMotion-Verweigerer in der eigenen Umgebung aufzuspüren, empfiehlt es sich, alle VMs regelmäßig einer solchen Kompatibilitätsprüfung zu unterziehen. über die grafischen Tools wie den vSphere-Web-Client lässt sich eine solche Prüfung allerdings nur im Zusammenhang mit einem tatsächlichen vMotion-Vorgang durchführen. Für große Umgebungen mit zahlreichen VMs ist es kaum praktikabel jede VM in regelmäßigen Abständen über vMotion zu verschieben, nur um nachzusehen, ob es auch funktioniert.

Eine praktikable Alternative ist es dagegen, lediglich die Kompatibilitätsprüfung für die VMs einer Umgebung durchzuführen, ohne dabei einen tatsächlichen vMotion-Vorgang zu veranlassen. Das ist möglich über VMware PowerCLI, das Modul für Microsofts Skriptsprache Windows PowerShell. Im Objektmodell von PowerCLI gibt es einen sogenannten “VmProvisioningChecker”, der die Kompatibilitätsprüfung einer virtuellen Maschine im Hinblick auf die vMotion-Fähigkeit gegen einen bestimmten Host überprüft.

Nach dem Laden des PowerCLI-Moduls und der Verbindung gegen das entsprechende vCenter über den Befehl Connect-VIServer lässt sich mit der folgenden Funktion dieser “VmProvisioningChecker” auf jede VM in einer Umgebung anwenden.

function Test

abtisVmotionCompatibility ($VM, $VMHost)
{
$si = Get-View ‚ServiceInstance‘
$checker = Get-View $si.Content.VmProvisioningChecker
foreach ($v in $VM)
{
        foreach ($h in $VMHost)
                  {
Write-Output $checker.QueryVMotionCompatibilityEx($v.Id,
$h.Id) |
Select-Object @{
Name = ‚VMHost‘
Expression = { $h }},
                
Expression = { $v }},
@{ Name = ‚Warning‘
Expression = { @($_.Warning.LocalizedMessage)
}},
@{ Name = ‚Error‘
Expression = { @($_.Error.LocalizedMessage) }}
       }
    }
}

Die Parameter der Funktion -VM und -VMHost erlauben jeweils die Verwendung von Arrays, so dass die Kompatibilität aller VMs einer Umgebung im Hinblick auf alle Hosts einer Umgebung mit dem folgenden Befehl überprüft werden kann:

1$compatibilityReport = Test-abtisVmotionCompatibility -VM (Get-VM) -VMHost (Get-VMHost)

Das Ergebnis dieses Befehl ist eine Sammlung aus PowerShell-Objekten, die als Eigenschaften die VM, den potentiellen Zielhost sowie mögliche Warnungen oder Fehler im Hinblick auf vMotion enthalten. Für eine bessere Übersichtlichkeit, kann dieses Ergebnis mit den üblichen Cmdlets wie ConvertTo-Html oder ConvertTo-Csv in eine lesbare Form gebracht werden.

 

Redakt.: Manuel Batsching