L’objectif de cet article est d’intégrer Docker dans OpenStack. Il existe actuellement plusieurs projets, comme Magnum qui permet l’utilisation de Kubernetes, Nova-Docker qui permet de piloter Docker directement depuis OpenStack, ou tout simplement Docker Machine permet de déployer des hôtes avec Docker installé.

Nous allons nous intéresser tout d’abord à Docker Machine. Ensuite, dans la deuxième partie de l’article, nous installerons et configurerons Nova-Docker.

 

Partie 1 – Docker Machine

 

Docker Machine fait partie de l’éco-système de Docker. C’est un outil très intéressant et puissant qui permet en quelques minutes de créer des hôtes Docker sur différents environnements. Son fonctionnement est simple, il crée des serveurs, installe Docker dessus et configure le client docker pour avoir communiquer avec. Dans notre exemple, nous allons créer une instance sur OpenStack avec une image Ubuntu cloud.

 

 

Versions utilisées :
Docker : >= 1.6
Docker Machine : >= 0.4
Image : Ubuntu cloud 14.04

 

Vous pouvez installer docker-engine et docker-machine sur la machine que vous voulez, cela n’a pas d’importance.

 

Installation de Docker

 

Ajoutez la clée gpg :

 

sudo apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

 

Ensuite, ajoutez dans le fichier /etc/apt/source.list

 

deb https://apt.dockerproject.org/repo ubuntu-trusty main

 

Et pour finir, installez la dernière version de Docker :

 

sudo apt-get update && sudo apt-get install docker-engine

 

Installation de Docker Machine

 

curl -L https://github.com/docker/machine/releases/download/v0.5.0/docker-machine_linux-amd64.zip >machine.zip && \
unzip machine.zip && \
rm machine.zip && \
mv docker-machine* /usr/local/bin

 

Création d’une instance

 

Afin de pouvoir utiliser le driver OpenStack, attention au groupe de sécurité spécifié, vous devez avoir accès au port 22 et 80 (et les autres ports dont vous aurez besoin). De plus, les variables d’environnements suivantes sont nécessaires :

 

export OS_USERNAME=admin
export OS_PASSWORD=*****
export OS_TENANT_NAME=admin
export OS_AUTH_URL=http://KEYSTONE_PUBLIC_URL*

*Keystone est l’API d’authentification d’OpenStack.

 

Si vouz avez les bonnes variables d’environnements, la création de l’instance peut commencer :

 

docker-machine --debug create -d openstack \
--openstack-ssh-user ubuntu \
--openstack-image-name ubuntu \
--openstack-flavor-name m1.small \
--openstack-net-name dev \
--openstack-floatingip-pool public \
--openstack-sec-groups default \
docker1

 

N’hésitez pas à lancer la commande avec le paramètre –debug.

 

Vous pouvez vérifier la création de l’instance soit depuis Horizon ou la commande Nova, ou en utilisant docker-machine :

 

docker-machine ls

 

Selection_001

 

 

Maintenant, vous pouvez lancer la commande suivante qui va vous permettre d’exporter les variables nécessaires pour faire fonctionner le Docker distant dans le terminal courant. Ainsi, vous pouvez changer d’environnement Docker aisément.

 

eval '$(docker-machine env docker1)'

 

Vous pouvez désormais lancer des conteneurs dans le Docker engine installé dans l’instance créée précédemment depuis votre terminal courant.

 

Voilà pour cette première approche entre Docker et OpenStack. Passons maintenant au driver Nova-Docker.

 

 

 

 

Partie 2 – OpenStack

 

Versions utilisées :

OS : Ubuntu 14.04
OpenStack : Kilo / Liberty
Docker : >= 1.6
python-novaclient : >= 2.23 (Kilo) et >= 2.28 (Liberty)
python-glanceclient : >= 0.15 (Kilo) et  >= 1.0 (Liberty)
novadocker : 0.0.1.dev235

 

Configuration Docker

 

Pour permettre à Nova d’utiliser Docker, il faut au préalable ajouter l’utilisateur nova au groupe docker.

 

usermod -aG docker nova

 

Installation Nova-Docker

 

La première étape est l’installation de Nova-Docker. Chaque machine compute ne supporte qu’un seul type d’hyperviseur, ce qui veut dire que si vous décidez d’utiliser Nova-Docker, vous ne pourrez plus utiliser KVM sur cette machine.

 

git clone https://github.com/openstack/nova-docker.git
cd nova-docker
sudo python setup.py install

 

Activation du driver Nova-Docker dans Nova

 

Pour activer le driver Docker dans Nova, il est nécessaire de modifier le fichier de configuration de Nova sur la machine Nova-Compute en spécifiant l’utilisation de ce driver dans la variable “compute_driver”. Suivant la façon dont vous avez déployé votre OpenStack, cette variable peut se trouver à deux endroits possibles :

 

  • /etc/nova/nova.conf
  • /etc/nova/nova-compute.conf

 

[DEFAULT]
#compute_driver=libvirt.LibvirtDriver
compute_driver=novadocker.virt.docker.DockerDriver

 

En option, vous pouvez ajouter les rootwrap filters de Docker dans nova. Ces rootwrap filters vont permettre à un utilisateur sans droits d’effectuer des commandes en tant que root sur la machine.

 

cp nova-docker/etc/nova/rootwrap.d/docker.filters /etc/nova/rootwrap.d/

 

Activation du driver Nova-Docker dans Glance

 

Pour activer l’utilisation d’image Docker dans Glance, il faut rajouter le format docker dans le fichier de configuration : /etc/glance/glance-api.conf se trouvant sur la machine Glance-Api.

 

[DEFAULT]
container_formats=ami,ari,aki,bare,ovf,ova,docker

 

On redémarre les services :

 

sudo service glance-api restart
sudo service nova-api restart
sudo service nova-compute restart

 

Pour vérifier que la configuration est bien faite, vous pouvez aller regarder le type de votre hyperviseur dans Horizon (admin → system → hypervisors) ou directement depuis le terminal.

 

selection6

 

Téléchargement d’une image Docker

 

Cette image est composé d’un serveur Nginx et d’une simple page HTML pour l’exemple, vous pouvez utiliser l’image que vous souhaitez.

 

docker pull objectiflibre/webserver

 

Ensuite, cette image va être envoyé sur Glance. Attention, l’image Glance doit avoir le même nom que l’image Docker pour fonctionner.

 

docker save objectiflibre/webserver | glance image-create --name objectiflibre/webserver --container-format docker --disk-format raw

 

Si l’on regarde les informations sur l’image créée, c’est bien une image de type Docker.

 

 

selection5

 

 

Création d’une instance

 

nova --debug boot \
--image objectiflibre/webserver \
--nic net-id=c0045955-95e4-4731-997a-f921d8f1833e \
--flavor m1.tiny \
webserver

 

Pour pouvoir y accéder, attention à bien autoriser le port 80 (Nginx) sur votre instance, et optionnellement lui ajouter une ip flottante.

 

Maintenant que l’instance est crée, elle est visible depuis OpenStack ou directement depuis Docker :

 

Selection_003

 

Si vous avez bien autorisé le port 80 sur votre instance, et lui avez ajouté une ip flottante, vous pouvez requêter le serveur Web :

 

selectio3

 

 

En cas de problèmes, d’erreurs qui empêchent le bon fonctionnement de Nova-Docker sur votre OpenStack, voici les 3 logs à regarder :

 

/var/log/nova/nova-compute.log
/var/log/nova/nova-api.log
/var/log/glance/glance-api.log