26
1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container Retour d’expérience sur la dockérisation d’une application naguère déployée avec Ansible. Auteurs : Ernest CHIARELLO, IR Sophie MOLLARD, IE-CDD

docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

  • Upload
    others

  • View
    69

  • Download
    0

Embed Size (px)

Citation preview

Page 1: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

1INCLUDE 2016

Informatique scientifique à Besançon

docker / ansible : convergence avec ansible-container

Retour d’expérience sur la dockérisation d’une application naguère déployée avec Ansible.

Auteurs :

Ernest CHIARELLO, IR

Sophie MOLLARD, IE-CDD

Page 2: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

2Contexte scientifique :

mise en place d’une IDS

Donnée spatiale :- toute donnée pouvant être localisée : routes, bâtiments, relief, image satellitaire, etc.

- utilisée dans des disciplines de recherche variées

- nombreux chercheurs producteurs de données spatiales

Infrastructure de données spatiales (IDS) :- ensemble de services informatiques pour la gestion et la diffusion des données cartographiques

- regroupement des acteurs (producteurs, utilisateurs) autour du projet

- peut être définie à l’échelle régionale comme supranationale

- souvent basée sur la technologie web

Services classiques d’une IDS : Donnéesspatiales

Visualisation

Extraction

Recherche

Diffusion(moissonnage)

Page 3: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

3L’IDS geOrchestra

Infrastructure de données spatiales (IDS) : - assemblage de logiciels écrits en Java - interopérable - modulaire

Brique logicielle Type Fonction

Serveur d’applications GeoServer Diffusion de données vecteur et raster de manière standardisée

Géocatalogue GeoNetworkStockage des métadonnées et gestion de leur cycle de vie

Visualiseur MapfishApp Affichage, édition et requêtage des données spatiales

Extracteur ExtractorApp Extraction et récupération des données spatiales

Gestionnaires des rôles LdapAdmin Gestion des utilisateurs et des

groupes

Page 4: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

4

Utilisateurs NuageInfrastructure dedonnées spatiales

Les données sont déposées/partagées dans Owncloud, puis publiées sur l’IDS geOrchestra

Alimentation par ge@sync

Page 5: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

5GeOrchestra est un portail web

SecurityProxy

CAS

Othermodules

GeoServer

GeoNetwork

http

OwnCloud

Rôle de ge@sync dans geOrchestra

Page 6: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

6Outil de déploiement : Ansible

est un outil open-source de gestion de configuration écrit en python

Un système déclaratif : syntaxe YAML facilement lisible

Génération dynamique de fichiers de configuration

Le langage de template par défaut est Jinja2

Quasiment rien à installer :

- Ansible sur votre machine hôte

- accès root via SSH sur vos serveurs cibles

Ansible sert à déployer votre infrastructure

Ansible permet de vérifier : - que les services sont actifs

- que les fichiers de configuration sont bien à jour.

Page 7: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

7Conteneurs docker versus

machines virtuelles

Meilleure utilisation des ressources matériellesDéploiement simplifié des applicationsUn standard qui change le paysage du DevOps

Page 8: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

8Quelle automatisation choisir ?

Ansible est efficace pour configurer des VM.

La philosophie docker impose une approche différente.

Nos partenaires livrent aujourd’hui des conteneurs docker.

Comment les personnaliser pour les adapter à nos besoins ?

- comment dockériser une application ?

- est-il possible de réutiliser nos playbooks Ansible ?

Page 9: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

9Architecture de geOrchestra

Architecture détaillée

Page 10: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

10Les ressources docker sur le hub

https://hub.docker.com/ Tous les conteneurs dont on peut avoir besoin :

PostgresLdapGeoNetwork, GeoServer, ...Tomcat, Jetty, ...ApacheSsh...

Basées sur :- des distributions minimales- avec les outils de base

more but not less !

Page 11: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

11Dockerisation de geOrchestra

GeoWebCache

GeoNetwork

GeoData

Header

Analytics

CatalogApp

ExtractorAPP

MapFishApp

LdapAdmin

CAS

GeoServer

SMTP

Database

Proxy

LdapDownloadForm

16 conteneurs- sur le réseau 172.17.0.0/16- communiquant entre eux par des liens

Le proxy est le point d’entrée de la majorité

des conteneurs

Page 12: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

12Lancement de geOrchestra

