lxc · 2016-05-05 · lxc - linux containers lxc - virtualizacijos sprendimas gebantis paleisti...

49
LXC Įrankis eksperimentams Sergej Kurakin

Upload: others

Post on 03-Aug-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

LXCĮrankis eksperimentams

Sergej Kurakin

Page 2: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Sergej KurakinProgramuotojas.

Page 3: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

LXC - Linux Containers

LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”.

Viskas veikia operacinės sistemos lygyje.

Veikia su “vanilla Linux kernel” - žymiai lengviau įdiegti.

Dabar tapo pakankamai populiarus.

https://linuxcontainers.org/

Page 4: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Kam man reikalingas LXC?

Noriu išmokti kažko naujo.

- Aš jau išbandžiau: VMWare, VirtualBox, KVM, kažkiek Docker.

Man tenka daryti eksperimentus su programine įranga:

- Diegti skirtingas PĮ versijas.- Kompiliuoti iš “source” su skirtinais “patch”.- Diegti ir išmokti konfiguruoti didelio prieinamumo

sprendimus.

Page 5: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Kaip man padeda LXC?

Sukuria izoliuotą konteinerį, kuriame aš galiu atlikti eksperimentus.

Eksperimentas neužteršia savo veiksmais “host” sistemos.

Minimalus “overhead” švaistant resursus virtualizacijai.

Page 6: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Kodėl ne “full virtualization”?

● Kartais reikalauja per daug “host” resursų.● “Guest” paruošimas užima per daug laiko.● Eksperimentams nereikia visų jos galimybių.● Kartais tai tik resursų švaistimas.● Kartais tu tiesiog neapskaičiuoji resursų.

Bet yra užduočių, kai be “full virtualization” nieko nepadarysi.

Page 7: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia
Page 8: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Kodėl ne Docker?

● Dažniausiai, kai aš darau eksperimentą, aš dar nežinau, kaip teisingai padaryti “build” su Docker.

● Dažniausiai aš nežinau kur bus daromas “ship” ir ar ten bus Docker.● Man nepatinka tas teorinis apribojimas: “one container - one process” ir

siūlomi “workaround”.● Darant eksperimentus man žymiai lengviau kažką tvarkyti per SSH.● Man nereikia galvoti apie “data container”.● Man nereikia taikytis prie Docker tinklo.

Page 9: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Diegimas

Diegimas yra labai paprastas. Bent Ubuntu 14.04 LTS ir Debian 8.

sudo apt-get install lxc

Page 10: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Konteinerio sukūrimas

sudo lxc-create -t download \ -n contname -- --dist ubuntu \ --release trusty --arch amd64

Page 11: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Konteinerio sunaikinimas

sudo lxc-destroy -n contname

Page 12: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Konteinerio paleidimas

sudo lxc-start -n contname -d

Page 13: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Konteinerio sustabdymas

sudo lxc-stop -n contname

Page 14: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Prisijungti prie konteinerio

sudo lxc-attach -n contname

sudo lxc-console -n contname

Page 15: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Naudingos komandos

sudo lxc-ls -f

sudo lxc-info -n contname

Page 16: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Konteinerių tipai

● unprivileged container, created as user

● unprivileged container, created as root

● privileged container, created as root

Page 17: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Kokios yra galimybės

Klonavimas (clone)

Įšaldymas (freeze)

Momentinė nuotrauka (snapshot)

Efemeriškas paleidimas (ephemeral)

Page 18: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Palaikomos distribucijos

● alpine● altlinux● archlinux● busybox● centos● cirros● debian● fedora

● gentoo● openmandriva● opensuse● oracle● plamo● ubuntu● ubuntu-cloud

Page 19: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Kur viskas saugoma? backingstores!

● none/dir - katalogas kietajame diske● btrfs - “b-tree” “copy-on-write” failų sistema● lvm - Logical Volume Management● overlayfs - “union mount” failų sistema● zfs - ZFS failų sistemą

none/dir - /var/lib/lxc/<container>

Page 20: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Tinklo tipai

● empty - tik loopback● veth - peer network device● vlan - vlan interface● macvlan - mac vlan interface● phys - tikra tinklo korta “perduodama” į konteinerį

Labai geras straipsnis apie tinklo konfiguravimą http://containerops.org/2013/11/19/lxc-networking/

Page 21: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Demonstracija

Page 22: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Sukurkime vieną konteinerį

sudo lxc-create -t download \ -n redis1 -- --dist ubuntu \ --release trusty --arch amd64

Page 23: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Sukurkime kitą konteinerį

sudo lxc-create -t download \ -n redis2 -- --dist ubuntu \ --release trusty --arch amd64

Page 24: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

“Įjunkime” mūsų konteinerius

sudo lxc-start -n redis1 -dsudo lxc-start -n redis2 -d

Page 25: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Prisijunkime su “lxc-attach”

sudo lxc-attach -n redis1sudo lxc-attach -n redis2

