Difference between revisions of "Demo scripts Virtuozzo"

From OpenVZ Virtuozzo Containers Wiki
Jump to: navigation, search
m (Update demo "Full container lifecycle")
(add useful links)
Line 27: Line 27:
 
  # prlctl destroy $NAME
 
  # prlctl destroy $NAME
  
== Massive container creation ==
+
== Multiple containers creation ==
  
Create/start 50 or 100 containers in a shell loop. Shows fast deployment
+
Create/start 10 containers in a shell loop.
and high density.
 
  
 
Here are the example commands needed:
 
Here are the example commands needed:
  
 
<pre>
 
<pre>
# time for ((CT=200; CT<250; CT++)); do \
+
# time for ((CT=100; CT<110; CT++)); do \
time prlctl create $CT --ostemplate centos-6-x86_64 --vm-type=ct; \
+
  time prlctl create $CT --ostemplate centos-6-x86_64 --vmtype=ct; \
prlctl start $CT; \
+
  prlctl start $CT; \
> done
+
  done
 
</pre>
 
</pre>
  
Line 49: Line 48:
 
<pre>
 
<pre>
 
# for ((CT=200; CT<250; CT++)); do \
 
# for ((CT=200; CT<250; CT++)); do \
>  vzctl set $CT --ipadd 10.1.1.$CT --save; \
+
  prlctl set $CT --ipadd 10.1.1.$CT/24; \
> done
+
  done
 
</pre>
 
</pre>
  
Line 62: Line 61:
  
 
== Live migration ==
 
== Live migration ==
 +
 +
=== xscreensaver inside container ===
  
 
If you have two boxes, do <code>vzmigrate --online</code> from one box
 
If you have two boxes, do <code>vzmigrate --online</code> from one box
Line 74: Line 75:
 
FIXME: commands, setup, VNC template.
 
FIXME: commands, setup, VNC template.
  
=== CRIU (Checkpoint and Restore In Userspace ===
+
=== CRIU (Checkpoint and Restore In Userspace) ===
  
 +
* [http://criu.org/Simple_loop Simple loop]
 
* [https://github.com/tych0/presentations/blob/master/ods2014.md Migration of Doom inside container inside LXC container]
 
* [https://github.com/tych0/presentations/blob/master/ods2014.md Migration of Doom inside container inside LXC container]
 
* [http://criu.org/Docker Checkpoint and Restore of Docker container]
 
* [http://criu.org/Docker Checkpoint and Restore of Docker container]
 
* [https://github.com/jpetazzo/critmux CRIU + tmux]
 
* [https://github.com/jpetazzo/critmux CRIU + tmux]
* [http://criu.org/Simple_loop Simple loop]
+
 
 +
This is a tech demo of [http://criu.org/ CRIU] and Docker integration, featuring [https://tmux.github.io/ tmux].
 +
 
 +
<pre>
 +
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.
 +
</pre>
 +
 
 +
See [https://asciinema.org/a/9889 screencast] recorded with Asciinema.
 +
 
 
* [http://criu.org/Asciinema CRIU screencasts]
 
* [http://criu.org/Asciinema CRIU screencasts]
 +
 +
=== P.Haul ===
 +
 
* [https://github.com/xemul/p.haul/blob/master/test/mtouch/HOWTO P.Haul HOWTO]
 
* [https://github.com/xemul/p.haul/blob/master/test/mtouch/HOWTO P.Haul HOWTO]
 
* [https://github.com/xemul/p.haul/wiki/Live-migrating-OVZ-mainstream-container Live migrating OVZ mainstream container]
 
* [https://github.com/xemul/p.haul/wiki/Live-migrating-OVZ-mainstream-container Live migrating OVZ mainstream container]
  
 +
== Docker inside CT ==
  
== Docker inside CT ==
+
[[Docker_inside_CT]]
  
 
== Resource management ==
 
== Resource management ==
Line 95: Line 113:
 
<pre>
 
<pre>
 
# while [ true ]; do \
 
# while [ true ]; do \
>    while [ true ]; do \
+
    while [ true ]; do \
>        echo " " > /dev/null;
+
        echo " " > /dev/null;
>    done &
+
    done &
> done
+
done
 
</pre>
 
</pre>
  
Line 109: Line 127:
  
 
=== CPU scheduler ===
 
=== CPU scheduler ===
 
{{Warning|CPU weights only works in stable kernels.}}
 
  
 
Create 3 containers:
 
Create 3 containers:
 
<pre>
 
<pre>
# vzctl create 101
+
# prlctl create 101
# vzctl create 102
+
# prlctl create 102
# vzctl create 103
+
# prlctl create 103
 
</pre>
 
</pre>
  
 
Set container weights:
 
Set container weights:
 
<pre>
 
<pre>
# vzctl set 101 --cpuunits 1000 --save
+
# prlctl set 101 --cpuunits 1000
# vzctl set 102 --cpuunits 2000 --save
+
# prlctl set 102 --cpuunits 2000
# vzctl set 103 --cpuunits 3000 --save
+
# prlctl set 103 --cpuunits 3000
 
</pre>
 
</pre>
  
Line 130: Line 146:
 
Start containers:
 
Start containers:
 
<pre>
 
<pre>
# vzctl start 101
+
# prlctl start 101
# vzctl start 102
+
# prlctl start 102
# vzctl start 103
+
# prlctl start 103
 
</pre>
 
</pre>
  
 
Run busy loops in all containers:
 
Run busy loops in all containers:
 
<pre>
 
<pre>
# vzctl enter 101
+
# prlctl enter 101
 
[ve101]# while [ true ]; do true; done
 
[ve101]# while [ true ]; do true; done
# vzctl enter 102
+
# prlctl enter 102
 
[ve102]# while [ true ]; do true; done
 
[ve102]# while [ true ]; do true; done
# vzctl enter 103
+
# prlctl enter 103
 
[ve103]# while [ true ]; do true; done
 
[ve103]# while [ true ]; do true; done
 
</pre>
 
</pre>
Line 160: Line 176:
 
=== Disk quota ===
 
=== Disk quota ===
 
<pre>
 
<pre>
# vzctl set CTID --diskspace 1048576:1153434 --save
+
# prlctl set CTID --diskspace 1048576:1153434 --save
# vzctl start CTID
+
# prlctl start CTID
# vzctl enter CTID
+
# prlctl enter CTID
 
[ve]# dd if=/dev/zero of=/tmp/tmp.file bs=1048576 count=1000
 
[ve]# dd if=/dev/zero of=/tmp/tmp.file bs=1048576 count=1000
 
dd: writing `/tmp/tmp.file': Disk quota exceeded
 
dd: writing `/tmp/tmp.file': Disk quota exceeded
 
</pre>
 
</pre>
  
 +
 +
== See also ==
 +
 +
* [http://criu.org/Asciinema CRIU screencasts]
 +
* [https://www.youtube.com/c/OpenVZorg OpenVZ demo on Youtube]
 +
* [[Screencasts|Virtuozzo screencasts]]
  
 
[[Category:Events‏‎]]
 
[[Category:Events‏‎]]

Revision as of 21:19, 2 August 2015

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

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

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