Es gab wieder einmal eine spannende Anforderung, welche ein VMware PowerCLI Script erforderte – ein vSphere VM Disk IO Report und und das setzen von IO Limits.
Inhalt der Anforderung war die bessere Kontrolle und Regulierung von Storage Klassen. Konkret bedeutet das, wenn sich eine VM Disk auf einem Datastore der Klasse Bronze (NL Disks) befindet, muss diese im Bezug auf IOPS limitiert werden, um eine Überlastung der unterliegenden Disks zu vermeiden.
Nach einer Diskussion über mögliche Optionen blieb nur die Variante der VMware VM Disk Limits übrig. Auch diese Lösung ist allerdings nicht die optimale, denn es gibt ein paar Sonderfälle.
Sonderfälle bezüglich des VM Disk IO Report und der IO Limits
- Falls eine VM mehrere (z.B. zwei) Disks auf dem gleichen Datastore der Klasse Bronze hat und jede Disk auf 250 IOPS limitiert wird, kann Disk zwei bis zu 500 IOPs nutzen, wenn Disk eins keine Last verursacht.
Diese und andere Situationen werden genau in dem VMware KB Limiting disk I/O from a specific virtual machine beschrieben. Auch Duncan Epping (@DuncanYB) hat sich dieses Problem in seinem Artikel Limit a VM from an IOps perspective vorgenommen.
Um eine Entscheidungsgrundlage zu haben, habe ich ein VMware PowerCLI Script zum Reporten der aktuellen Situation erstellt.
Der VM Disk IO Report sollte folgendes zeigen
- VMs, welche das Limit erreicht haben, mit allen Disks
- Storage Klasse aller Disks der VM
- Geplantes Limit aller Disks der VM
- Maximale IOPs aller Disks der VM in der letzten Woche
- Disk, welche das Limit erreicht hätte, hervorgehoben
Integriert in den vSphere vCheck von Alan Renouf (@alanrenouf) sieht das Ganze dann so aus (Ausschnitt):

vSphere vCheck – IOPS Limit Pugin
GitHub Gist:
Für die Durchsetzung der Limits ist allerdings ein noch etwas detaillierterer Report von Nöten gewesen.

PowerShell IOPS Report – Alle VMs

PowerShell IOPS Report – Betroffene VMs
VM Disk IO Report Script
GitHub Gist:
Aus dem Report wir durch die aktuell auskommentierten Zeilen auch das Script zum Durchsetzen der gewünschten Limits.
Falls jemand einen anderen und vielleicht auch eleganteren Weg kennt, würde ich mich über einen Kommentar sehr freuen.
Neue Versionen
Version 1.1 – 03.2016
- Neu: Ausschluss von VMs per Namen möglich
Version 1.2 – 04.2016
- Neu: Ausschluss von RAW-Devices
Version 1.3 – 08.2016
- Neu: Report-Ausgabe Sektion für Fehlerkonfigurationen
- Optimierung: PS Header
- Optimierung: PS Region definitions
- Optimierung: PS Required definitions
Inspirationen
VMware Community – Setting VMDK IO Limits via PowerCLI – BCO2649
https://communities.vmware.com/thread/485386
LucD Notes – Get the maximum IOPS
http://www.lucd.info/2011/04/22/get-the-maximum-iops/
Reporting Script Changelog:
2016.03 ver 1.0 Base Release
2016.03 ver 1.1 Added VM Limit-Exclusion by Name
2016.04 ver 1.2 Added Disk Limit-Exclusion for „Independent Persistent“ Disks
Reporting Script Changelog:
2016.08 ver 1.3 Added Format and Misconfiguration Report