Open main menu

OpenVZ Virtuozzo Containers Wiki β

Demo scripts Virtuozzo

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

Contents

Full container lifecycle

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=10.1.1.123/24
# 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

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; \
  done

Massive container load

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; \
  done

On another machine:

# rpm -ihv http_load
# 

FIXME: http_load commands

Live migration

xscreensaver inside container

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)

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.

P.Haul

Docker inside CT

Resource management

Below scenarios aims to show how OpenVZ resource management works.

UBC protection

fork() bomb

# while [ true ]; do \
     while [ true ]; do \
         echo " " > /dev/null;
     done &
 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

FIXME

CPU scheduler

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
COMMAND    %CPU
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

# 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