Top Banner
#DevoxxFR Devoxx France 2016 Infra as Code, choisissez vous la pilule rouge ou la pilule bleue ? Fabien Arcellier @farcellier Alexandre Raoul @alex_raoul 1
53

Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

Apr 12, 2017

Download

Software

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

Devoxx France 2016Infra as Code, choisissez vous

la pilule rouge ou la pilule bleue ?Fabien Arcellier @farcellierAlexandre Raoul @alex_raoul

1

Page 2: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

Alexandre RaoulL’OPS, kiffs : Puppet, Ansible, des APIs et pas de clicodrome

2

Fabien Arcellier

Le DEV, kiffs : tout automatiser, mettre en prod

Page 3: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 3

Infra as code, késako?

Une team de winner

Une gestion du code de winner

Aller en production comme un winner

Au programme

Page 4: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

Infra as Code

Décrire sous forme de code exécutable et testable la configuration

de l’architecture technique d’infrastructure

Page 5: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

If you can’t spin up a full copy of your infra and test it,

you don’t actually have “infrastructure as code”.

You just have ... some code, and duct tape.

https://charity.wtf/2016/03/23/aws-networking-environments-and-you/

Page 6: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

Infra as Code, en théorie

http://www.xkcd.com/1319/

6

Page 7: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

Infra as Code, en pratique

http://www.xkcd.com/1319/

7

Page 8: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

La Pilule Rouge, on prend conscience

… qu’à l’arrache ou en mode pompier, on ne tiendra pas longtemps pas la cadence

… que l’Infra as Code c’est du code finalement assez classique

8

La Pilule Bleue, on reste

… à maintenir les services disponibles avec des bouts de ficelle,

… à scripter l’existant tel quel et à survivre avec les systèmes pourris

Pilule Bleue ou Rouge ?

Page 9: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

Boucle de feedback

c’est le temps mis pour se rendre compte de sa connerie

9

Page 10: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

Oui mais bon, on parle de l’infra là ...

10

“Je monte une copie de mon SI pour valider ma sonde de monitoring”

“Je le fais en prod - YOLO”

Page 11: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

Pour réduire la boucle de feedback, on isole !

11

Page 12: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

# Exemple de container # qui monte un elasticsearch ?> docker run -d --name search -v $pwd:/mnt -w /mnt ubuntu

?> docker exec --tty search ansible-playbook roles/elasticsearch/tests.yml ?> docker exec --tty search curl http://localhost:9200

?> docker stop search

12

Pilule rouge : les outils pour isoler existent

# Exemple de VM avec Vagrant # qui monte un elasticsearch ?> vagrant up ?> vagrant ssh -c 'curl http://localhost:9200' ?> vagrant halt

Monter des VMs avec vagrant Monter des containers avec docker

Page 13: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

Pilule rouge : utiliser des pratiques de développement adaptés

---- hosts: all roles: - role: fabientools.monitoring when: ff_monitoring_active

feature flipping

---- hosts: all roles: - role: fabientools.monitoring, nagios_plugins_nrpe_url: 'http://www.trololo.org/nagios_plugins_nrpe.tar.gz'

injection de configuration

13

Page 14: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

Les états désirés

Pour alléger son code, on déclare l'état attendu plutôt que l’action à faire.

14

Page 15: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 15

if (grep -q “(\d){1,3}\.(\d){1,3}\.(\d){1,3}\.(\d){1,3}(\s)+myapi\.dev” /etc/hosts | grep -qv 127.0.0.1); then sed ‘s/.* myapi.dev/127.0.0.1 myapi.dev/g’ -i /etc/hosts; fi

if (!grep -q myapi.dev /etc/hosts); then echo "127.0.0.1 myapi.dev" >> /etc/hosts; fi

echo "127.0.0.1 myapi.dev" >> /etc/hosts

Pilule bleue : ajouter une entrée dans un fichier hosts

Page 16: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 16

if (grep -q “(\d){1,3}\.(\d){1,3}\.(\d){1,3}\.(\d){1,3}(\s)+myapi\.dev” /etc/hosts | grep -qv 127.0.0.1); then sed ‘s/.* myapi.dev/127.0.0.1 myapi.dev/g’ -i /etc/hosts; fi

if (!grep -q myapi.dev /etc/hosts); then echo "127.0.0.1 myapi.dev" >> /etc/hosts; fi

echo "127.0.0.1 myapi.dev" >> /etc/hosts

Pilule bleue : ajouter une entrée dans un fichier hosts

Page 17: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

Le monte chargeJe suis au 6e, je veux aller au 2e1) Je reste appuyé sur Down2) Je vois “2”3) J'arrête d’appuyer

17

L’ascenseur

Je suis au 6e, je veux aller au 2e1) J’appuie sur “2”2) Je joue sur mon téléphone

Bonus : je suis au 2e, j’appuie sur “2”, rien ne se passeL’idempotence, c’est ça

Page 18: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

- lineinfile: dest: /etc/hosts regexp: 'myapi.dev$' line: '127.0.0.1 myapi.dev'

AnsiblePuppet

Pilule rouge : lisibilité + idempotence

host { 'myapi.dev': ip => '127.0.0.1',}

18

Page 19: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 19

Une team de winner

Page 20: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

Le super hérosRésout vos problèmes

mais …casse tout autour pour le faire

20

Le moine codeurImplémente tout ce que vous voulez

mais …dans son coin

Le grand architecteFait un dossier d’archi pour chaque

évolution mais …il se retrouve périmé après

chaque implem’

Le critiqueA des convictions sur tout

