Lxc

From ICO wiki
Jump to navigationJump to search

Sissejuhatus

Linuxi konteinerid ehk Linux Conteiners(LXC) on tehnoloogia mis kasutab Linuxi tuuma control groups(cgroups) funktsionaalsust, mis võimaldab jooksutada mitut isoleeritut Linuxi operatsioonisüsteemi, host masinas ühe jagatud kerneli peal. Lihtsamalt seletades jagab ühe arvuti resursse mitme konteineri vahel ja kasutatakse ühist kernelit. Resursside jagamise eest vastutabki control groupsi funktsionaalsus kernelis. Namespace selle eest, et konteinerid oleksid ükteisest eraldatud, ühe konteineri seest ei saaks ligi teise teenustele. LXC on kasutatav alates kernelist 2.6.24

Taust

Näide, kus masinas jookseb mitu konteinerit ja neis on erinevad teenused. Teenused on ära jagatud konteinerite peale nt: wiki, git, pastebin, proxy server.

  |-lvmetad
       |-lxc-autostart---systemd-+-5*[agetty]
       |                         |-cron
       |                         |-dhclient
       |                         |-mysqld---27*[{mysqld}]
       |                         |-rsyslogd-+-{in:imklog}
       |                         |          |-{in:imuxsock}
       |                         |          `-{rs:main Q:Reg}
       |                         `-systemd-journal
       |-lxc-autostart---systemd-+-5*[agetty]
       |                         |-cron
       |                         |-dbus-daemon
       |                         |-dhclient
       |                         |-gogs---9*[{gogs}]
       |                         |-nginx---2*[nginx]
       |                         |-postgres---7*[postgres]
       |                         |-rsyslogd-+-{in:imklog}
       |                         |          |-{in:imuxsock}
       |                         |          |-{rs:action 10 qu}
       |                         |          `-{rs:main Q:Reg}
       |                         |-sshd---sshd---sshd
       |                         |-systemd-journal
       |                         `-systemd-logind
       |-lxc-autostart---systemd-+-5*[agetty]
       |                         |-apache2---6*[apache2]
       |                         |-cron
       |                         |-dbus-daemon
       |                         |-dhclient
       |                         |-mysqld---34*[{mysqld}]
       |                         |-php-fpm7.0---2*[php-fpm7.0]
       |                         |-rsyslogd-+-{in:imklog}
       |                         |          |-{in:imuxsock}
       |                         |          |-{rs:action 10 qu}
       |                         |          `-{rs:main Q:Reg}
       |                         |-sshd
       |                         |-systemd-journal
       |                         `-systemd-logind
       |-lxc-autostart---systemd-+-5*[agetty]
       |                         |-apache2---5*[apache2]
       |                         |-cron
       |                         |-dbus-daemon
       |                         |-dhclient
       |                         |-logger
       |                         |-mysqld_safe-+-logger
       |                         |             `-mysqld---23*[{mysqld}]
       |                         |-rsyslogd-+-{in:imklog}
       |                         |          |-{in:imuxsock}
       |                         |          |-{rs:action 10 qu}
       |                         |          `-{rs:main Q:Reg}
       |                         |-sshd
       |                         |-systemd-journal
       |                         `-systemd-logind
       |-lxc-autostart---systemd-+-5*[agetty]
       |                         |-cron
       |                         |-dbus-daemon
       |                         |-dhclient
       |                         |-gunicorn---gunicorn
       |                         |-nginx---2*[nginx]
       |                         |-nrpe
       |                         |-rsyslogd-+-{in:imklog}
       |                         |          |-{in:imuxsock}
       |                         |          |-{rs:action 10 qu}
       |                         |          `-{rs:main Q:Reg}
       |                         |-sshd
       |                         |-systemd-journal
       |                         `-systemd-logind
       |-lxc-autostart---systemd-+-5*[agetty]
       |                         |-cron
       |                         |-dbus-daemon
       |                         |-dhclient
       |                         |-nginx---2*[nginx]
       |                         |-rsyslogd-+-{in:imklog}
       |                         |          |-{in:imuxsock}
       |                         |          |-{rs:action 0 que}
       |                         |          `-{rs:main Q:Reg}
       |                         |-systemd-journal
       |                         `-systemd-logind
       |-lxcfs---10*[{lxcfs}]
       |-mdadm

Kindlasti tähelepanu tõmmata sellele, et mis teenused juba vaikimisi töötavad nagu näiteks ssh server.

Masinate juurfailisüsteem asub vaikimis kaustas.

/var/lib/lxc/masinanini

Installitud masinate puhver asub kaustas /var/chache/lxc/ Seda kasutatakse siis, kui luuakse sama distributsiooniga konteinerid, siis pole vaja uuesti uut konteinerit seadistada vaid tõmmatakse vajalikud failid puhvrist.

Vajalikumad käsud

lxc-create - tehakse uus konteiner
lxc-start - käivitatakse konteiner
lxc-console - ühendab konteineris oleva masina terminaliga.
lxc-attach - alustab protsessi konteiner masinas, kui ühtegi parameetrit juurde ei anta, siis võetakse host masina konsool ja ühendatakse see
konteineriga. Näiteks oled host masinas juurkasutajaga sisse logitud, siis tuleb ette juurkasutaja konsool ka konteineris(ehk konteineris peab olema selline kasutaja).
lxc-stop - sulgeb masina

Seadistamine

Paigaldamine

Installime linux konteineri ja mallid millega teha konteinereid.

apt-get install lxc lxc-templates bridge-utils

Konteinerite tegemine

lxc-create -n test -t ubuntu -- -r xenial

-n masina nimi
-t Millise malli põhjal tahad teha
-- malli seadistused
-r väljalaske kood nimetus

Näha milliseid seadistusi mall toetab kasutada käsku
lxc-create -t MALL -h

Haldamine ja seadistamine

Konteineri kävitaimnine

lxc-start -n test -d

Konteineriga on võimalik ühendda kahte moodi

lxc-attach -n test

või, kus võetakse ette konteineri konsool ja tuleb kasutajaga sisselogida.

lxc-console -n test

Malli seaded

Vaikimisi malli seaded asuvad failis. Need seadistused rakenduvad uutele konteineritele mis tehakse, näiteks kui tahad, et masin kasutaks vaikimis teist võrgu liidest, siis muudad liidese ära.

/etc/lxc/default.conf

Lisades rea

lxc.start.auto = 1

Läheb konteiner automaatselt tööle, kui host masin on ka tööle läinud.

Iga masina seaded asuvad eraldi failis

/var/lib/lxc/masinanimi/config

Mallid asuvad kaustas:

/usr/share/lxc/templates/

Vaikimis tuleb kaasa erinevate linuxite mallid.

lxc-alpine     lxc-centos    lxc-fedora        lxc-oracle      lxc-sshd
lxc-altlinux   lxc-cirros    lxc-gentoo        lxc-plamo       lxc-ubuntu
lxc-archlinux  lxc-debian    lxc-openmandriva  lxc-slackware   lxc-ubuntu-cloud
lxc-busybox    lxc-download  lxc-opensuse      lxc-sparclinux

Võrgu seadistamine

Vaikimisi tehakse uus sild nimega lxcbr0, kuhu külge tulevad konteinerite liidesed. Kus töötab oma dhcp server ja dns kirjed saadakse host masinast.

Dhcp spooli fail asub

/etc/default/lxc-net

Siin on vaikimisi faili sisu, kui tahate muuta spooli suurust, siis siit saab muuta.

# This file is auto-generated by lxc.postinst if it does not
# exist.  Customizations will not be overridden.
# Leave USE_LXC_BRIDGE as "true" if you want to use lxcbr0 for your
# containers.  Set to "false" if you'll use virbr0 or another existing
# bridge, or mavlan to your host's NIC.
USE_LXC_BRIDGE="true"

# If you change the LXC_BRIDGE to something other than lxcbr0, then
# you will also need to update your /etc/lxc/default.conf as well as the
# configuration (/var/lib/lxc/<container>/config) for any containers
# already created using the default config to reflect the new bridge
# name.
# If you have the dnsmasq daemon installed, you'll also have to update
# /etc/dnsmasq.d/lxc and restart the system wide dnsmasq daemon.
LXC_BRIDGE="lxcbr0"
LXC_ADDR="10.0.3.1"
LXC_NETMASK="255.255.255.0"
LXC_NETWORK="10.0.3.0/24"
LXC_DHCP_RANGE="10.0.3.2,10.0.3.254"
LXC_DHCP_MAX="253"


Selleks, et saaksime konteineritele anda ka sisevõrgu ip, teeme host masina silla mis on kokku sillatud füüsilise võrgu liidesega.

Selleks on vaja kindlasti installida järgnev pakett.

apt install bridge-utils

Teeme vajalikud muudatused failis /etc/network/interfaces

auto lo
 iface lo inet loopback

auto br0
 iface br0 inet dhcp
   # Lisa füüsiline eth0 silla koosseisu
   bridge_ports eth0

# Eemalda võrguliidese definitsioon füüsilise võrguliidese jaoks:

#auto eth0
#iface eth0 inet ...

Turvalisus

Väga oluline on meeles pidada, et konteineri turvalisusele peab sama palju tähelepanu pöörama, kui eraldiseisvale füüsilisele masinale. Konteineris olevat tarkvara peab ka uuendama, suhtumine et mul asjad jooksevad konteineris las murravad sisse on väga vale suhtumine.