Guide to Operations

Anatomy of a Virtual Machine

Een VM heeft 3 componenten:

Network

Disclaimer: subject to change

Alles is verbonden met het intern netwerk (192.168.0.0/24) via een switch. De admin interfaces van de kvm nodes zijn verbonden via dezelfde NIC als de verbinding van de server zelf. De kvm en ceph nodes zijn daarbij ook nog met elkaar verbonden via een ‘backend’ netwerk (192.168.10.0/24) via een aparte switch. De ceph nodes zijn met dit netwerk verbonden met 2 NICs die geteamed zijn. De kvm nodes hebben externe IP adressen die toegankelijk zijn vanaf de buitenwereld, die gebeurt via VLAN’s (193.. adressen).

Cluster Operations

Algemene status van de cluster kun je op elke kvm node zien je met

pcs status

By default staat de cluster uit en moet die aangezet worden. De volledige cluster starten en stoppen kan op eender welke kvm node:

pcs cluster start --all
pcs cluster stop --all

Een specifieke node uit de cluster halen voor bv. hardware maintanance:

pcs cluster stop <node> # <node> weglaten = huidige node
# en starten (kan ook op eender welke node)
pcs cluster start <node>

cluster stop operaties kunnen even duren omdat VM’s eerst moeten worden gemigreerd of uitgezet.(dit gebeurt automatisch)

Een node in standby zetten, d.i. een node die deel van de cluster is maar geen resources mag hosten:

pcs node standby <node>
# uit standby halen
pcs node unstandby <node>

VM’s aan-/uitzetten

pcs resource enable <vm-naam>
pcs resource disable <vm-naam>

VM’s migreren:

pcs resource move <vm-naam> <node>

Bij het migreren moet men er wel van bewust zijn dat Pacemaker ook andere VM’s gaat verplaatsen om zo een optimale “spreiding” te behouden.

Een processor kan veel sneller geheugen aanpassen dan dat die zijn geheugen over het netwerk kan verstuurd worden. Een VM migreren met heel zware load kan hierdoor falen.

VM’s op een volgorde laten starten

pcs constraint order <vm-naam> then <andere-vm-naam>

VM’s op een bepaalde host zetten

pcs constraint location <vm-naam> prefers <kvm-node>=<nummer>

VM’s altijd op dezelfde/verschillende hosts zetten

pcs constraint colocation add <vm-naam> with <andere-vm-naam> <nummer>

TODO resource-stickiness TODO ordering is blijkbaar speciaal

Disk Operations

Snapshots

De VM moet eerst uit staan.

rbd snap create kvm-data/<image-naam>@<snap-naam>

Men kan die disk image dan terug ‘restoren’ naar die snapshot met:

rbd snap rollback kvm-data/<image-naam>@<snap-naam>

Deze rollback kan wel even duren.

Clones

Om disks te clonen moet je eerst een snapshot hebben en die read-only is. Read-only maken gaat zo:

rbd snap protect kvm-data/<image-naam>@<snap-naam>

Dan pas kun je de snapshot clonen.

rbd clone kvm-data/<image-naam>@<snap-naam> kvm-data/<nieuwe-image>

Clonen gaat instant omdat dit COW clonen zijn. Dit is dus ook veel sneller dan rollbacks. Men kan een volledige kopie maken van deze COW clone met:

rbd flatten kvm-data/<image-naam>

Resizen

Als een nieuwe VM een clone is van een base image kan het zijn dat die image vrij klein is.

rbd resize --size 10G kvm-data/<image-naam>

Dit maakt de enkel de disk groter. De partities van de VM zelf zullen binnen de VM groter gemaakt moeten worden. Een partitie vergroten kan met:

parted
# in de parted shell
> print
> resizepart

Een ext4 filesysteem kan dan vergroot worden met resize2fs /dev/<partitie> zonder meer. Die zoekt zelf de maximale grote uit. Partities/filesystems resizen kan allemaal terwijl de VM runt.

Nieuwe VM maken

Zie het Clones hoofdstuk voor een bestaande image te kopieren. Als men toch zelf een wilt maken kan dit zo op een ceph node:

qemu-img create -f rbd rbd:kvm-data/<image-naam> <grootte-in-gigabytes>G

Log dan in op een kvm node en kopieer example.xml in /mnt/xmlStorage/vm-xml naar /mnt/xmlStorage/vm-xml/<vm-naam>.xml en pas de waardes tussen de curly brackets aan ({{ variable }}). Een uuid kan je genereren met uuidgen. Er zijn ook 3 netwerk interfaces gedefineerd (<interface type='network'> blokken). Meestal heb je daar maar 1 van nodig en mag je de rest verwijderen. extern verweist naar de externe VLAN, intern naar 192.168.0.0/24 interne ulyssis netwerk en ceph naar het 192.168.10.0/24 backend netwerk.

Het volgende veel te lange commando zal dan de nieuwe VM in de cluster aanmaken en starten.

pcs resource create <naam> VirtualDomain hypervisor="qemu:///system" config="/mnt/xmlStorage/vm-xml/<vm-naam>.xml" migration_transport=ssh migration_network_suffix=".backend" op start timeout="120s" op stop timeout="120s" monitor timeout="30" interval="10" meta allow-migrate="true" priority="100" op migrate_from interval="0" timeout="120s" op migrate_to interval="0" timeout="120"

Run pcs status om te kijken om welke kvm node de VM draait en log dan daar op in. Als men een bestaande image heeft gekopieerd kan men inloggen op een VM ookal heeft die nog geen netwerk met:

virsh console <vm-naam>