LXC: Containers Linux Tools



Tour e istituire un nuovo strumento per Linux Contenitori Contenitori

I contenitori in grado di fornire la virtualizzazione leggera per isolare i processi e le risorse, e non ha bisogno di spiegare i meccanismi di fornire istruzioni e tutte le complessità di virtualizzazione di altri. Questa introduzione graduale agli strumenti contenitore Linux? Contenitori (LXC). In questo articolo, viene illustrato come impostare e utilizzare.

Container gestire efficacemente le risorse di un unico sistema operativo saranno suddivisi in gruppi isolati, ad un migliore equilibrio tra i gruppi l'uso isolato di risorse in conflitto con la domanda. In confronto con la virtualizzazione, non è né necessario simulazione a livello di istruzioni e non necessita di tempo di compilazione. I contenitori possono essere eseguite localmente nelle istruzioni della CPU, senza alcun meccanismo specifica spiegazione. Inoltre, per evitare il quasi-virtualizzazione (paravirtualizzazione) e chiamata di sistema sostituisce la complessità.

Fornendo un modo per creare e inserire il contenitore, il sistema operativo per l'applicazione come una macchina separata per eseguire le stesse, ma possono condividere molte delle risorse di base. Ad esempio, è possibile condividere in modo efficace di documenti pubblici (come glibc) della cache di pagina, in quanto tutti i contenitori utilizzano tutti lo stesso kernel, e che tutti i contenitori spesso condividono le stesse librerie libc (a seconda del contenitore di configurazione). Tale ripartizione può spesso essere estesa ad altri non è necessario scrivere il contenuto del file di directory.

I contenitori forniscono l'isolamento nello stesso tempo, risparmiare denaro attraverso la condivisione di queste risorse, il che significa che il contenitore che il sovraccarico di virtualizzazione reale è molto più piccola.

Container tecnologia già lì. Ad esempio, Solaris Zones e carceri BSD è il sistema operativo non Linux sul contenitore. Contenitori per la tecnologia Linux ha anche un ricco patrimonio, come vserver Linux, OpenVZ e FreeVPS. Anche se queste tecnologie sono maturate, ma queste soluzioni non supportano i loro contenitori nel kernel principale di Linux. (Per saperne di più su queste tecnologie, consultare la sezione Risorse).

In contrasto, Linux Resource progetto dei contenitori (vedi risorse) è il kernel principale di Linux, contribuendo a realizzare il contenitore. Allo stesso tempo, tali contributi possono essere maturi soluzioni Linux sono contenitori utili - contenitori per i progetti più maturi per il pubblico back-end. Questo articolo descrive brevemente come utilizzare gli strumenti creati dal progetto di LXC.

Per sfruttare appieno questo, si dovrebbe avere familiarità con l'uso della riga di comando eseguire il programma, come fare, gcc e patch. Inoltre, dovrebbe anche avere familiarità con il tarball (file *. tar.gz) degli estratti.

Acquisire, costruire e installare LXC

progetto LXC da una patch per il kernel Linux e alcuni strumenti userspace per la composizione. Gli strumenti userspace utilizzato dal kernel patch aggiunge nuove funzionalità per fornire uno strumento semplificato di mantenere il contenitore.

Prima di utilizzare il primo bisogno LXC per scaricare il codice sorgente del kernel Linux, applicare la patch appropriata LXC, quindi creare, installare e avviarlo. Infine, scaricare, compilare e installare lo strumento LXC.

Io uso una patch del kernel Linux 2.6.27 (vedi Risorse). Mentre la patch 2.6.27 del kernel Linux LXC potrebbero non essere applicabili a voi come la versione di rilascio del codice sorgente del kernel, ma dopo la versione per Linux 2.6.27 potrebbe già contenere la maggior parte delle funzionalità fornite dalla patch. Pertanto, vi consigliamo di utilizzare le ultime patch e il kernel principale di codice sorgente. E, oltre a scaricare il codice sorgente del kernel e aggiungere la patch, ma è possibile utilizzare codice GIT di accesso:

git clone git: / / git.kernel.org/pub/scm/linux/kernel/git/daveh/linux-2.6-lxc.git

In kernelnewbies.org possono trovare su come aggiungere una patch per il kernel, come configurare, installare e iniziare a costruire la guida del kernel (vedi Risorse).

LXC bisogno di qualche particolare configurazione del kernel. Per configurare correttamente il kernel LXC il modo più semplice è quello di usare make menuconfig, e selezionare il supporto Container. Dipende dalle funzionalità supportate dal kernel, questo continuerà a selezionare una serie di opzioni di configurazione aggiuntive.

