Outils pour utilisateurs

Outils du site


reseau:linuxcontainergestion

Gestion des containers

Ici, nous allons analyser les commandes permettant de gérer les containers LXC depuis la machine hôte… Dans l'idéal, ces commandes pourront être exploitées dans des scripts d'automatisation.

Les commandes usuelles de gestion des containers

Ici, nous allons voir les commandes de gestion des containers que l'administrateur utilisera durant tout le cycle de vie de ceux-ci, de leur création à leur destruction.

Créer, cloner les containers

L'intérêt des machines virtuelles (au sens large) est qu'il est facile de les dupliquer… à l'infini… en théorie ! 8-)

CLONAGE = multiplication naturelle ou artificielle à l'identique d'un être (être vivant à l'origine… )

Avant de cloner un container… il faut que celui-ci existe… La démarche est la suivante :

  • Etape 1 : création d'un “template” dérivé des distributions linux disponibles :

Dans l'exemple infra, on créé un template nommé “deb-template” à base de la distribution “debian” release “jessie

root@netLXC2017:/home/btssio# lxc-create -n deb-template -t debian -- -r jessie
debootstrap est /usr/sbin/debootstrap
Checking cache download in /var/cache/lxc/debian/rootfs-jessie-amd64 ... 
Downloading debian minimal ...
I: Retrieving Release 
I: Retrieving Release.gpg 
I: Chec

...

Universal Time is now:  Thu Dec  1 12:24:17 UTC 2016.

root@netLXC2017:/home/btssio# 

Si l'on ne connait pas la liste des distributions disponibles pour créer un template, on peut passer en mode interactif :

root@netLXC2017:/home/btssio# lxc-create -t download -n template
Setting up the GPG keyring
Downloading the image index

---
DIST	RELEASE	ARCH	VARIANT	BUILD
---
centos	6	amd64	default	20161203_02:16
centos	6	i386	default	20161203_02:16
centos	7	amd64	default	20161203_02:16
debian	jessie	amd64	default	20161202_22:42
debian	jessie	arm64	default	20161202_22:42

... 

ubuntu	zesty	i386	default	20161203_03:49
ubuntu	zesty	powerpc	default	20161203_03:49
ubuntu	zesty	ppc64el	default	20161203_03:49
ubuntu	zesty	s390x	default	20161203_03:49
---

Distribution:

A partir d'ici, on est en mode interactif...

Distribution: centos
Release: 7
Architecture: amd64

Downloading the image index
Downloading the rootfs
Downloading the metadata
The image cache is now ready
Unpacking the rootfs

---
You just created a CentOS container (release=7, arch=amd64, variant=default)

To enable sshd, run: yum install openssh-server

For security reason, container images ship without user accounts
and without a root password.

Use lxc-attach or chroot directly into the rootfs to set a root password
or create user accounts.
root@netLXC2017:/home/btssio# 

 
  • Etape 2 : on configure a minima le réseau et on installe les paquets de logiciels essentiels sur le “template” :
  • Etape 3 : on clone à volonté à partir du container squelette “template” !
root@netLXC2017:/home/btssio# lxc-copy -n deb-template  -N deb-clone2
Created container deb-clone2 as copy of deb-template
root@netLXC2017:/home/btssio#

Démarrer et arrêter les containers

Prendre des informations sur les containers

  • Vue globale sur l'ensemble des containers :
root@netLXC2017:/usr/share/lxc# lxc-ls -f
NAME          STATE    IPV4       IPV6  AUTOSTART  
-------------------------------------------------
deb-clone1    STOPPED  -          -     YES        
deb-clone2    RUNNING  10.0.2.17  -     YES        
deb-template  STOPPED  -          -     NO         
root@netLXC2017:/usr/share/lxc# 
La variable booléenne AUTOSTART a son importance ! voir infra !
  • Informations sur un container :
root@netLXC2017:/usr/share/lxc# lxc-info -n deb-clone2
Name:           deb-clone2
State:          RUNNING
PID:            3643
IP:             10.0.2.17
CPU use:        0.23 seconds
BlkIO use:      144.00 KiB
root@netLXC2017:/usr/share/lxc# 

Démarrer les containers

  • Démarrage d'un container en mode console :
root@netLXC2017:/home/btssio# lxc-start -n deb-clone1
INIT: version 2.88 booting
Using makefile-style concurrent boot in runlevel S.
udev does not support containers, not started ... (warning).
Activating lvm and md swap...done.
Checking file systems...fsck from util-linux 2.25.2

...

INIT: Entering runlevel: 3
Using makefile-style concurrent boot in runlevel 3.
Starting OpenBSD Secure Shell server: sshd.

Debian GNU/Linux 8 deb-clone1 console

deb-clone1 login: 
  • Démarrage d'un container en arrière-plan :
root@netLXC2017:/home/btssio# lxc-start -n deb-clone1 -d
root@netLXC2017:/home/btssio#
root@netLXC2017:/usr/share/lxc# lxc-info -n deb-clone1
Name:           deb-clone1
State:          RUNNING
PID:            7922
IP:             10.0.2.16
CPU use:        0.21 seconds
BlkIO use:      152.00 KiB
root@netLXC2017:/usr/share/lxc#
  • Prendre la main d'un container démarré en arrière-plan en mode console (depuis n'importe quel terminal de la machine hôte) :
