LXC
LXC (Linux containers) skup je alata i metoda baziranih na mogućnosti kontrolnih grupa (cgroups) Linux kernela kojima se omogućuje izolacija procesa, korisnika, mreža i sl. od matičnog sustava: razina izolacije slična je virtualizacijskim tehnikama, ali je ograničenje u tome što sustav u spremniku/kontejneru dijeli isti kernel s matičnim sustavom, dok u usporedbi s chrootom LXC omogućuje puno veću fleksibilnost i upravljanje virtualnim resursima (ne samo datotekama).
Sadržaj
Instalacija na primjeru Fedore
- instalacija LXC paketa (lxc, lxc-templates, dnsmasq...)
dnf install lxc lxc-templates lxc-extra
- instalacija dodatnih paketa potrebnih za ovaj vodič:
dnf install debootstrap
- podešavanje mrežnog pristupa preko systemd servisa (donekle prema [1]): lxc-net.service; za različite pristupe vidjeti [2]; moguće je korištenje i libvirtd daemona [3] - ali u tom slučaju potrebno je koristiti neke pretpostavljene značajke takvog pristupa (preporučljivo ukoliko se već koristi libvirtd na istom sustavu)
- u /etc/sysconfig/lxc potrebno je omogućiti LXC bridge:
USE_LXC_BRIDGE="true"
- nakon toga, u većini distribucija postoji već pripremljeni systemd servis koji stvara mrežni most, omogućuje ga, postavlja IP adrese u 10.0.3.0 subnetu (10.0.3.1 je adresa matičnog sustava, dok se 10.0.3.x dodjeljuju spremnicima: informacije o dodjeljenim IP-ovima dnsmasq sprema u /var/lib/misc/dnsmasq.lxcbr0.leases)
systemctl enable lxc-net systemctl start lxc-net
- omogućavanje opcije automatskog pokretanja LXC spremnika pri pokretanju sustava:
systemctl enable lxc systemctl start lxc
- s ovim mrežnim postavom u /etc/lxc/default.conf predstoji još dodati informacije o mreži koje će uključivati svi spremnici:
lxc.network.type = veth lxc.network.link = lxcbr0 lxc.network.flags = up lxc.network.hwaddr = 00:16:3e:xx:xx:xx
Predlošci u LXC-u
LXC omogućuje izradu spremnika na temelju predložaka (templates), a s paketom lxc-templates već dolazi mnogo pripremljenih (popis se može naći obično u /usr/share/lxc/templates/). Postoji i download predložak preko kojeg se mogu direktno preuzeti gotove slike iz repozitorija images.linuxcontainers.org.
Stvaranje novog spremnika iz predloška postiže se s lxc-create naredbom, npr.
lxc-create --template download --name mojspremnik
gdje je --template (ili samo -t) naziv predloška iz kojeg se spremnik kreira, a --name (-n) je naziv tog (budućeg) spremnika.
Opcije download-predlošku, odnosno skripti, mogu se proslijediti i direktno, npr.
lxc-create --template download --name fedora23 -- --dist fedora --release 23 --arch amd64 lxc-create --template download --name ubuntu_i386 -- --dist ubuntu --release precise --arch i386
ili kraće -d, -r i -a za distribuciju, izdanje i arhitekturu.
Osnovne naredbe
- lxc-create --name imespremnika - naredba za stvaranje novog spremnika (obično će se spremnik stvoriti u '/var/lib/lxc' ako nije drugačije naznačeno s opcijom --dir ili s default.conf)
- lxc-start --name imespremnika - pokreće spremnik (treba paziti na opciju --daemon/-d koja je na nekim distribucijama zadana, a na nekima ne - u pravilu se želi pokrenuti spremnik u pozadini, s --daemon)
- lxc-ls --fancy - popis spremnika s dodatnim informacijama, bez -f, odnosno --fancy ispisuje samo popis
- lxc-checkconfig - provjerava postavke sustava i kernela kako bi se ustanovilo podržava li sustav LXC spremnike
- lxc-destroy --name imespremnika - uklanja, odnosno briše spremnik zadanog naziva
- lxc-stop --name imespremnika - zaustavlja spremnik (obrnuto od lxc-start)
- lxc-attach --name imespremnika - ulaženje u spremnik (obično direktno kao root korisnik, ako se ne koristi --elevated-privileges=PRIVILEGES)
- lxc-top - prikaz potrošnje resursa pokrenutih spremnika
- lxc-snapshot - spremanje trenutnog stanja spremnika
Popis svih naredbi abecednim redom:
lxc-attach lxc-autostart lxc-cgroup lxc-checkconfig lxc-checkpoint lxc-config lxc-console lxc-copy lxc-create lxc-destroy lxc-device lxc-execute lxc-freeze lxc-info lxc-ls lxc-monitor lxc-snapshot lxc-start lxc-stop lxc-top lxc-unfreeze lxc-unshare lxc-usernsexec lxc-wait
Dodatne opcije
Sljedeće opcije dodaju se za svaki spremnik posebno u /var/lib/lxc/<imespremnika>/config (ili, ako se baš želi, u /etc/lxc/default.conf):
- limitiranje broja jezgri po spremniku:
lxc.cgroup.cpuset.cpus = 0-1 # 2 jezgre
- automatski start spremnika pri pokretanju sustava:
lxc.start.auto = 1 lxc.group = onboot
- dostupnost X11 servera, kao i audio i video uređaja unutar spremnika:
# mounts # fix for X11 (non-debian-based distro) https://lists.linuxcontainers.org/pipermail/lxc-users/2015-February/008468.html lxc.mount.entry = tmpfs tmp tmpfs defaults lxc.mount.entry = /dev/dri dev/dri none bind,optional,create=dir lxc.mount.entry = /dev/snd dev/snd none bind,optional,create=dir lxc.mount.entry = /tmp/.X11-unix tmp/.X11-unix none bind,optional,create=dir lxc.mount.entry = /dev/video0 dev/video0 none bind,optional,create=file
Dodatno: podešavanje firewalld-a (CentOS)
firewall-cmd --direct --passthrough ipv4 -I FORWARD -i lxcbr0 -j ACCEPT firewall-cmd --direct --passthrough ipv4 -I FORWARD -o lxcbr0 -j ACCEPT