Disponibile LXC ambiente

Oltre al nucleo di una nave appoggio, ma anche bisogno di alcuni strumenti per essere in grado di avviare e gestire facilmente il contenitore. Questo contenitore di strumenti di gestione da liblxc (dal riferimento per ottenere il link. Inoltre, è possibile utilizzare anche il libvirt). Discussione di questa sezione:

Strumenti liblxc

iproute2 strumenti

Come configurare la rete

Come riempire un file system contenitore (build contenitore personalizzato Debian, o per eseguire contenitori ssh)

Come connettersi al sistema di file contenitore (SSH, VNC, VT: tty, VT: GUI)

Strumenti: liblxc

Scaricare ed estrarre il liblxc (vedi Risorse), e poi dalla directory liblxc:

. / Configure - prefix = /

fare

make install

Se vengono utilizzati per costruire i pacchetti RPM, è possibile scaricare da internet (vedi Risorse).

Strumenti: iproute2

Al fine di gestire l'interfaccia di rete nella necessità contenitore 2.6.26 o versione successiva del pacchetto iproute2 (vedi Risorse). Se il vostro distribuzioni di Linux non hanno questo pacchetto, si prega di scaricare e seguire le istruzioni per configurare ed installare.

Configurazione della rete

Molti contenitori utile Un'altra parte fondamentale di accesso alla rete. Attualmente, il ponte (si connette segmenti Ethernet multiple, che li rende un segmento Ethernet separate) è un contenitore il modo migliore per connettersi alla rete. Per preparare per l'uso LXC, creeremo un ponte (vedi Risorse) e usarlo per la nostra interfaccia di rete reale e interfaccia di rete per collegare il contenitore.

Creare un ponte chiamato br0:

addbr brctl br0

brctl setfd br0 0

Con un'interfaccia di rete esistente nella IP (in questo caso è 10.0.2.15) collegare le interfacce bridge: ifconfig br0 10.0.2.15 promisc up. L'interfaccia di rete esistente (in questo caso eth0) al ponte e rimossi con il suo indirizzo IP direttamente connessi a:

addif brctl br0 eth0

ifconfig eth0 0.0.0.0 up

Ogni interfaccia di colmare br0 indirizzo IP che tutti risponderanno. Infine, assicurarsi che il percorso di default con route add-net default gw 10.0.2.2 br0 di inviare pacchetti al gateway. Dopo il contenitore di configurazione, designato come porta verso il mondo esterno br0 link.

Riempire il contenitore di file system

In aggiunta alla rete, i contenitori spesso hanno bisogno di un proprio sistema di file. A seconda delle esigenze, ci sono diversi metodi di riempimento del contenitore di file system. Discuterò due di loro:

Debian costruire un contenitore personalizzato

Eseguire un contenitore ssh

comando debootstrap utilizzare per costruire un contenitore personalizzato Debian è molto semplice:

debootstrap sid rootfs http://debian.osuosl.org/debian/

Se si vuole costruire un gran numero di contenitori, prima scaricare un pacchetto tarball consente di risparmiare tempo, come debootstrap - make-tarball sid.packages.tgz sid http://debian.osuosl.org/debian/. Questo produrrà a. file tar, questo file è di circa 71MB (52MB compressi) e una directory principale di circa 200 MB. La costruzione cominciò nel rootfs nella directory root: debootstrap - sid.packages.tgz scompattare tarball rootfs-sid. (Home page debootstrap contiene ulteriori informazioni su costruzione di un container più piccoli o più appropriata delle informazioni).

Questo genererà un ambiente altamente ridondante, il contenitore ospitante (vedi Risorse).

Eseguire ssh contenitore può ridurre notevolmente il file contenitore spazio disco di sistema. Ad esempio, questo metodo può essere utilizzato solo a pochi KB a 22 porte in diversi container di eseguire molteplici demone SSH (riferimento fornisce un esempio). Container utilizzando la chiave principale per raggiungere questo obiettivo, come / bin, / sbin e / lib e così via bind in sola lettura montare la condivisione del sistema Linux esistente sshd contenuto della confezione. Questo utilizza uno spazio nome di rete e creare la base di lettura e scrittura dei contenuti.

Leggero contenitore usato per generare tali metodi ei metodi utilizzati per generare l'ambiente chroot, essenzialmente la stessa. di impegnare la differenza è di sola lettura monti, e migliorare l'uso del nome dell'ambiente chroot spazio di isolamento, rendendo efficace contenitore.

Successivamente, la necessità di selezionare una connessione al contenitore.

Collegato al contenitore

