2012-11-21 8 views
9

Esiste un modo per utilizzare LXC per la gestione delle risorse utilizzando i gruppi di processi senza creare contenitori? Sto lavorando su un servizio che esegue codice arbitrario all'interno di una sandbox, per il quale sono interessato solo alla gestione delle risorse hardware. Non voglio alcun chroot; Voglio solo che questi gruppi di processi abbiano accesso al file system principale.LXC senza chroot

Mi è stato detto che lxc è leggero, ma tutti gli esempi che vedo creano un nuovo contenitore (cioè una dir con un sistema operativo completo) per ogni processo lxc. Non vedo davvero quanto sia molto più leggero di qualsiasi altra soluzione VM.

Quindi esiste un modo in cui LXC può essere utilizzato per controllare e gestire più gruppi di processi, senza creare contenitori separati per ognuno di essi?

risposta

20

LXC non è un sistema monolitico. È una raccolta di funzionalità del kernel che possono essere utilizzate per isolare i processi in vari modi e uno strumento userspace per utilizzare tutte queste funzionalità insieme per creare contenitori completi. Ma le singole funzionalità sono ancora utilizzabili da sole, senza LXC. Inoltre, LXC non richiede un chroot e, anche quando gli si fornisce un chroot, è possibile collegare le directory del sistema host nel contenitore, condividendo quelle particolari strutture di directory tra l'host e il contenitore.

Ad esempio, i cgroup vengono utilizzati da LXC per impostare i limiti di risorse sui contenitori. Ma possono essere utilizzati per impostare limiti di risorse su gruppi di processi senza utilizzare gli strumenti LXC. È possibile manipolare direttamente /sys/fd/cgroup/memory o , per mettere il processo in cgroups che limita la quantità di memoria o CPU che sono autorizzati a utilizzare. Oppure, se si utilizza un sistema che utilizza systemd, è possibile controllare i limiti di memoria per un gruppo di processi utilizzando MemoryLimit=200M o simili nel file .service per un determinato servizio.

Se si desidera utilizzare LXC per eseguire una gestione delle risorse leggera, è possibile farlo con o senza un chroot. Quando si avvia un contenitore LXC, è possibile scegliere quali risorse si desidera isolare; in modo da poter creare un contenitore con solo una rete virtualizzata e nient'altro; o un contenitore con solo limiti di memoria, ma condividendo tutto il resto con l'host. Le uniche cose che saranno isolate sono quelle specificate nel file di configurazione per il tuo contenitore. Ad esempio, lxc viene fornito con diverse definizioni di container di esempio che isolano solo la rete; condividono una partizione di root e quasi tutto il resto con l'host. Ecco come eseguire un contenitore identico al sistema host tranne che non ha alcuna interfaccia di rete:

sudo lxc-execute -n foo -f /usr/share/doc/lxc/examples/lxc-no-netns.conf /bin/bash 

Se si desidera che alcuni file da condividere con il padrone di casa, ma non altri, si hanno due scelte; è possibile utilizzare una directory root condivisa e montare sui file che si desidera siano diversi nel contenitore; oppure è possibile utilizzare un chroot, ma montare i file che si desidera condividere nel contenitore.

Ad esempio, ecco la configurazione per un contenitore che condivide tutto con l'host tranne per /home; invece legano-monta /home/me/fake-home sopra /home all'interno del contenitore:

lxc.mount.entry = /home/me/fake-home /home none rw,bind 0 0 

Oppure, se si vuole avere una radice completamente diversa, ma ancora condividere alcune directory come /usr, è possibile associare montare alcune directory in una directory, e usalo come root del filesystem.

Quindi hai un sacco di opzioni e puoi scegliere di isolare solo un componente, più di uno, o tanti quanti lo supporta LXC, in base alle tue esigenze.