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.

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.

Ú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