root@netLXC2017:/home/btssio# lxc-console -n deb-clone1

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 deb-clone1 tty1

deb-clone1 login:
  • Prendre la main d'un container démarré en arrière-plan en mode shell (depuis n'importe quel terminal de la machine hôte) :
root@netLXC2017:/home/btssio# lxc-attach -n deb-clone2
root@deb-clone2:/home/btssio# hostname
deb-clone2
root@deb-clone2:/home/btssio#
  • Prendre la main d'un container démarré en arrière-plan en ssh (depuis n'importe quel terminal de la machine hôte) :
root@netLXC2017:/usr/share/lxc# lxc-info -n deb-clone1
Name:           deb-clone1
State:          RUNNING
PID:            7922
IP:             10.0.2.16
CPU use:        0.21 seconds
BlkIO use:      152.00 KiB 

Tentons une connexion ssh

root@netLXC2017:/usr/share/lxc# ssh -l btssio  10.0.2.16
The authenticity of host '10.0.2.16 (10.0.2.16)' can't be established.
ECDSA key fingerprint is 6e:60:4a:6f:8e:a7:cd:12:a9:6e:63:e9:32:49:c4:c7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.2.16' (ECDSA) to the list of known hosts.
btssio@10.0.2.16's password: 
Linux deb-clone1 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u2 (2016-10-19) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Dec  3 10:55:23 2016
btssio@deb-clone1:~$

Arrêter les containers

  • Arrêt d'un container :
root@netLXC2017:/home/btssio# lxc-stop -n deb-clone2
root@netLXC2017:/home/btssio# 

Détruire les containers

root@netLXC2017:/home/btssio# lxc-destroy -n deb-clone2
root@netLXC2017:/home/btssio# 

Démarrage automatique des containers avec ordre de priorité optionnel

Ici, on tente de répondre à 2 besoins :

  • démarrer certains containers automatiquement au démarrage de la machine hôte ou en passant la commande “lxc-autostart”,
  • déterminer un ordre de priorité de démarrage des containers : tous les containers ne démarreront pas forcément en même temps…

Pour gérer tout ça, on va modifier :

  • le fichier /var/lib/lxc/deb-clone1/config en rajoutant les lignes :
# lxc.start.auto = 0 | 1 Lancement auto (1) du container au boot de l'hote
lxc.start.auto = 1
# plus le lxc.start.order est eleve, plus le container sera prioritaire
# sur les autres containers au demarrage...
lxc.start.order = 2
# delai de demarrage en secondes entre 2 groupes de containers
# de priorite differente
#lxc.start.delay = 600
# groupe de containers
# lxc.group = 10 ; le container appartient au groupe 10
# lxc.group = 10
  • le fichier /var/lib/lxc/deb-clone2/config en rajoutant les lignes :
# lxc.start.auto = 0 | 1 Lancement auto (1) du container au boot de l'hote
lxc.start.auto = 1
# plus le lxc.start.order est eleve, plus le container sera prioritaire
# sur les autres containers au demarrage...
lxc.start.order = 10
# delai de demarrage en secondes entre 2 groupes de containers
# de priorite differente
lxc.start.delay = 600
# groupe de containers
# lxc.group = 10 ; le container appartient au groupe 10
# lxc.group = 10
  • Lancer la commande “lxc-autostart” sur la machine hôte LXC2017 et vérifier que les 2 containers s'exécutent bien…
root@netLXC2017:/home/btssio# lxc-autostart 
root@netLXC2017:
root@netLXC2017:/home/btssio# lxc-ls -f
NAME          STATE    IPV4       IPV6  AUTOSTART  
-------------------------------------------------
deb-clone1    RUNNING  10.0.2.17  -     YES        
deb-clone2    RUNNING  10.0.2.16  -     YES        
deb-template  STOPPED  -          -     NO         
root@netLXC2017:/home/btssio#
Le container deb-clone1 doit se lancer 10 minutes (600“) APRES deb-clone2.

Analyse lapidaire de la commande "lxc-autostart"

La commande “lxc-autostart” est généralement activée au démarrage de la machine hôte LXC. Cette commande permet de sélectionner les containers à démarrer, dans quel ordre, et comment (après un arrêt propre par exemple). On peut aussi paramétrer un certain retard entre 2 lancements de containers.

Il est possible de créer des groupes de containers. 2 groupes sont spéciaux :

  • le groupe NULL,
  • le groupe onboot.
  • Lorsque le système démarre avec le service LXC activé, il tenter de démarrer tous les containers avec “lxc.start.auto = 1”, paramètre qui indique que le container est membre du groupe “onboot”.
  • Le démarrage se fera dans l'ordre spécifié par le paramètre “lxc.start.order”. Si un “lxc.start.delay” a été spécifié, le délai sera pris en compte avant démarrage du container suivant.
  • Après le démarrage des membres du groupe “onboot”, le système LXC procédera à l'amorçage des containers paramétrés “lxc.start.auto = 1” qui ne sont membres d'aucun groupe (NULL Groupe).
L'administrateur peut créer des groupes de containers, un container pouvant appartenir à un nombre quelconque de groupes ou à tous les groupes.

Le manuel de la commande renseigne sur toutes ses options ! :-)

Pour aller plus loin...

~~DISCUSSION~~

reseau/linuxcontainergestion.txt · Dernière modification: 2020/06/08 12:13 (modification externe)