LXD

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda

Instal·lació

 sudo apt-get install lxd
 newgrp lxd


En ubuntu, els usuaris han de formar part del grup LXD per poder utilitzar-lo.

Observem que passa si fem lxc sense paràmetres:

$ lxc
Usage: lxc [subcommand] [options]
Órdenes disponibles
	config     - Manage configuration.
	copy       - Copy containers within or in between lxd instances.
	delete     - Delete containers or container snapshots.
	exec       - Execute the specified command in a container.
	file       - Manage files on a container.
	help       - Presents details on how to use LXD.
	image      - Manipulate container images.
	info       - List information on LXD servers and containers.
	launch     - Launch a container from a particular image.
	list       - Lists the available resources.
	move       - Move containers within or in between lxd instances.
	profile    - Manage configuration profiles.
	publish    - Publish containers as images.
	remote     - Manage remote LXD servers.
	restart    - Changes state of one or more containers to restart.
	restore    - Set the current state of a resource back to a snapshot.
	snapshot   - Create a read-only snapshot of a container.
	start      - Changes state of one or more containers to start.
	stop       - Changes state of one or more containers to stop.
	version    - Prints the version number of this client tool.

Opciones:
  --all              Print less common commands.
  --debug            Print debug information.
  --verbose          Print verbose information.

Entorno:
  LXD_CONF           Path to an alternate client configuration directory.
  LXD_DIR            Path to an alternate server directory.

Ens interessa fer una configuració prèvia per a crear els contenidors correctament:

$ sudo lxd init
Name of the storage backend to use (dir or zfs): dir
Would you like LXD to be available over the network (yes/no)? yes
Address to bind LXD to (not including port): 10.0.2.15
Port to bind LXD to (8443 recommended): 
Invalid input, try again.

Port to bind LXD to (8443 recommended): 8443
Trust password for new clients: 
Again: 
Do you want to configure the LXD bridge (yes/no)? yes
Warning: Stopping lxd.service, but it can still be activated by:
  lxd.socket
LXD has been successfully configured.

Observa que demana coses molt concretes que seran distintes en cada cas.

Si creem contenidors, aquest asistent deixa de funcionar i apareix açò:

sudo lxd init
LXD init cannot be used at this time.
However if all you want to do is reconfigure the network,
you can still do so by running "sudo dpkg-reconfigure -p medium lxd"

error: You have existing containers or images. lxd init requires an empty LXD.

Podem executar el comandament que ens recomana per a reconfigurar la xarxa.

Contenidors i imatges

Si fem:

$ lxc image list
Generating a client certificate. This may take a minute...
If this is your first time using LXD, you should also run: sudo lxd init
To start your first container, try: lxc launch ubuntu:16.04

+-------+-------------+--------+--------------+-----+---------+-------------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPCIÓN | ARQ | TAMAÑO | UPLOAD DATE |
+-------+-------------+--------+--------------+-----+---------+-------------+

Encara no tenim descarregada ninguna imatge, però ens dona l'opció de configurar en lxd init i de llançar un contenidor en lxc launch ubuntu:16.04.

jose@server:~$ lxc launch ubuntu:16.04
Creando sandless-yair
Retrieving image: 100%
Iniciando sandless-yair
jose@server:~$ lxc list
+---------------+---------+------+------+------------+-----------+
|    NOMBRE     | ESTADO  | IPV4 | IPV6 |    TIPO    | SNAPSHOTS |
+---------------+---------+------+------+------------+-----------+
| sandless-yair | RUNNING |      |      | PERSISTENT | 0         |
+---------------+---------+------+------+------------+-----------+
jose@server:~$ lxc image list
+-------+--------------+--------+---------------------------------------------+--------+----------+------------------------------+
| ALIAS | FINGERPRINT  | PUBLIC |                DESCRIPCIÓN                 |  ARQ   | TAMAÑO  |         UPLOAD DATE          |
+-------+--------------+--------+---------------------------------------------+--------+----------+------------------------------+
|       | de051f59f701 | no     | ubuntu 16.04 LTS amd64 (release) (20161011) | x86_64 | 143.12MB | Oct 14, 2016 at 9:43am (UTC) |
+-------+--------------+--------+---------------------------------------------+--------+----------+------------------------------+

Mirem cóm ha descarregat la imatge, ha creat el contenidor i la imatge està disponible ja en el sistema.

Backend

LXD pot anar directament al sistema d'arxius en /var/lib/lxd. No obstant, és més interessant utilitzar ZFS per els avantatges que proporciona.

$ sudo apt-get install zfs

Ús dels contenidors

  • Llistar contenidors
lxc list # Llista dels contenidors instal·lats
lxc image list ubuntu: # Llista dels contenidors d'ubuntu disponibles
lxc image alias list ubuntu:
lxc list --fast
lxc list --fast ubuntu
  • Crear un contenidor sense llançar-lo:
lxc init ubuntu:
  • Llançar un contenidor nou lxc launch <imagen> [nombre]
  • Obtindre informació del contenidor: lxc info <container>
  • Detindre un contenidor lxc stop <nombre>
  • Encendre un contenidor lxc start <nombre>
  • Pausar un contenidor: lxc pause <container>
  • Obtindre un shell en un contenidor lxc exec <nombre> -- /bin/bash

