Strumenti Utente

Strumenti Sito


config:lxc

Linux Container (LXC) - Macchine virtuali

LXC è un sistema di virtualizzazione per l'esecuzione di più sistemi isolati (guest) su un singolo sistema fisico (host). LXC non fornisce una macchina virtuale, ma fornisce un ambiente virtuale che ha i propri processi e le proprie risorse. Questo permette di isolare i servizi nelle varie vm assegnandogli le risorse appropriate (CPU, RAM, disco) e di poter facilmente spostare le vm da un server fisico ad un altro senza doverle riconfigurare.

Installazione

Cgroup

Come segnalato in /usr/share/doc/lxc/README.Debian procediamo al montaggio automatico dello pseudo filesystem Cgroup aggiungendo la seguente riga in /etc/fstab

  cgroup /sys/fs/cgroup cgroup defaults 0 0

Possiamo quindi procedere al montaggio con

mount cgroup

N.B. Il comando lxc-checkconfig ci può essere utile per controllare se la configurazione del kernel e del nostro sistema host sono corrette.

Rete

Procediamo all'installazione del pacchetto di bridge-utils

apt-get install bridge-utils

Aggiungiamo un'interfaccia bridge col comando

brctl addbr br0

Disabilitiamo eth0 in /etc/network/interfaces commentando le righe relative e aggiungiamo invece quelle di br0

#allow-hotplug eth0
#iface eth0 inet dhcp

auto br0
iface br0 inet dhcp
        bridge_ports eth0
        bridge_fd 0
        bridge_maxwait 0

Amministrazione delle vm

Creazione delle vm

Abbiamo fatto un sacco di lavoro per automatizzare e rendere la creazione delle vm un servizio che i membri del LILiK possano usare da soli.

Per creare una nuova vm usate il ruolo lxc_guest tramite Ansible

Il comando lxc-create ci permette di procedere alla creazione di una vm e della relativa partizione lvm tramite un unico comando <code> lxc-create -n #VMNAME -t debian -B lvm –vgname #VOLUMEGROUPNAME –lvname #L0GICALVOLUMENAME –fstype ext4 –fssize #FILESYSTEMSIZE </code> A questo punto configuriamo la rete e abilitiamo l'avvio automatico (Si può generare il mac address con un tool web): <code> cat « 'EOF' » /var/lib/lxc/#VMname/config ## Network lxc.network.type = veth lxc.network.flags = up lxc.network.hwaddr = #MACADDRESS lxc.network.link = br0 lxc.network.name = eth0 lxc.start.auto = 1 EOF </code> Infine entriamo nella vm per cambiare la password di root <code> chroot /var/lib/lxc/#VM_name/rootfs passwd </code>

Avvio manuale delle vm

Per avviare una vm

lxc-start -d -n #VM_NAME
  • n: il nome (hostname) della vm
  • d: non mostra la console di login

Per spegnere una vm

lxc-shutdown -n #VM_NAME

Per forzare lo spegnimento di una vm

lxc-stop -n #VM_NAME

Impostazioni costum per Debian

Il file in /usr/share/lxc/config/debian.common.conf contiene una configurazione standard per il container Debian che verrà creato tramite lxc-create. La nostra configurazione (su McFly) è non-standard ed aggiunge al template del container le interfacce di rete per garantire la connessione al container fin da subito.

debian.common.conf
# Default pivot location
lxc.pivotdir = lxc_putold
 
# Default mount entries
lxc.mount.entry = proc proc proc nodev,noexec,nosuid 0 0
lxc.mount.entry = sysfs sys sysfs ro 0 0
 
# Default console settings
lxc.tty = 4
lxc.pts = 1024
 
# Default capabilities
lxc.cap.drop = sys_module mac_admin mac_override sys_time
 
# When using LXC with apparmor, the container will be confined by default.
# If you wish for it to instead run unconfined, copy the following line
# (uncommented) to the container's configuration file.
#lxc.aa_profile = unconfined
 
# To support container nesting on an Ubuntu host while retaining most of
# apparmor's added security, use the following two lines instead.
#lxc.aa_profile = lxc-container-default-with-nesting
#lxc.hook.mount = /usr/share/lxc/hooks/mountcgroups
 
# If you wish to allow mounting block filesystems, then use the following
# line instead, and make sure to grant access to the block device and/or loop
# devices below in lxc.cgroup.devices.allow.
#lxc.aa_profile = lxc-container-default-with-mounting
 
# Default cgroup limits
lxc.cgroup.devices.deny = a
## Allow any mknod (but not using the node)
lxc.cgroup.devices.allow = c *:* m
lxc.cgroup.devices.allow = b *:* m
## /dev/null and zero
lxc.cgroup.devices.allow = c 1:3 rwm
lxc.cgroup.devices.allow = c 1:5 rwm
## consoles
lxc.cgroup.devices.allow = c 5:0 rwm
lxc.cgroup.devices.allow = c 5:1 rwm
## /dev/{,u}random
lxc.cgroup.devices.allow = c 1:8 rwm
lxc.cgroup.devices.allow = c 1:9 rwm
## /dev/pts/*
lxc.cgroup.devices.allow = c 5:2 rwm
lxc.cgroup.devices.allow = c 136:* rwm
## rtc
lxc.cgroup.devices.allow = c 254:0 rm
## fuse
lxc.cgroup.devices.allow = c 10:229 rwm
## tun
lxc.cgroup.devices.allow = c 10:200 rwm
## full
lxc.cgroup.devices.allow = c 1:7 rwm
## hpet
lxc.cgroup.devices.allow = c 10:228 rwm
## kvm
lxc.cgroup.devices.allow = c 10:232 rwm
## To use loop devices, copy the following line to the container's
## configuration file (uncommented).
#lxc.cgroup.devices.allow = b 7:* rwm
 
# Blacklist some syscalls which are not safe in privileged
# containers
lxc.seccomp = /usr/share/lxc/config/common.seccomp
 
lxc.autodev = 1
lxc.kmsg = 0

Impostazioni custom per i container

Il file /etc/lxc/default.conf contiene le impostazioni di default per ogni container che verrà creato in futuro; per aggiungere ad esempio la connessione di rete ad ogni container aggiungi

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0

al file.

config/lxc.txt · Ultima modifica: 2017/05/05 12:30 da edoput