LXC sta per Linux Containers.
I container Linux sono metodi di "virtualizzazione" leggeri che eseguono più unità virtuali contemporaneamente su un singolo host di controllo su un singolo kernel Linux.
Il kernel Linux contiene cgroups per l'isolamento delle risorse (CPU, memoria, block I/O, rete, ecc.), che non richiede l'avvio di macchine virtuali.
Cgroups fornisce anche l'isolamento dello spazio dei nomi per isolare completamente l'applicazione visualizzazione dell'ambiente operativo, inclusi alberi di processo, reti, ID utente e filesystem montati.
LXC è un software open source e concesso in licenza con licenza GNU LGPLv2.1+.
I container utilizzano effettivamente le funzionalità del kernel chiamate namespace, cgroups e chroots, per ritagliarsi un'area contenuta.
Quindi, il risultato finale di LXC assomiglia molto a una macchina virtuale, ma senza hypervisor.
1. Prerequisito per l'installazione di LXC
Prima di installare LXC, assicurati che il tuo sistema sia aggiornato utilizzando yum update come mostrato di seguito.
# yum update
LXC dipende da due librerie; libpcap e libcgroup. Ciò richiede anche le utility Busybox e Bridge.
Installa i seguenti pacchetti richiesti per la nostra installazione LXC.
# yum install libcap-devel libcgroup busybox wget bridge-utils
Assicuriamoci di avere tutti i compilatori e i relativi strumenti di sviluppo necessari per compilare e installare qualsiasi software dal codice sorgente.
# yum groupinstall "Development tools"
Per ulteriori informazioni sui gruppi yum, consulta il nostro articolo sui comandi yum.
2. Scarica i container Linux LXC
Scarica l'ultima versione di LXC da Linux Containers Project.
Usa wget per scaricare il tar ball dell'ultima versione stabile di LXC sulla tua macchina come mostrato di seguito.
# cd / # wget http://linuxcontainers.org/downloads/lxc-1.1.5.tar.gz
Se ricevi un messaggio di errore relativo al certificato durante l'utilizzo di wget sopra, usa l'opzione no-check-certificate come mostrato di seguito.
# wget --no-check-certificate https://linuxcontainers.org/downloads/lxc-1.1.5.tar.gz
In alternativa, se preferisci, puoi anche utilizzare git clone per scaricare l'ultima versione di sviluppo o la versione stabile come mostrato di seguito.
git clone git://github.com/lxc/lxc -b {branch}
Nel comando precedente, {branch} può essere "master" per il ramo di sviluppo corrente o "stable-1.0" per il ramo di aggiornamento stabile della versione 1.0.
3. Configura l'adattatore con ponte
Quindi, crea un adattatore con bridge e configura l'IP statico sull'adattatore con bridge come mostrato nell'esempio ifcfg-eth0 seguente. Assicurati che il tuo adattatore fisico punti a questo adattatore con ponte in ifcfg-eth0.
# cd /etc/sysconfig/network-scripts # vi ifcfg-br0 DEVICE="br0" BOOTPROTO="static" IPADDR="xxx.xxx.xxx.xxx" NETMASK="255.255.255.xxx" ONBOOT="yes" TYPE="Bridge" NM_CONTROLLED="no"
Sostituisci tutti i "xxx" nel file sopra con i valori che corrispondono al tuo indirizzo IP e maschera di rete. Ad esempio, cambia il valore IPADDR nel file sopra con l'indirizzo IP della tua macchina.
4. Installa LXC Linux Container
Quindi, decomprimi il tar ball LXC, che abbiamo scaricato in precedenza, esegui ./configure e fai make e make install, per installare LXC sul tuo sistema come mostrato di seguito.
Per impostazione predefinita, questo installerà tutti i binari lxc nella directory /usr/local/bin.
# cd / # tar xvfz lxc-1.1.5.tar.gz # cd lxc-1.1.5/ # ./configure # make && make install
Di seguito sono riportate alcune delle ultime righe dall'output del comando ./configure precedente.
# ./configure ... ... config.status: creating src/python-lxc/setup.py config.status: creating src/lua-lxc/Makefile config.status: executing depfiles commands config.status: executing default commands ---------------------------- Environment: - compiler: gcc - distribution: centos - init script type(s): sysvinit - rpath: no - GnuTLS: no - Bash integration: yes Security features: - Apparmor: no - Linux capabilities: yes - seccomp: no - SELinux: no - cgmanager: no Bindings: - lua: no - python3: no Documentation: - examples: yes - API documentation: yes - user documentation: no Debugging: - tests: no - mutex debugging: no Paths: - Logs in configpath: no
Le seguenti sono le ultime righe dall'output del comando make sopra.
# make ... Building full member lists recursively... Adding members to member groups. ... Generating style sheet... Generating index page... Generating page index... Generating example documentation... Generating file sources... Generating code for file /usr/save/lxc-1.1.5/src/lxc/attach_options.h... Generating code for file /usr/save/lxc-1.1.5/src/lxc/lxccontainer.h... Generating code for file /usr/save/lxc-1.1.5/src/lxc/lxclock.h... Generating file documentation... Generating docs for file /usr/save/lxc-1.1.5/src/lxc/attach_options.h... ... Generating file member index... make[2]: Leaving directory `/usr/save/lxc-1.1.5/doc/api' make[2]: Entering directory `/usr/save/lxc-1.1.5/doc' ... Making all in hooks make[1]: Entering directory `/usr/save/lxc-1.1.5/hooks' make[1]: Nothing to be done for `all'. ...
Le seguenti sono le ultime righe dall'output per il comando make install sopra.
# make install ... Making install in hooks make[1]: Entering directory `/usr/save/lxc-1.1.5/hooks' /bin/mkdir -p '/usr/local/share/lxc/hooks' /usr/bin/install -c clonehostname mountecryptfsroot ubuntu-cloud-prep squid-deb-proxy-client '/usr/local/share/lxc/hooks' ... /bin/mkdir -p /usr/local/var/lib/lxc /bin/mkdir -p /usr/local/var/cache/lxc /bin/mkdir -p '/usr/local/lib/pkgconfig' /usr/bin/install -c -m 644 lxc.pc '/usr/local/lib/pkgconfig' ...
5. Crea soft link per le librerie condivise LXC
Esegui lxc-info per verificare che LXC sia installato correttamente. Se tutto è installato correttamente, vedremo un messaggio che dice che il nome del contenitore fornito (ad esempio, test) non esiste. Non abbiamo creato alcun contenitore in questa fase. Vogliamo solo assicurarci che questo comando non generi errori relativi alla libreria condivisa.
# lxc-info --name test test doesn't exist
A seconda di come sono state configurate le cose sul tuo sistema, potresti anche ricevere il seguente messaggio di errore relativo alla libreria liblxc.so.1.
# lxc-info --name test lxc-info: error while loading shared libraries: liblxc.so.1: cannot open shared object file: No such file or directory
In questo caso, per risolverlo, crea un collegamento chiamato libxc.so.1 come mostrato di seguito, che punterà alla versione corretta del file liblxc.so.x.x.x.
# ln -s /usr/local/lib/liblxc.so.1.1.5 /lib64/liblxc.so.1 # ls -l /lib64/liblxc.so.1 lrwxrwxrwx. 1 root root 30 Jan 20 09:17 /lib64/liblxc.so.1 -> /usr/local/lib/liblxc.so.1.1.5
6. Verifica l'impostazione e la configurazione di LXC
Successivamente, puoi anche eseguire lxc-checkconfig per verificare che il tuo ambiente lxc sia configurato correttamente.
Quanto segue avrà l'output in quattro diverse sezioni:1) Spazi dei nomi, 2) Gruppi di controllo 3) Varie e 4) Checkpoint/Ripristino. L'output parziale è mostrato di seguito.
# lxc-checkconfig Kernel configuration not found at /proc/config.gz; searching... Kernel configuration found at /boot/config-2.6.32-431.el6.x86_64 --- Namespaces --- Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled Network namespace: enabled Multiple /dev/pts instances: enabled --- Control groups --- Cgroup: enabled Cgroup namespace: enabled Cgroup device: enabled Cgroup sched: enabled Cgroup cpu account: enabled .. --- Misc --- Veth pair device: enabled Macvlan: enabled Vlan: enabled Bridges: enabled Advanced netfilter: enabled .. --- Checkpoint/Restore --- CONFIG_EVENTFD: enabled CONFIG_EPOLL: enabled .. Note : Before booting a new kernel, you can check its configuration usage : CONFIG=/path/to/config /usr/local/bin/lxc-checkconfig
Se tutto è configurato correttamente sul tuo sistema, nell'output sopra, tutte le opzioni nei gruppi sopra dovrebbero dire "abilitate".
Domani, nella prossima parte della serie di articoli LXC, spiegheremo come creare, avviare e utilizzare i container lxc linux usando vari comandi lxc.