Aquest shell no és exactament com connectar-se per SSH, ja que els comandaments no s'executen dins dels contenidor. Per tant, no coneix configuracions del shell o variables d'entorn. Sempre s'executen con al root del contenidor (que no és el mateix que el de la màquina).

lxc exec <container> bash
# Alguns necessiten un separador
lxc exec <container> -- ls -lh /
  • Esborrar un contenidor o snapshot lxc delete <nombre>

Configuracions

Els contenidors es poden configurar de múltiples maneres possibles. Es poden crear perfils per a configurar varis contenidors amb profiles:

lxc profile list
lxc profile show <profile>
lxc profile edit <profile>
lxc profile apply <container> <profile1>,<profile2>,<profile3>,...

Si volem configurar un sol contenidor no té sentit fer un profile. Cal cridar a:

lxc config edit <container>

lxc config set <container> <key> <value> lxc config device add my-container kvm unix-char path=/dev/kvm lxc config show <container> lxc config show --expanded <container>

Aquestes configuracions es poden aplicar sense tindre que parar els contenidors

Snapshots

Crear el Snapshot:

lxc snapshot <container>
lxc snapshot <container> <snapshot name>

Llistar els snapshots d'un contenidor:

lxc info <container>

Restaurar un snapshot:

lxc restore <container> <snapshot name>

Renombrar un snapshot:

lxc move <container>/<snapshot name> <container>/<new snapshot name>

Crear un contenidor a partir d'un snapshot. Sols canvia la MAC:

lxc copy <container> / <snapshot name> <destination container>

Esborrar un snapshot:

lxc delete <container>/<snapshot name>

Moure contenidors

Clonar un contenidor:

lxc copy <container> <destination container>

Reanomenar el contenidor:

lxc move <old name> <new name>

Copiar fitxers

Per a extraure un fitxer d'un contenidor:

lxc file pull <container>/<path> <dest>

Mostrar un fitxer per eixida estàndar:

lxc file pull zerotier/etc/hosts -

Copiar un fitxer dins:

lxc file push <origen> <container>/<path>

Editar dirèctament un fitxer:

lxc file edit <container>/<path>

Crear i gestionar imatges i tarballs

Quotes

Gestionar discos

Xarxa

Quant creem un contenidor, la seua configuració de xarxa està especificada en /etc/default/lxd-bridge.

Observem el que passa al fer ifconfig:

jose@server:~$ ifconfig 
enp0s3    Link encap:Ethernet  direcciónHW 08:00:27:e8:3b:93  
          Direc. inet:10.0.2.15  Difus.:10.0.2.255  Másc:255.255.255.0
          Dirección inet6: fe80::a00:27ff:fee8:3b93/64 Alcance:Enlace
          ACTIVO DIFUSIÓN FUNCIONANDO MULTICAST  MTU:1500  Métrica:1
          Paquetes RX:211835 errores:0 perdidos:0 overruns:0 frame:0
          Paquetes TX:105051 errores:0 perdidos:0 overruns:0 carrier:0
          colisiones:0 long.colaTX:1000 
          Bytes RX:165676776 (165.6 MB)  TX bytes:6341150 (6.3 MB)

lo        Link encap:Bucle local  
          Direc. inet:127.0.0.1  Másc:255.0.0.0
          Dirección inet6: ::1/128 Alcance:Anfitrión
          ACTIVO BUCLE FUNCIONANDO  MTU:65536  Métrica:1
          Paquetes RX:160 errores:0 perdidos:0 overruns:0 frame:0
          Paquetes TX:160 errores:0 perdidos:0 overruns:0 carrier:0
          colisiones:0 long.colaTX:1 
          Bytes RX:11840 (11.8 KB)  TX bytes:11840 (11.8 KB)

lxdbr0    Link encap:Ethernet  direcciónHW fe:ef:19:c3:53:10  
          Dirección inet6: fe80::7875:78ff:fe2e:d0f5/64 Alcance:Enlace
          Dirección inet6: fe80::1/64 Alcance:Enlace
          ACTIVO DIFUSIÓN FUNCIONANDO MULTICAST  MTU:1500  Métrica:1
          Paquetes RX:8 errores:0 perdidos:0 overruns:0 frame:0
          Paquetes TX:5 errores:0 perdidos:0 overruns:0 carrier:0
          colisiones:0 long.colaTX:1000 
          Bytes RX:536 (536.0 B)  TX bytes:470 (470.0 B)

vethGNE6GU Link encap:Ethernet  direcciónHW fe:ef:19:c3:53:10  
          Dirección inet6: fe80::fcef:19ff:fec3:5310/64 Alcance:Enlace
          ACTIVO DIFUSIÓN FUNCIONANDO MULTICAST  MTU:1500  Métrica:1
          Paquetes RX:8 errores:0 perdidos:0 overruns:0 frame:0
          Paquetes TX:8 errores:0 perdidos:0 overruns:0 carrier:0
          colisiones:0 long.colaTX:1000 
          Bytes RX:648 (648.0 B)  TX bytes:648 (648.0 B)

A banda de la targeta real (enp0s3) i la de loopback, trobem un pont anomenat lxdbr0 i una targeta amb un nom extrany. El pont el proporciona lxd i funciona com a NAT cap a l'exterior. La targeta extranya ès la eth0 de dins del contenidor i està visible al fer ifconfig perquè els contenidors comparteixen el Kernel amb el sistema operatiu.

Enllaços