Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

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

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
#DevoxxFR
Devoxx France 2016
Infra as Code, choisissez vous
la pilule rouge ou la pilule bleue ?
Fabien Arcellier @farcell...

Les vidéos YouTube ne sont plus prises en charge sur SlideShare

Regarder la vidéo sur YouTube

#DevoxxFR
Alexandre Raoul
L’OPS, kiffs : Puppet, Ansible, des
APIs et pas de clicodrome
2
Fabien Arcellier
Le DEV, kiffs :...
Prochain SlideShare
Ansib formation-ansible
Ansib formation-ansible
Chargement dans…3
×

Consultez-les par la suite

1 sur 54 Publicité

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

Télécharger pour lire hors ligne

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 ?

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 ?

Publicité
Publicité

Plus De Contenu Connexe

Diaporamas pour vous (20)

Les utilisateurs ont également aimé (20)

Publicité

Similaire à Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016 (20)

Publicité

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

×