Il passo successivo è quello di collegare al contenitore. modi diversi a seconda della configurazione del contenitore, ci sono diverse opzioni:

SSH

VNC (GUI)

VT: tty (testo)

VT: X (GUI)

Se non avete bisogno le interfacce GUI per il contenitore, e poi attraverso la connessione SSH su di esso. In questo caso, una connessione ssh semplice è sufficiente (v. supra, "per eseguire un contenitore ssh"). Questo metodo ha il vantaggio di basarsi su di indirizzamento IP per sostenere la creazione di un qualsiasi numero di contenitori.

Se la connessione ssh richiede molto tempo per arrivare alla richiesta di password, poi la ricerca DNS durante la Avahi DNS multicast / Service Discovery processo demone potrebbe timeout.

Attraverso la Virtual Network Computing (VNC) di connessione, questo metodo può aggiungere una interfaccia grafica per il contenitore.

vnc4server Usa avviare un server X, l'unico server servizio client VNC. Necessità di installare vnc4server, in modo che dal contenitore file / etc / rc.local per eseguirlo nel modo seguente: echo '/ usr/bin/vnc4server: 0-geometria 1024x768-depth 24' rootfs / etc / rc.local . Quando il contenitore si avvia, creerà una risoluzione di 1024 × 768 X schermo a colori a 24 bit. Poi la connessione è molto semplice, come segue:

vncviewer:

Se il contenitore con il suo host condiviso tty, poi da VT: tty (testo) la connessione è utile. In questo caso, è possibile utilizzare il terminale di Virtual Linux (VT) collegato al contenitore. Usa il semplice uso di VT è uno dei dispositivi tty login, quindi il dispositivo tty per comunicare con il VT Linux. processo di login è chiamato getty. Usa VT 8:

echo "8: 2345: respawn: / sbin / getty 38400 tty8 '

Rootfs / etc / inittab

Una volta che il contenitore è stato avviato, sarà getty tty8 di esecuzione, per consentire agli utenti di accedere al contenitore. Con tecniche simili, servendosi di strumenti di ri-iniziare LXC contenitore.

Questo metodo non supporta il contenitore di interfaccia grafica. E, perché ogni volta solo un processo può accedere a tty8, per consentire una molteplicità di contenitori, avrete bisogno di un'ulteriore configurazione.

Con VT: connessione X in modo da poter eseguire una GUI. VT 9 viene eseguito in GNOME Display Manager (gdm), poi modificare il rootfs / usr / share / gdm / defaults.conf, sarà FirstVT = 7 sostituire FirstVT = 9, e sarà VTAllocation = true sostituire VTAllocation = false.

Anche se questo può utilizzare una interfaccia grafica, ma usare solo un numero limitato di terminali virtuali Linux.

Strumenti Run LXC

A questo punto, si esegue un kernel adatto, installato l'utility LXC, e avere un ambiente libero, allora possono imparare a gestire l'ambiente per esempio a. (Suggerimento: LXC README descritto in dettaglio nella maggior parte dei contenuti a tal proposito).

uso LXC cgroup file system per la gestione del contenitore. Prima di utilizzare il LXC deve prima montare il file system: mount-t cgroup cgroup / cgroup. file system Cgroup può essere montato ovunque. LXC utilizzerà il file / etc / mtab montare il primo nel file system cgroup.

Più avanti in questo articolo mostrerà alcuni dei principi fondamentali contenuti LXC e varie, e discutere l'accesso a basso livello.

LXC Nozioni di base

Per le basi di utilizzare gli strumenti LXC, vedremo:

Crea il contenitore

Prendi (o lista) per le informazioni sul contenitore esistente

Avviare il sistema e l'applicazione contenitori

Processo per l'esecuzione segnale contenitore

Sospendere, riprendere, arrestare e la distruzione dei contenitori

Creare un nome per il contenitore è da associare a un file di configurazione. Il nome sarà per la gestione del contenitore:

LXC-creare-n nome-f configfile

Questo consente una molteplicità di contenitori è possibile utilizzare lo stesso profilo. Nel file di configurazione, è possibile specificare le proprietà del contenitore, ad esempio il nome host, la rete, il file system root e fstab. eseguire script LXC-sshd (lo script crea una configurazione) dopo, la configurazione del contenitore ssh è la seguente:

lxc.utsname = my_ssh_container

lxc.network.type = Veth

lxc.network.flags = fino

lxc.network.link = br0

lxc.network.ipv4 = 10.0.2.16/24

lxc.network.name = eth0

=. Lxc.mount / fstab

lxc.rootfs =. / rootfs