$ docker psgeorchestra/security­proxy:latest   0.0.0.0:8080­>8080/tcp   georchestra_proxy_1georchestra/ldapadmin:latest        8080/tcp                 georchestra_ldapadmin_1georchestra/cas:latest              8080/tcp                 georchestra_cas_1georchestra/geonetwork:3­latest     8080/tcp                 georchestra_geonetwork_1georchestra/geoserver:latest        8080/tcp                 georchestra_geoserver_1georchestra/extractorapp:latest     8080/tcp                 georchestra_extractorapp_1georchestra/analytics:latest        8080/tcp                 georchestra_analytics_1georchestra/ssh_data                0.0.0.0:2222­>22/tcp     georchestra_geodata_1georchestra/mapfishapp:latest       8080/tcp                 georchestra_mapfishapp_1georchestra/catalogapp:latest       8080/tcp                 georchestra_catalogapp_1camptocamp/smtp­sink                25/tcp                   georchestra_smtp_1georchestra/ldap                    389/tcp                  georchestra_ldap_1georchestra/downloadform:latest     8080/tcp                 georchestra_downloadform_1georchestra/database                5432/tcp                 georchestra_database_1georchestra/header:latest           8080/tcp                 georchestra_header_1georchestra/geowebcache:latest      8080/tcp                 georchestra_geowebcache_1

L’orchestration des conteneurs est gérée dans un fichier nommé docker-compose.yml

$ docker­compose upTélécharge les images, lance les conteneurs, exécute l’orchestration....

Page 13: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

13docker-compose.yml

proxy:  image: georchestra/security­proxy:latest  ports:    ­ "8080:8080"  volumes:    ­ /etc/georchestra:/etc/georchestra  links:    ­ database ­ ldap    ­ cas ­ mapfishapp    ­ extractorapp ­ ldapadmin    ­ geonetwork ­ header    ­ geoserver ­ analytics    ­ catalogapp ­ downloadform  environment:    ­ XMS=512M    ­ XMX=1G

docker-compose.yml décrit les ports ouverts, les volumes, les liaisons, ...

Extrait concernant le conteneur proxy :

Le port 8080 de l’hôte correspond au port 8080 du conteneur

Le répertoire /etc/georchestra est partagé entre l’hôte et le conteneur

Nom de l’image téléchargée depuis docker-hub

Page 14: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

14Liens vers database

GeoWebCache

GeoNetwork

GeoData

Header

Analytics

CatalogApp

ExtractorAPP

MapFishApp

LdapAdmin

CAS

GeoServer

SMTP

Database

172.17.0.2/165432/tcp open postgresql

Proxy

Ldap

DownloadForm

La base de données est utilisée par 8 conteneurs

Page 15: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

15

database:  image: georchestra/database  environment:    ­ POSTGRES_USER=georchestra    ­ POSTGRES_PASSWORD=georchestra  volumes:    ­ postgresql_data:/var/lib/postgresql/data

Les données sont dans des volumes

# ls /var/lib/docker/volumes/postgresql_data/_data/base         pg_hba.conf    pg_notify     pg_stat      pg_twophase           postgresql.confglobal       pg_ident.conf  pg_replslot   pg_stat_tmp  PG_VERSION            postmaster.optspg_clog      pg_logical     pg_serial     pg_subtrans  pg_xlog               postmaster.pidpg_dynshmem  pg_multixact   pg_snapshots  pg_tblspc    postgresql.auto.conf

Le volume postgresql_data

garantit la pérennité des données.

Il est partagé entre l’hôte et le conteneur.

$ docker exec ­it georchestra_database_1 bashroot@a1d8e60f250c:/# ls /var/lib/postgresql/data/                                                  base         pg_hba.conf    pg_notify   pg_stat      pg_twophase      postgresql.confglobal    pg_ident.conf  pg_replslot   pg_stat_tmp  PG_VERSION      postmaster.optspg_clog      pg_logical     pg_serial   pg_subtrans  pg_xlog      postmaster.pidpg_dynshmem  pg_multixact   pg_snapshots  pg_tblspc    postgresql.auto.conf

docker­compose.yml

Page 16: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

16

FROM postgres:9.4

ENV DEBIAN_FRONTEND noninteractive

RUN apt­get update && \    apt­get install ­y postgresql­9.4­postgis­2.1

ADD *.sql /docker­entrypoint­initdb.d/ADD license.txt /docker­entrypoint­initdb.d/ADD logo.png /docker­entrypoint­initdb.d/

Se connecter sur le hub de docker pour en savoir plus sur l’image postgres:9.4

$ ls database00­create­user.sql         05­ldapadmin­data.sql01­create­extension.sql    06­ogc­server­statistics.sql02­mapfishapp.sql          07­atlas.sql03­downloadform.sql        07­ogc­server­statistics­data.sql04­ldapadmin.sql           08­geofence.sqlDockerfile                 fix­owner.sqllogo.png                   license.txt