Page 26: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Įdiekime Redis ir jo įrankius

apt-get install redis-serverapt-get install redis-tools

Page 27: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Prikelkime Redis replicakcija

Bandymo metu “redis1” bus “Master”, “redis2” bus “Slave”.

Abu Redis serverius perkeliam ant “public” tinklo.

Prisijngiam prie Redis: redis-cli ir paleidžiam “info” kad įsitikintume kad jie veikia.

“redis2” paleidžiame komanda:

SLAVEOF redis1 6379

Patikrinam, ar replikacija veikia.

Page 28: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Prisijunkime su “lxc-console”

sudo lxc-console -n redis1sudo lxc-console -n redis2

Page 29: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Kaip išeiti iš “lxc-console”

<Ctrl+a q>

Page 30: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Sukurkime dar vieną konteinerį

sudo lxc-create -t download \ -n web -- --dist ubuntu \ --release trusty --arch amd64

Page 31: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

“Įjunkime” mūsų naują konteinerį

sudo lxc-start -n web -dsudo lxc-attach -n web

Page 32: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Įdiekime NGINX ir PHP

apt-get install nginx \ php5-fpm php5-redis

Page 33: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Paprastas PHP ir Redis panaudojimas

$redis = new Redis();$redis->connect('redis1', 6379);

echo $redis->incr('test-increment');

$redis->close();

Page 34: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Informacija apie konteinerius

sudo lxc-info -n websudo lxc-info -n redis1sudo lxc-info -n redis2

Page 35: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

“Išjungiam” konteinerius

sudo lxc-stop -n websudo lxc-stop -n redis1sudo lxc-stop -n redis2

Page 36: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Sunaikinam konteinerius

sudo lxc-destroy -n websudo lxc-destroy -n redis1sudo lxc-destroy -n redis2

Page 37: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

O kam teko susidurti su:Vagrat + VirtualBox + NFS/Samba

Page 38: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Lėtoka?

Page 39: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

O gal pabandom kitaip ir su LXC

LXC konteineris išnaudoja “host” failų sistemą konteinerio failams saugoti:/var/lib/lxc/<container name>/rootfs

O ką jei butu galima įkelti katalogą iš “host” į konteinerį?

Pasirodo tai yra įmanoma!

Tik reikia įdėti truputi pastangų. Ir ateiti tai gali pasikeisti...

Page 40: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Kaip tai padaryti?

Page 41: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

“Host” sukuriame katalogą

mkdir ~/hostfolder

Page 42: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Ir reikia žinoti savo UID ir GID

Tam kad kiltu kuo mažiau problėmų dėl “permissions” mes sinhronizusime savo vartotoją su “konteinerių”:

id -u

id -g

Page 43: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Sukurkime konteinerį

sudo lxc-create -t download \ -n linkingtest -- --dist ubuntu \ --release trusty --arch amd64

Page 44: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Paruoškime konteinerio “vidurius”

sudo lxc-start -n linkingtest -d

sudo lxc-attach -n linkingtest

mkdir /outsideworld

deluser ubuntu

adduser --uid 1000 <your username>

<Ctrl+D>

sudo lxc-stop -n linkingtest

Page 45: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Pakeiskime konteinerio konfiguraciją

sudo -i

cd /var/lib/lxc/linkingtest

vim config

# Custom mount

lxc.mount.entry = /home/skurakin/hostfolder outsideworld none bind 0 0

Page 46: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Paleiskime mūsų konteinerį

sudo lxc-start -n linkingtest -d

Page 47: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Kaip man padėjo LXC?

Jo pagalba esu paleidęs MongoDB klasterį, kur buvo 3 “Shard” po 3 “Replica Set” ir 3 “Config” serveriai ir 1 “Router”.

Jo pagalba dariau “Demo” per Redis pranešimus čia tiesiai prieš Jus

Jo pagalba mokiausi RabbitMQ integracijos su PHP ir NodeJS.

Jo pagalba studijuoju Redis Sentinel ir Redis Cluter.

Jo pagalba pasiruošiau Selenium WebDriver diegimui į Linux-VServer aplinką.

Adaptavau asmeniniam darbui, pakeičiau VirtualBox į LXC konteinerį.

Page 48: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Kaip man dar padėjo LXC?

Dėl LXC aš iš Windows sugrįžau prie į Ubuntu Linux.

Daugiau jokios nepatogios Windows konsolės, jokių Windows 10, jokių problemų dėl “line end”.

Tai man padėjo atsikratyti kompiuterinių žaidimų ir skirti laisvą laiką savarankiškoms studijoms.

Page 49: LXC · 2016-05-05 · LXC - Linux Containers LXC - Virtualizacijos sprendimas gebantis paleisti kelias izoliuotas Linux sistemas (konteinerius) viename Linux “host”. Viskas veikia

Laikas diskusijai

Sergej Kurakin

@paštas: [email protected]

https://www.linkedin.com/in/sergejkurakin