Host, a Hypervisor
Guest
Instacja systemu gościa (łącznie z kernelem) zostaje uruchomiona w pamięci i przez specjalne oprogramowanie uzyskuje dostęp do fizycznych zasobów hosta (takich jak procesor, karta graficzna, karty sieciowa)
Intel VT to the rescue!
Przecież pewnie potrzeba kolejnych sterowników!
KVM (Kernel Virtualization Manager) - moduł kernela pozwalający korzystać ze sprzętowego wsparcia wirtualizacji na poziomie systemu hosta
Polega na utworzeniu instacji systemu gościa tzw. kontenera, który uruchamia własne procesy korzystając wciąż z tego samego jądra co host
Opss...
Obydwa zapewniaja rozdział kontenerów od systemu hosta
QEMU+KVM czy VMware czy też może coś innego?
LXC czy OpenVZ? A może Jails?
Bogate wsparcie i szeroko używany w środowiskach produkcyjnych
OpenVZ | LXC |
---|---|
|
|
Wysokopoziomowy interfejs zarządzania wirtualnymi instancjami
#!/bin/bash
# otwarcie interaktywnego shell'a
virsh;
virsh qemu:///system;
virsh list --all; # wywołanie listy instancji
virsh nodeinfo; # informacje o hoście
<domain type="kvm">
<name>dom0</name>
<uuid>a4e195933a4fb0e8ba1dfc29df874de4</uuid>
<os>
<type arch="x86_64">hvm</type>
<boot dev="hd" />
<kernel>/mnt/images/0387162d08a5a81423e8e3c325fb6cd2/saucy-server-cloudimg-amd64-vmlinuz-generic</kernel>
<cmdline>ro init=/usr/lib/cloud-init/uncloud-init root=/dev/vda ds=nocloud ubuntu-pass=ubuntu</cmdline>
</os>
<vcpu placement="static">2</vcpu>
<memory unit="MB">512</memory>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type="file" device="disk">
<source file="/mnt/images/0387162d08a5a81423e8e3c325fb6cd2/saucy-server-cloudimg-amd64.img" />
<target dev="vda" />
</disk>
<console type="pty">
<target port="0" />
</console>
<graphics type="vnc" port="-1" autoport="yes" />
</devices>
</domain>
Konfiguracja w libvirt
<interface type="bridge">
<source bridge="br10" />
<mac address="00:16:3e:5d:c7:9e" />
<model type="virtio" />
</interface>
Gotowa konfiguracja do pobrania z http://lectures.jarosz.in/wirtualizacja/dom.xml
#!/bin/bash
virsh define dom.xml;
virsh start dom0;
#!/bin/bash
virsh destroy dom0;
virsh undefine dom0;
LXC (LinuX Containers)
#!/bin/bash
lxc-create -n container -B lvm --fssize 1G --vgname storage-vg -t ubuntu -- -b user;
lxc-start -n container -d;
lxc-ls --fancy;
Znajdują się w /var/lib/lxc/nazwa_kontenera/
lxc.network.type = veth
lxc.network.hwaddr = 00:16:3e:8b:5c:0a
lxc.network.flags = up
lxc.network.link = lxcbr0
lxc.rootfs = /var/lib/lxc/test/rootfs
lxc.mount = /var/lib/lxc/test/fstab
lxc.pivotdir = lxc_putold
lxc.devttydir = lxc
lxc.tty = 4
lxc.pts = 1024
lxc.utsname = test
lxc.arch = amd64
lxc.cap.drop = sys_module mac_admin mac_override sys_time
# When using LXC with apparmor, uncomment the next line to run unconfined:
#lxc.aa_profile = unconfined
# To support container nesting on an Ubuntu host, uncomment next two lines:
#lxc.aa_profile = lxc-container-default-with-nesting
#lxc.hook.mount = /usr/share/lxc/hooks/mountcgroups
lxc.cgroup.devices.deny = a
# Allow any mknod (but not using the node)
lxc.cgroup.devices.allow = c *:* m
lxc.cgroup.devices.allow = b *:* m
# /dev/null and zero
lxc.cgroup.devices.allow = c 1:3 rwm
lxc.cgroup.devices.allow = c 1:5 rwm
# consoles
lxc.cgroup.devices.allow = c 5:1 rwm
lxc.cgroup.devices.allow = c 5:0 rwm
# /dev/{,u}random
lxc.cgroup.devices.allow = c 1:9 rwm
lxc.cgroup.devices.allow = c 1:8 rwm
lxc.cgroup.devices.allow = c 136:* rwm
lxc.cgroup.devices.allow = c 5:2 rwm
# rtc
lxc.cgroup.devices.allow = c 254:0 rm
# fuse
lxc.cgroup.devices.allow = c 10:229 rwm
# tun
lxc.cgroup.devices.allow = c 10:200 rwm
# full
lxc.cgroup.devices.allow = c 1:7 rwm
# hpet
lxc.cgroup.devices.allow = c 10:228 rwm
# kvm
lxc.cgroup.devices.allow = c 10:232 rwm
lxc-cgroup -n kontener nazwa.cgroup
Ale skąd wziąć nazwę cgroup?
#!/bin/bash
mount; #szukamy cgroups
ls /katalog_z_mount/; # i to wszystko
Przykład rozwiązania
#!/bin/bash
lxc-cgroup -n kontener memory.limit_in_bytes `expr 256 \* 1024 \* 1024`;
lxc-cgroup -n kontener cpu.shares 256;
Propozycje tematów kolejnych prezentacji i warsztatów
Budowanie klastrów
Zaawansowane sieci dla maszyn wirtualnych