Un conteneur est décrit par son Dockerfile

Dockerfile

Page 17: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

17

for f in /docker­entrypoint­initdb.d/*; do

    case "$f" in

        *.sh) echo "$0: running $f"; . "$f" ;;

        *.sql) echo "$0: running $f"; "${psql[@]}" < "$f"; echo ;;

        *) echo "$0: ignoring $f" ;;

    esac

done

Extrait de docker-entrypoint.sh

Le point d’entrée de postgres:9.4

Page 18: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

18Créer son propre Dockerfile

FROM georchestra/database

ENV DEBIAN_FRONTEND noninterativeENV TERM linux

RUN echo Europe/Paris | tee /etc/timezoneRUN dpkg­reconfigure ­­frontend noninteractive tzdata

ADD 09­geosync.sql /docker­entrypoint­initdb.d/ADD pg_hba.conf /docker­entrypoint­initdb.d/ADD start.sh /docker­entrypoint­initdb.d/

CMD ["postgres"]

echo "setting pg_hba.conf"cp /docker­entrypoint­initdb.d/pg_hba.conf /var/lib/postgresql/data/.

CREATE USER geosync WITH PASSWORD 'secret';

CREATE DATABASE geosync_data_open with owner geosync;CREATE EXTENSION postgis;

09­geosync.sql

start.sh

Image du projet

Ajout de 3 fichiers

Timezone à Paris

Dockerfile

Page 19: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

19

$ ansible­container init

$ tree ­L 2.

 ├── 09­geosync.sql.j2 ├── ansible

     │ ├── ansible.cfg     │ ├── container.yml     │ ├── main.yml     │ ├── requirements.txt     │ └── requirements.yml ├── pg_hba.conf └── start.sh

services:

  database:    image: georchestra/database    entrypoint: /docker­entrypoint.sh    command: postgres

­ hosts: database  gather_facts: no

  vars:    geosync: {      db: {        name: geosync_data,        user: geosync,        pass: secret,      }    }

Utiliser ansible-container

main.yml

container.ymlAnsible-container permet de créer des conteneurs docker, en utilisant les technologies Ansible.

.../...

Page 20: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

20

  tasks:    ­ name: setting timezone      raw: echo Europe/Paris | tee /etc/timezone    ­ name: setting timezone      raw: dpkg­reconfigure ­­frontend noninteractive tzdata    ­ name: copy start.sh      copy: src=../start.sh             dest=/docker­entrypoint­initdb.d/start.sh             owner=root group=root mode=0775    ­ name: copy pg_hba.conf      copy: src=../pg_hba.conf             dest=/docker­entrypoint­initdb.d/pg_hba.conf             owner=root group=root mode=0775    ­ name: template 09­geosync.sql      template: src=../09­geosync.sql.j2                 dest=/docker­entrypoint­initdb.d/09­geosync.sql                 owner=root group=root mode=0664

CREATE USER geosync WITH PASSWORD '{{geosync.db.pass}}';

CREATE DATABASE {{geosync.db.name}} with owner {{geosync.db.user}};\connect {{geosync.db.name}}CREATE EXTENSION postgis;

09­geosync.sql.j2

main.yml

Ansible-container et sa syntaxe

Page 21: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

21Exemple plus complexe : ldap

FROM dinkel/openldap

RUN apt­get update && \    apt­get install ­y ldap­utils

USER openldapADD groupofmembers.ldif /etc/ldap.dist/modules/ADD docker/memberof.ldif /tmp/ADD georchestra.ldif /tmp/

USER rootRUN mkdir /docker­entrypoint.dADD docker­entrypoint.d/* /docker­entrypoint.d/ADD docker­entrypoint.sh /RUN chmod +x /docker­entrypoint.d/*

ENTRYPOINT [ "/docker­entrypoint.sh" ]

CMD [ "slapd", "­d", "32768", "­u", "openldap",                               "­g", "openldap" ]

Le point d’entrée

La commande au démarrage

Installation de paquets spécifiques

Ajout de fichiers pour alimenter l’annuaire

Préparation du point d’entrée

Dockerfile permettant de créer georchestra/ldap

Dockerfile

Page 22: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

22

FROM georchestra/ldap

ENV SLAPD_DOMAIN georchestra.univ­fcomte.fr

RUN apt­get install ­y python­ldap cron sasl2­bin

ADD 01­ldap_sasl /docker­entrypoint.d/01­ldap_saslADD *.ldif /tmp/ADD saslauthd.conf /etc/saslauthd.confADD slapd.conf /tmp/slapd.confADD root_crontab /var/spool/cron/crontabs/root

ADD start.sh /root/

ENTRYPOINT [ "/docker­entrypoint.sh" ]

CMD ["/root/start.sh"]

/etc/init.d/cron start/etc/init.d/saslauthd startslapd ­d 32768 ­u openldap ­g openldap

start.sh

Dockerfile

Personnalisation du conteneur ldap

Objectif : utiliser les mots de passe de l’AD de Théma.

Ajout de :- saslauthd- cron

3 processes au démarrage du conteneur

Page 23: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

23

$ docker PSgeorchestra/security­proxy:latest   0.0.0.0:8080­>8080/tcp   georchestra_proxy_1georchestra/ldapadmin:latest        8080/tcp                 georchestra_ldapadmin_1georchestra/extractorapp:latest     8080/tcp                 georchestra_extractorapp_1geosync_geoserver                   8080/tcp                 georchestra_geoserver_1georchestra/geonetwork:3­latest     8080/tcp                 georchestra_geonetwork_1georchestra/mapfishapp:latest       8080/tcp                 georchestra_mapfishapp_1georchestra/analytics:latest        8080/tcp                 georchestra_analytics_1geosync_ssh_data                    0.0.0.0:2222­>22/tcp     georchestra_geodata_1georchestra/cas:latest              8080/tcp                 georchestra_cas_1georchestra/downloadform:latest     8080/tcp                 georchestra_downloadform_1geosync_ldap                        389/tcp                  georchestra_ldap_1geosync_database                    0.0.0.0:5432­>5432/tcp   georchestra_database_1georchestra/geowebcache:latest      8080/tcp                 georchestra_geowebcache_1camptocamp/smtp­sink                25/tcp                   georchestra_smtp_1georchestra/catalogapp:latest       8080/tcp                 georchestra_catalogapp_1georchestra/header:latest           8080/tcp                 georchestra_header_1

Bilan de nos modifications

4/16 conteneurs ont été adaptés à nos besoins.

georchestra/geoserver:latest a été remplacé par    geosync_geoservergeorchestra/ssh_data         a été remplacé par    geosync_ssh_datageorchestra/ldap             a été remplacé par    geosync_ldapgeorchestra/database         a été remplacé par    geosync_database

Il suffit de modifier docker-compose.yml pour obtenir notre geOrchestra !

Page 24: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

24

UID        PID  PPID  CMDroot         1     0 /bin/bash /root/start.shroot        31     1 /usr/sbin/cronroot        52     1 /usr/sbin/saslauthd ­a ldap ­r ­c ­m /var/run/saslauthd ­n 5root        53    52 /usr/sbin/saslauthd ­a ldap ­r ­c ­m /var/run/saslauthd ­n 5root        54    52 /usr/sbin/saslauthd ­a ldap ­r ­c ­m /var/run/saslauthd ­n 5root        55    52 /usr/sbin/saslauthd ­a ldap ­r ­c ­m /var/run/saslauthd ­n 5root        56    52 /usr/sbin/saslauthd ­a ldap ­r ­c ­m /var/run/saslauthd ­n 5openldap    57     1 slapd ­d 32768 ­u openldap ­g openldap

UID        PID  PPID CMDpostgres     1     0 postgrespostgres    18     1 postgres: checkpointer process  postgres    19     1 postgres: writer process  postgres    20     1 postgres: wal writer process  postgres    21     1 postgres: autovacuum launcher process  postgres    22     1 postgres: stats collector process  postgres    31     1 postgres: ldapadmin georchestra 172.17.0.14postgres    65     1 postgres: geonetwork georchestra 172.17.0.13

UID        PID  PPID  CMDroot         1     0  /bin/sh ­c /root/start.shroot         7     1  /usr/sbin/sshd ­D

Liste des processes par conteneur

database

ldap

ssh_data

Page 25: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

25Conclusion

Docker est une technologie séduisante et efficace.

La courbe d’apprentissage est longue, mais le jeu en vaut la chandelle.

On pensait oublier bash et consorts… mais le contraire s’impose.

Ansible-container est un concept intéressant, mais il ne masque pas la complexité de Docker.

Il reste à configurer un serveur proxy à notre geOrchestra (Nginx?)

Travail à venir : la répartition des volumes entre différents hôtes.=> stockage distribué avec GlusterFS

Exit à terme les architectures habituelles de virtualisation.

Page 26: docker / ansible : convergence avec ansible-container · 2016. 12. 9. · 1 INCLUDE 2016 Informatique scientifique à Besançon docker / ansible : convergence avec ansible-container

26

Merci de votre attention...

Avez-vous des questions ?