Vm_commitor How to Easily Handle
An Infinite Number of Versions
of Running QEMU/KVM
Virtual Machines
Dominique Rodrigues
Cloud Expo 2015 – Santa Clara
Nanocloud Software?
Turn any software into a
cloud solution.
Any legacy application. Any device. Any cloud.
• Cloud
• Virtualization
• Scalability
• API
• Multi-tenant
• Collaborative
• Statistics usage
• HTML5 display
Main technologies used
Open source version: https://github.com/Nanocloud
About Virtualization
VIRTUALIZATION USE
Server consolidation
Foundation for elasticity & instant deployment
in cloud computing
Massively used in enterprises
About Containerization
DOCKER
New orchestration of containers
° clone, pull/push, run, commit °
Hub to share application based containers
VCS oriented (like git)
° edit, share, deploy applications °
GIT
THE VCS software!
° git clone / commit / push / pull / merge / rebase °
Could VMs be versioned
à la git
or like a Docker container?
INTRODUCING NC_POWER
Internal Nanocloud tools suite
for QEMU & KVM
(Linux based)
CLI
Written in C++
NC_POWER GOALS
Help our developers to fast run any VM
Internal needs of Nanocloud
KISS based
NC_POWER FEATURES
VM management (create, run, stop)
Vm_commit
VM COMMIT - GOALS
Keep a version for any change in a VM
Rollback to any version
Make only incremental changes
Replay any version
All on the fly
Using NC_Power(some examples)
CREATING A VM
JSON definition file (vm.json)
{
"VMs": [
{
"client_id": "docky",
"instance": "nano",
"persistent": "no",
"rental_mod": "free_use",
"os": "linux",
"osversion": "coreos",
"osrelease": "717.3.0",
"local_ip": "",
"public_ip": ""
}
]
}
nc_create_vm --file vm.json
VM_COMMIT
building blocks
BUILDING BLOCK #1: QEMU-IMG
qemu-img create -f qcow2 \
-b vm_basis.qcow2 \
vm_delta_commit.qcow2
BUILDING BLOCK #2: QEMU CONSOLE
echo \
'snapshot_blkdev -n vm_delta_commit.qcow2' \
| socat stdio unix:vm.socket
VM COMMIT -> VM ENV
VM COMMIT -> VM ENV
VM COMMIT -> VM ENV
VM COMMIT -> VM ENV
VM COMMIT -> VM ENV
VM COMMIT -> VM ENV
VM COMMIT -> VM ENV
VM COMMIT -> VM ENV
VM COMMIT -> VM ENV
VM COMMIT -> VM ENV
VM COMMIT -> VM ENV
VM COMMIT -> VM ENV
VM COMMIT -> VM ENV
VM COMMIT -> VM ENV
VM COMMIT - ROLLBACK
VM COMMIT - ROLLBACK
VM COMMIT - ROLLBACK
VM COMMIT - ROLLBACK
VM COMMIT - ROLLBACK
VM COMMIT - ROLLBACK
VM COMMIT - ROLLBACK
VM COMMIT - ROLLBACK
VM COMMIT - ROLLBACK
VM COMMIT - ROLLBACK
VM COMMIT - ROLLBACK
VM COMMIT - ROLLBACK
VM COMMIT - ROLLBACK
VM COMMIT - REBASE
USE CASES
Incremental backups (on the fly, as in Docker)
Application development (versioning, as in Git)
OS upgrades (rollback in case of trouble)
POSSIBILITIES
Backup strategy
Use VMs the same way as containers
Thanks for your attention!
[email protected]
Please commit your (last) questions