#DevoxxFR
Devoxx France 2016
Infra as Code, choisissez vous
la pilule rouge ou la pilule bleue ?
Fabien Arcellier @farcell...
#DevoxxFR
Alexandre Raoul
L’OPS, kiffs : Puppet, Ansible, des
APIs et pas de clicodrome
2
Fabien Arcellier
Le DEV, kiffs :...
#DevoxxFR 3
Infra as code, késako?
Une team de winner
Une gestion du code de winner
Aller en production comme un winner
Au...
#DevoxxFR
Infra as Code
Décrire sous forme de code
exécutable et testable la configuration
de l’architecture technique
d’i...
#DevoxxFR
If you can’t spin up
a full copy of your infra and test it,
you don’t actually have “infrastructure as code”.
Yo...
#DevoxxFR
Infra as Code, en théorie
http://www.xkcd.com/1319/
6
#DevoxxFR
Infra as Code, en pratique
http://www.xkcd.com/1319/
7
#DevoxxFR
La Pilule Rouge,
on prend conscience
… qu’à l’arrache ou en mode
pompier, on ne tiendra pas
longtemps pas la cad...
#DevoxxFR
Boucle de feedback
c’est le temps mis pour
se rendre compte de sa connerie
9
#DevoxxFR
Oui mais bon, on parle de l’infra là ...
10
“Je monte une copie de
mon SI pour valider ma
sonde de monitoring”
“...
#DevoxxFR
Pour réduire la boucle de
feedback, on isole !
11
#DevoxxFR
# Exemple de container
# qui monte un elasticsearch
?> docker run -d --name search -v $pwd:/mnt -
w /mnt ubuntu
...
#DevoxxFR
Pilule rouge : utiliser des pratiques de développement adaptés
---
- hosts: all
roles:
- role: fabientools.monit...
#DevoxxFR
Les états désirés
Pour alléger son code, on déclare l'état attendu
plutôt que l’action à faire.
14
#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/...
#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/...
#DevoxxFR
Le monte charge
Je suis au 6e, je veux aller au 2e
1) Je reste appuyé sur Down
2) Je vois “2”
3) J'arrête d’appu...
#DevoxxFR
- lineinfile:
dest: /etc/hosts
regexp: 'myapi.dev$'
line: '127.0.0.1 myapi.dev'
AnsiblePuppet
Pilule rouge : lis...
#DevoxxFR 19
Une team de winner
#DevoxxFR
Le super héros
Résout vos problèmes
mais …
casse tout autour pour le faire
20
Le moine codeur
Implémente tout ce...
#DevoxxFR
documentation
as code
definition of
done &
tests
d’acceptance
Rétrospectives
revue de
code
Tests
automatisés
21
...
#DevoxxFR 22
Méthode : Revue de code
Identifier les erreurs
Monter / Faire monter en
compétence
Expliquer le code
Faire ém...
#DevoxxFR
C’est quoi le meilleur “DevOps tool” ?
23
Objectif :
Partager la vérité sur ce qui doit se passer
#DevoxxFR 24
Une gestion du code de winner
#DevoxxFR
Pilule bleue : La dette technique
25
#DevoxxFR
Pilule rouge : On prend conscience …
26
le craft, c’est comme Tetris
#DevoxxFR 27
Pilule bleue : subir ses scripts bash
#DevoxxFR 28
Pilule rouge : maîtriser ses scripts bash
#!/usr/bin/env bash
echo "Hello world"
Objectif : ramener bash dans...
#DevoxxFR
Aller en prod comme un winner
29
#DevoxxFR
Pilule bleue : pour savoir ce qu’il y a en production...
30
On va voir l’architecte
#DevoxxFR
Pilule rouge : pour savoir ce qu’il y a en prod,
il faut logger chaque changement d’infra
infra à
l’instant T
31...
#DevoxxFR
Pilule rouge : pour savoir ce qu’il y a en prod,
il faut logger chaque changement d’infra
infra à
l’instant T
32...
#DevoxxFR
- name: wait for tomcat to be ready
pause: seconds=30
33
Pilule bleue : après avoir lancé Tomcat,
“on attend un ...
#DevoxxFR
- name: wait for tomcat to be ready
pause: seconds=30
34
Pilule bleue : après avoir lancé Tomcat,
“on attend un ...
#DevoxxFR 35
Pilule rouge : Retirer tous les “sleep”
Objectif : rendre le système plus prédictible
- name: start Tomcat
se...
#DevoxxFR 36
Methode : cli first !
un script qui tourne sur jenkins, ... , doit fonctionner en ligne de commande
● Debugge...
#DevoxxFR 37
la pyramide des tests
Test
manuel
Tests
End to End
Tests
Intégrations
Tests
Unitaires
Un test qui sert à quelque chose ...
Spécifier l’intention d’un code
Assurer la non régression dans le temps
Assurer que l...
#DevoxxFR 39
à propos des tests unitaires ...
Tests unitaires de l’outil
à ne pas confondre avec
Tests unitaires de notre ...
#DevoxxFR 40
Un petit refactoring avec les tests unitaires
dans le monde Puppet
On a une classe toute simple qui installe ...
#DevoxxFR 41
On pose notre filet
#DevoxxFR 42
On pose notre filet
#DevoxxFR 43
On ajoute le test de la nouvelle feature
#DevoxxFR 44
On ajoute le test de la nouvelle feature
#DevoxxFR 45
Et on passe tout au vert !
#DevoxxFR 46
Et on passe tout au vert !
#DevoxxFR 47
à propos des tests d’intégration ...
On crée une VM et on lance le code
Forcément, c’est long
La boucle de fe...
#DevoxxFR 48
à propos des tests d’intégration ...
Pas de solution miracle
Quand on ne sait pas, on fait ultra simple !
#DevoxxFR 49
à propos des tests d’intégration ...
Pas de solution miracle
Quand on ne sait pas, on fait ultra simple !
Set...
#DevoxxFR 50
à propos des tests d’intégration ...
Niveau 1 : Smoke test
Niveau 2 : Test de la voie royale
Niveau 3 : Tests...
#DevoxxFR 51
#DevoxxFR 52
Vous croyez que les technologies
changent le monde ?
Nous aussi ! Rejoignez-nous !
recrutement@octo.com
Merci...
#DevoxxFR
http://docs.ansible.com/ansible/glossary.html
http://blog.octo.com/revue-de-code-quel-format-choisir/
https://ww...
Prochain SlideShare
Chargement dans…5
×

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