Non importa quanto il file di configurazione, utilizzare gli strumenti per avviare contenitore LXC ha proprio punto di vista i processi di sistema, così come gli alberi e può essere usato per montare la propria comunicazione tra processi (IPC) vista delle risorse.

Oltre a questi, quando si avvia un contenitore, la configurazione non è menzionato in alcun tipo di risorse sono considerate da condividere con l'ospite. Ciò consente agli amministratori di specificare il contenitore con semplici differenze chiave tra l'host e configurare il portatile.

Le indicazioni di cui al contenitore è stato per la gestione del contenitore è molto importante. Mostra lo stato di un contenitore specifico:

LXC-info-n nome

Mostra il processo di appartenenza ad un contenitore:

LXC-info-n nome

Inizio

tipo di contenitore LXC variano in funzione: uno è il sistema di contenitore, uno è il contenitore di applicazione. contenitore sistema simile alla macchina virtuale. Rispetto alla virtualizzazione vera, anche se il loro isolamento di essere inferiore, ma il carico viene ridotto. Direttamente in quanto ogni contenitore usando lo stesso kernel di Linux. Al fine simile alla macchina virtuale, un sistema, come contenitore e distribuzioni di Linux inizia nello stesso luogo, che è quello di eseguire il processo init:

nome init LXC-start-n

Rispetto al sistema di contenitore, il contenitore applicazione viene utilizzata per isolare un'applicazione per creare uno spazio separato nome. Avviare un'applicazione contenitore:

LXC-execute-n nome cmd

Segnale

Un segnale è inviato per l'esecuzione in un contenitore di tutto il processo:

LXC-kill-n-s nome SIGNAL

Pausa

Sospensione di un contenitore simile nel concetto al SIGSTOP segnale viene inviato a tutti i processi in un contenitore. Tuttavia, l'invio di un falso segnale SIGSTOP potrebbe confondere alcuni programmi. Pertanto, LXC attraverso il processo di congelamento dell'interfaccia cgroup dispositivo utilizza Linux (freezer processo):

LXC-freeze-n nome

Riprendere

Per ripristinare un contenitore congelati:

LXC-scongelare-n nome

Stop

Per fermare un contenitore farà sì che il contenitore per avviare tutti i processi di tutti i decessi, e la pulizia del contenitore:

LXC-stop-n nome

Distruggere

La distruzione del contenitore viene rimosso da LXC-creare i passaggi associato al nome del file di configurazione e metadati:

LXC-distruggere-n nome

Varie

Qui è possibile conoscere alcuni degli altri elementi (alcuni con sorveglianza correlati).

Visualizzare e regolare la priorità del contenitore:

LXC-priority-n nome

LXC-priority-n nome-p priorità

osservazione continua delle modifiche contenitore lo stato e la priorità:

LXC-monitor-n nome

Premere Ctrl-C per interrompere il monitoraggio del contenitore.

Si può anche aspettare la nave è entrata l'| separato un gruppo di Stati:

LXC-wait-n nome-s stati

RUNNING aspetta fuori, oltre a tutti gli stati:

LXC-wait-n nome-s 'FERMO | Inizio | ARRESTO | Interruzione | CONGELAMENTO | congelato'

Naturalmente, questo tornerà immediatamente. Se non avete verificato un errore imprevisto, si dovrebbe prevedere soltanto se il recipiente in un dato stato LXC-aspettare prima di tornare.

Accesso di basso livello

uso LXC cgroup file contenitore gestione del sistema. Possono essere letti e manipolati da LXC cgroup file di parti del sistema. Per gestire l'uso di ogni contenitore della CPU, è possibile leggere e modificare il contenitore cpu.shares di procedere come segue:

LXC-cgroup-n nome cpu.shares

LXC-cgroup-n nome cpu.shares howmany

Conclusione

Finora, questa guida vi ha mostrato come lo strumento principale di Linux contenitori, è possibile iniziare a creare una propria partizione risorsa efficace.

Materiale di riferimento

Studio

Si può leggere questo articolo del sito Web su developerWorks testo originale in inglese del mondo.

kernelnewbies.org descrive come aggiungere patch per il kernel Linux, come configurare, costruire, installare e avviare il kernel Linux.

Tra le altre tecnologie di container

Solaris Zones (Solaris)

carceri BSD (FreeBSD)

Vserver Linux (Linux)

OpenVZ (Linux)

FreeVPS (Linux)

Imparare a costruire il ponte, pronto a usare il LXC.

Si tratta di un contenitore altamente ridondante ambiente di hosting.

In questo esempio si utilizza solo un ssh pochi KB possono essere in diversi contenitori di 22 porte di eseguire più demone SSH.