El SysAdmin del 3er Mundo

todo lo que expliqué mientras nadie prestaba atención

lxc en salud

| Comments

¡Me han asignado mi segundo servidor en el calixto! Un cliente ligero con 2 gigas de RAM, un buen micro y un disco duro de un tera. La fuente funciona de milagro y está sujeta al chásis mediante bridas.

Le he instalado archlinux (para variar) a partir del que tengo en la laptop. Aquí pienso instalar el servidor de correo, un servidor web para una serie de aplicaciones y un pequeño servidor ftp para disponer instaladores y actualización de antivirus. No soporta virtualización (¿y con que se sienta la cucaracha si lo soportara?). Por tanto, usaremos archlinux como hypervisor de lxc.

Por suerte, en infomed; hay un excelente repo de debian

Para crear contenedores de debian en arch, necesitaremos debootstrap, que por suerte, viene en el repo de arch.

Este archlinux está instalado sobre BTRfs con el COW activado. Me imagino que crear snapshots de los contenedores sea mucho más óptimo.

Creamos entonces el contenedor, usando el repo de infomed como mirror

“lxc-create”
1
2
3
4
lxc-create -n debian -t \
/usr/share/lxc/templates/lxc-debian -- -r jessie \
--mirror=http://ftp.sld.cu/debian \
--security-mirror=http://ftp.sld.cu/debian

O sea, crea un contenedor, llamado (-n) debian, del release (-r) jessie y usa como repo (–mirror y –security) al de infomed.

Pasé toda la noche resando para que no se fuera a caer la conexión, ya que la operación create de LXC falla de nada. Por suerte todo salió de acorde al plan.

“listo debian”
1
2
[root@leviatan ~]# du -hs /var/lib/lxc/
248M /var/lib/lxc/

La idea es, crear un snapshot del básico y restaurarlo con un nuevo nombre.

Pero este está demasiado básico. DESNÚ más bien. Partiremos de ese contenedor como base para crear nuevos contenedores mediante snapshots. Así que a este le instalaremos una selección básica de software. Arrancamos el contenedor:

“lxc-start”
1
[root@leviatan ~]# lxc-start -n debian

y enclavamos (attach) la consola, o sea, básicamente, entramos al container

“enclavando la consola”
1
2
3
4
5
6
7
8
[root@leviatan ~]# lxc-console -n debian

Connected to tty 1
       Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself

Debian GNU/Linux 8 debian tty1

debian login: 

Según la plantilla de archlinux, el password por defecto del container es “root”. Entramos al mismo y le cambiamos el password. Apto seguido, instalar el software.

En mi opinión un container básico, requiere al menos:

mc, tmux, vim, aptitude, iputils-ping

Pero además, puede que quizás te guste añadirle:

manpages, resolvconf, telnet, iptables

Terminada la faena, damos logout y luego presionamos la combinación “Ctrl+a q”. O sea, “control A” primero, luego suelta ambas y presiona “q”. Con eso desenclavas (detach) la consola del container (que sigue corriendo).

Bello verdad?! Linux es un sistema multitareas y multiusuario.

Empezar a aprovisionarnos es tan simple como copiar el contenedor. O sea el contenedor debian lo usaremos como plantilla para crear los contenedores mail, web y ftp.

“lxc-snapshot”
1
2
3
4
5
6
7
8
9
[root@leviatan ~]# lxc-copy -n debian -N mail
[root@leviatan ~]# lxc-copy -n debian -N web
[root@leviatan ~]# lxc-copy -n debian -N ftp
[root@leviatan ~]# lxc-ls -f
NAME   STATE   AUTOSTART GROUPS IPV4 IPV6
debian STOPPED 0         -      -    -
mail   STOPPED 0         -      -    -
ftp    STOPPED 0         -      -    -
web    STOPPED 0         -      -    -

Ya tenemos las tres máquinas. Ahora es tu desición si conservas o no el contenedor primario. A ese primer contenedor, que en este caso se llama “debian” yo lo llamo matriz. La matriz la mantengo actualizada y afinada. En algún momento podría necesitar hacer máquinas nuevas. Además, si te decides a hacer algún servidor desde cero; conservando las configuraciones, simplemente haces una nueva copia de la matriz (actualizada).

No vale pena tener ssh corriendo en los contenedores. Simplemente le haces ssh al servidor y attach al contenedor. Esto lo hace incluso hasta más seguro.

La mecánica de trabajo en este esquema, es prácticamente la misma que vimos ahora. Arrancar el container y enclavar la consola.

¿Notaste que puse a iptables como paquete opcional? Pues el iptables del hypervisor, o sea, del arch de afuera, controla todo el tráfico.

Otra cosa buena que puedes hacer es lincar todas las cache de apt de los debian. Por ejemplo, el directorio de la matriz sería:

/var/lib/lxc/debian/rootfs/var/cache/apt/archives

Mientras que el de “mail” sería

/var/lib/lxc/mail/rootfs/var/cache/apt/archives

Simplemente montas con bind el archive de debian en el de mail. El fstab quedaría así:

“/etc/fstab”
1
 /el/debian/archives  /el/mail/archives  none  bind,nofail 0  0

Nota para imbéciles: La ruta es muy larga, por eso usé ese aforismo. En el fstab debes poner ambas rutas como se ven arriba “/var/lib/lxc/rootfs/fulanito”

Como no usamos red en bridge, todos los container tiran por la misma ip. En el servido web, se usa el puerto 80 y 443, en el de correo el 25 y 110; pero todos en la misma ip. Por esta razón, no corro ssh en los contenedores; diría que el puerto 22 ya se encuentra en eso.

Aquí les dejo entonces la configuración de este container, con red del tipo “none”

“config de”
1
2
3
4
5
6
7
8
 [root@leviatan ~]# cat /var/lib/lxc/debian/config |grep -v '#'
 lxc.include = /usr/share/lxc/config/debian.common.conf
 lxc.tty = 4
 lxc.arch = amd64
 lxc.network.type = none
 lxc.rootfs = /var/lib/lxc/debian/rootfs
 lxc.rootfs.backend = dir
 lxc.utsname = debian

Por otra parte, cosas como el mysql, que el servidor de correo necesita encuestarlo, simplemente, podrías ponerlo a escuchar por la 127.0.0.1 y así el container del servidor sql, escucha por la 127 y los demás container (incluso el hypervisor) se conectan al localhost donde está el mysql. O sea, la 127.0.0.1 sería como la red interna de todos los container. ¿Es seguro verdad?

Podemos confiarle ahora, a la frescura y robusteza de archlinux, la estabilidad de debian.

Si este artículo te resultó interesante, considere donar 0.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ

Comments