mais …n’a jamais rien implémenté de concret

L’archivisteRefactore le code tout le temps

mais … ne fait rien de nouveau

Page 21: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

documentation as code

definition of done & tests

d’acceptance

Rétrospectives

revue de code

Testsautomatisés

21

Construire votre équipe à l’aide des pratiques de dev

Page 22: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 22

Méthode : Revue de code

Identifier les erreurs

Monter / Faire monter en compétence

Expliquer le code

Faire émerger les standards de l’équipe

Partager la propriété du code

Page 23: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

C’est quoi le meilleur “DevOps tool” ?

23

Objectif :Partager la vérité sur ce qui doit se passer

Page 24: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 24

Une gestion du code de winner

Page 25: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

Pilule bleue : La dette technique

25

Page 26: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

Pilule rouge : On prend conscience …

26

le craft, c’est comme Tetris

Page 27: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 27

Pilule bleue : subir ses scripts bash

Page 28: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 28

Pilule rouge : maîtriser ses scripts bash

#!/usr/bin/env bash

echo "Hello world"

Objectif : ramener bash dans le droit chemin

set -o errexit

set -o nounset Arrête l'exécution si une variable n’est pas déclaréeArrête l'exécution si une commande échoue

Petit bonus lisibilité : utilisez les flags en mode longGenre “curl --output” et pas “curl -o”

Et bien sûr plein d’autres …

Page 29: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

Aller en prod comme un winner

29

Page 30: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

Pilule bleue : pour savoir ce qu’il y a en production...

30

On va voir l’architecte

Page 31: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

Pilule rouge : pour savoir ce qu’il y a en prod, il faut logger chaque changement d’infra

infra à l’instant T

31

le code d’infrastructure

le résultat de l'exécution= +

Le résultat peut vivre dans Jenkins, PuppetDB, Ansible Tower, Rundeck, être remonté via ELK …

Page 32: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

Pilule rouge : pour savoir ce qu’il y a en prod, il faut logger chaque changement d’infra

infra à l’instant T

32

le code d’infrastructure

le résultat de l'exécution= +

Le résultat peut vivre dans Jenkins, PuppetDB, Ansible Tower, Rundeck, être remonté via ELK …

Page 33: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

- name: wait for tomcat to be ready pause: seconds=30

33

Pilule bleue : après avoir lancé Tomcat, “on attend un peu”

- name: start Tomcat service: name=tomcat state=started

Page 34: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR

- name: wait for tomcat to be ready pause: seconds=30

34

Pilule bleue : après avoir lancé Tomcat, “on attend un peu plus”

- name: start Tomcat service: name=tomcat state=started

- name: wait for tomcat to be ready pause: seconds=60

Page 35: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 35

Pilule rouge : Retirer tous les “sleep”

Objectif : rendre le système plus prédictible

- name: start Tomcat service: name=tomcat state=started

- name: wait for tomcat to listen wait_for: port=8080

- name: wait to be serving uri: url: "http://127.0.0.1:8080/ABC" status_code: 200 register: result until: 'ABC app' in result.content retries: 5 delay: 10

Page 36: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 36

Methode : cli first !

un script qui tourne sur jenkins, ... , doit fonctionner en ligne de commande

● Debugger plus facilement● Jouer en mode dégradé● Versionner le code de votre job

Page 37: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 37

la pyramide des tests

Test manuel

TestsEnd to End

TestsIntégrations

TestsUnitaires

Page 38: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

Un test qui sert à quelque chose ...

Spécifier l’intention d’un code

Assurer la non régression dans le temps

Assurer que le code fait ce qu’il dit

38

Page 39: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 39

à propos des tests unitaires ...

Tests unitaires de l’outil

à ne pas confondre avec

Tests unitaires de notre code construit avec le DSL

Page 40: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 40

Un petit refactoring avec les tests unitaires dans le monde Puppet

On a une classe toute simple qui installe “curl” et “vim”

On veut rendre cette liste de packages variable sans casser l’existant

Page 41: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 41

On pose notre filet

Page 42: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 42

On pose notre filet

Page 43: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 43

On ajoute le test de la nouvelle feature

Page 44: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 44

On ajoute le test de la nouvelle feature

Page 45: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 45

Et on passe tout au vert !

Page 46: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 46

Et on passe tout au vert !

Page 47: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 47

à propos des tests d’intégration ...

On crée une VM et on lance le code

Forcément, c’est longLa boucle de feedback en prend un coup ...

Et vu qu’on a une combinatoire infinie, il faut faire des choix

Page 48: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 48

à propos des tests d’intégration ...

Pas de solution miracleQuand on ne sait pas, on fait ultra simple !

Page 49: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 49

à propos des tests d’intégration ...

Pas de solution miracleQuand on ne sait pas, on fait ultra simple !

Setup, test, teardown : 1) On crée une VM, 2) On lance le code, 3) On lance les tests,

4) On nettoie

Page 50: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 50

à propos des tests d’intégration ...

Niveau 1 : Smoke test

Niveau 2 : Test de la voie royale

Niveau 3 : Tests de non régression en cas de bug d’intégration

Niveau 4 : venez faire un talk dessus

L'échelle de maturité du vendredi soir

Page 51: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 51

Page 52: Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

#DevoxxFR 52

Vous croyez que les technologies changent le monde ?

Nous aussi ! Rejoignez-nous !

[email protected]

Merci

Culture CodeSoftware Craftsmanship :

Better Places with Better Code

Un livre collectif disponible gratuitement en téléchargement

http://www.octo.com/fr/publications/20-culture-code