247 vues

Publié le

Après maints périples, vous avez progressivement amélioré votre capacité à gérer des environnements au travers d'Infra as Code. Votre code initialement simple a pris de l'embonpoint et vous sentez la réalité vous rattraper implacablement : vous êtes en train de créer de la complexité, voire même de la dette.

Loin d'être une fatalité, à partir de notre expérience de développeur (Fabien) et d'ops (Alexandre), nous vous proposons un road trip dans des
pratiques de développement déclinées sur l'Infra as Code (Bash, Puppet et Ansible).

Nous présentons des pratiques, des plus simples activables immédiatement à des démarches plus complexes pour dessiner une big picture de l'Infra as Code, de ses contraintes, de ses forces et de ses pièges.

* Comment mettre en place des boucles de feedback les plus courtes possibles ?
* Comment faire du test driven development sur l'infrastructure ?
* Quels patterns et outils pour tester une configuration sans tirer toute votre infra et itérer plus rapidement ?
* Quel est le rapport entre Tetris, un ascenceur et l'Infra as Code ?

Publié dans : Logiciels
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
247
Sur SlideShare
0
Issues des intégrations
0
Intégrations
4
Actions
Partages
0
Téléchargements
3
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

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

  1. 1. #DevoxxFR Devoxx France 2016 Infra as Code, choisissez vous la pilule rouge ou la pilule bleue ? Fabien Arcellier @farcellier Alexandre Raoul @alex_raoul 1
  2. 2. #DevoxxFR Alexandre Raoul L’OPS, kiffs : Puppet, Ansible, des APIs et pas de clicodrome 2 Fabien Arcellier Le DEV, kiffs : tout automatiser, mettre en prod
  3. 3. #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
  4. 4. #DevoxxFR Infra as Code Décrire sous forme de code exécutable et testable la configuration de l’architecture technique d’infrastructure
  5. 5. #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/
  6. 6. #DevoxxFR Infra as Code, en théorie http://www.xkcd.com/1319/ 6
  7. 7. #DevoxxFR Infra as Code, en pratique http://www.xkcd.com/1319/ 7
  8. 8. #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 ?
  9. 9. #DevoxxFR Boucle de feedback c’est le temps mis pour se rendre compte de sa connerie 9
  10. 10. #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”
  11. 11. #DevoxxFR Pour réduire la boucle de feedback, on isole ! 11
  12. 12. #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
  13. 13. #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
  14. 14. #DevoxxFR Les états désirés Pour alléger son code, on déclare l'état attendu plutôt que l’action à faire. 14
  15. 15. #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
  16. 16. #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
  17. 17. #DevoxxFR Le monte charge Je suis au 6e, je veux aller au 2e 1) Je reste appuyé sur Down 2) Je vois “2” 3) J'arrête d’appuyer 17 L’ascenseur Je suis au 6e, je veux aller au 2e 1) J’appuie sur “2” 2) Je joue sur mon téléphone Bonus : je suis au 2e, j’appuie sur “2”, rien ne se passe L’idempotence, c’est ça
  18. 18. #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
  19. 19. #DevoxxFR 19 Une team de winner
  20. 20. #DevoxxFR Le super héros Résout vos problèmes mais … casse tout autour pour le faire 20 Le moine codeur Implémente tout ce que vous voulez mais … dans son coin Le grand architecte Fait un dossier d’archi pour chaque évolution mais … il se retrouve périmé après chaque implem’ Le critique A des convictions sur tout mais … n’a jamais rien implémenté de concret L’archiviste Refactore le code tout le temps mais … ne fait rien de nouveau
  21. 21. #DevoxxFR documentation as code definition of done & tests d’acceptance Rétrospectives revue de code Tests automatisés 21 Construire votre équipe à l’aide des pratiques de dev
  22. 22. #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
  23. 23. #DevoxxFR C’est quoi le meilleur “DevOps tool” ? 23 Objectif : Partager la vérité sur ce qui doit se passer
  24. 24. #DevoxxFR 24 Une gestion du code de winner
  25. 25. #DevoxxFR Pilule bleue : La dette technique 25
  26. 26. #DevoxxFR Pilule rouge : On prend conscience … 26 le craft, c’est comme Tetris
  27. 27. #DevoxxFR 27 Pilule bleue : subir ses scripts bash
  28. 28. #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ée Arrête l'exécution si une commande échoue Petit bonus lisibilité : utilisez les flags en mode long Genre “curl --output” et pas “curl -o” Et bien sûr plein d’autres …
  29. 29. #DevoxxFR Aller en prod comme un winner 29
  30. 30. #DevoxxFR Pilule bleue : pour savoir ce qu’il y a en production... 30 On va voir l’architecte
  31. 31. #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 …
  32. 32. #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 …
  33. 33. #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
  34. 34. #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
  35. 35. #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
  36. 36. #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
  37. 37. #DevoxxFR 37 la pyramide des tests Test manuel Tests End to End Tests Intégrations Tests Unitaires
  38. 38. 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
  39. 39. #DevoxxFR 39 à propos des tests unitaires ... Tests unitaires de l’outil à ne pas confondre avec Tests unitaires de notre code construit avec le DSL
  40. 40. #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
  41. 41. #DevoxxFR 41 On pose notre filet
  42. 42. #DevoxxFR 42 On pose notre filet
  43. 43. #DevoxxFR 43 On ajoute le test de la nouvelle feature
  44. 44. #DevoxxFR 44 On ajoute le test de la nouvelle feature
  45. 45. #DevoxxFR 45 Et on passe tout au vert !
  46. 46. #DevoxxFR 46 Et on passe tout au vert !
  47. 47. #DevoxxFR 47 à propos des tests d’intégration ... On crée une VM et on lance le code Forcément, c’est long La boucle de feedback en prend un coup ... Et vu qu’on a une combinatoire infinie, il faut faire des choix
  48. 48. #DevoxxFR 48 à propos des tests d’intégration ... Pas de solution miracle Quand on ne sait pas, on fait ultra simple !
  49. 49. #DevoxxFR 49 à propos des tests d’intégration ... Pas de solution miracle Quand 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
  50. 50. #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
  51. 51. #DevoxxFR 51
  52. 52. #DevoxxFR 52 Vous croyez que les technologies changent le monde ? Nous aussi ! Rejoignez-nous ! recrutement@octo.com Merci Culture Code Software Craftsmanship : Better Places with Better Code Un livre collectif disponible gratuitement en téléchargement http://www.octo.com/fr/publications/20-culture-code
  53. 53. #DevoxxFR http://docs.ansible.com/ansible/glossary.html http://blog.octo.com/revue-de-code-quel-format-choisir/ https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch- workflow https://docs.puppetlabs.com/pe/latest/cmgmt_puppetfile.html http://docs.ansible.com/ansible/galaxy.html#installing-multiple-roles-from-a-file Infrastructure as Code - Kief Morris http://garylarizza.com/blog/2013/12/08/when-to-hiera/ Bibliographie 53

×