Demo scripts Virtuozzo

From OpenVZ Virtuozzo Containers Wiki
Jump to: navigation, search

The following demo scripts (scenarios) can be used to show advantages of Virtuozzo.

Full container lifecycle[edit]

Create a container, set an IP, start, add a user, enter, exec, show ps -axf output inside the container, stop, and destroy. It should take about two minutes ("compare that to a time you need to deploy a new (non-virtual) server!"). During the demonstration, describe what's happening and why.

Here are the example commands needed:

# NAME=vz
# IP=
# sed -i "/$IP /d" ~/.ssh/
# time prlctl create $NAME --ostemplate centos-6-x86_64 --vmtype=ct
# prlctl set $NAME --ipadd $IP --hostname $NAME
# prlctl start $NAME
# prlctl exec $NAME ps axf
# prlctl set $NAME --userpasswd guest:secret
# ssh guest@$IP
[vz]# ps axf
[vz]# logout
# prlctl stop $NAME
# prlctl destroy $NAME

Multiple containers creation[edit]

Create/start 10 containers in a shell loop.

Here are the example commands needed:

# time for ((CT=100; CT<110; CT++)); do \
  time prlctl create $CT --ostemplate centos-6-x86_64 --vmtype=ct; \
  prlctl start $CT; \

Massive container load[edit]

Use containers from the previous item — load those by ab or http_load. This demo shows that multiple containers are working just fine, with low response time etc.

# for ((CT=200; CT<250; CT++)); do \
  prlctl set $CT --ipadd 10.1.1.$CT/24; \

On another machine:

# rpm -ihv http_load

FIXME: http_load commands

Live migration[edit]

xscreensaver inside container[edit]

If you have two boxes, do vzmigrate --online from one box to another. You can use, say, xvnc in a container and vncclient to connect to it, then run xscreensaver-demo, choose a suitable screensaver (eye-candy but not too CPU aggressive) and while the picture is moving start a live migration. You'll see that xscreensaver stalls for a few seconds but then continues to run — on another machine! That looks amazing, to say at least.

FIXME: commands, setup, VNC template.

CRIU (Checkpoint and Restore In Userspace)[edit]

This is a tech demo of CRIU and Docker integration, featuring tmux.

docker run -t -i --privileged --name critmux jpetazzo/critmux
Do stuff in tmux. Don't know what to do? Just type a few characters.
From another terminal, docker stop critmux. Container stops.
docker start critmux ; docker attach critmux. MIND. BLOWN.
Note: docker start -a doesn't quite work.

See screencast recorded with Asciinema.


Docker inside CT[edit]


Resource management[edit]

Below scenarios aims to show how OpenVZ resource management works.

UBC protection[edit]

fork() bomb[edit]

# while [ true ]; do \
     while [ true ]; do \
         echo " " > /dev/null;
     done &

We can see that the number of processes inside container will not be growing. We will see only the increase of numproc and/or kmemsize fail counters in /proc/user_beancounters.

dentry cache eat up[edit]


CPU scheduler[edit]

Create 3 containers:

# prlctl create 101
# prlctl create 102
# prlctl create 103

Set container weights:

# prlctl set 101 --cpuunits 1000
# prlctl set 102 --cpuunits 2000
# prlctl set 103 --cpuunits 3000

We set next CPU sharing CT101 : CT102 : CT103 = 1 : 2 : 3

Start containers:

# prlctl start 101
# prlctl start 102
# prlctl start 103

Run busy loops in all containers:

# prlctl enter 101
[ve101]# while [ true ]; do true; done
# prlctl enter 102
[ve102]# while [ true ]; do true; done
# prlctl enter 103
[ve103]# while [ true ]; do true; done

Check in top that sharing works:

# top
bash       48.0
bash       34.0
bash       17.5

So, we see that CPU time is given to container in proportion ~ 1 : 2 : 3.

Now start some more busy loops. CPU distribution should remain the same.

Disk quota[edit]

# prlctl set CTID --diskspace 1048576:1153434 --save
# prlctl start CTID
# prlctl enter CTID
[ve]# dd if=/dev/zero of=/tmp/tmp.file bs=1048576 count=1000
dd: writing `/tmp/tmp.file': Disk quota exceeded

See also[edit]