vm_commit or how to easily handle an infinite number of versions of running qemu/kvm virtual...

116
Vm_commit or How to Easily Handle An Infinite Number of Versions of Running QEMU/KVM Virtual Machines Dominique Rodrigues Cloud Expo 2015 Santa Clara

Upload: dominique-rodrigues

Post on 24-Jan-2017

695 views

Category:

Software


2 download

TRANSCRIPT

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.

HOW WE DO IT

• 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

DOCKER

New orchestration of containers

° clone, pull/push, run, commit °

Hub to share application based containers

VCS oriented (like git)

° edit, share, deploy applications °

Versioning?

GIT

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

ENTERING A VM

ENTERING A VM

ENTERING A VM

ENTERING A VM

ENTERING A VM

ENTERING A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

RUNNING IN A VM

VM_COMMIT

VM COMMIT - HELP

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 COMMIT

VM COMMIT

VM COMMIT

VM COMMIT

VM COMMIT

VM COMMIT

VM COMMIT

VM COMMIT

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