Codons notre infrastructure

80
Codons notre Infrastructure

Transcript of Codons notre infrastructure

Codons notre Infrastructure

Qui suis-je● Oswald De Riemaecker

● CEO / Co-Founder de Continuous S.A. o Agile Delivery o Editeur PaaS continuousphp

● Agiliste, Architecte Cloud

Culture Agile● Amélioration au niveau de l’équipe de développement

o Meilleure collaboration o Amélioration continue o Toutes les compétences/Pas de silos o Framework de tests et intégration continue

● Amélioration au niveau gestion de produit Agile o Développement itératifs o Découpage en fonctionnalités o Maximisation de la valeur o MVP/Lean Startup

Culture DevOps● Agilité + Opération

● 3 piliers principaux: o Infrastructure as Code (IaC) o Livraisons/Déploiement Continue o Culture de la coopération

Infrastructure as Code● Coder les ressources des machines de l'infrastructure

● Coder et versioner l’infrastructure

● Tester les ressources et l’infrastructure

● Reconstruire les machines et l’infrastructure à la demande

OrganisationMon Infrastructure Votre Infrastructure Leur Infrastructure

Locale

EnvironnementsDevelopment Testing Staging Production

Roles

Load Balancer

Serveurs Application

Serveurs Indexes

Serveurs de base de données

Ressources● Une ressource représente une partie du système et sa configuration

Apache MySql Solr

Complexité● Maintenir une infrastructure est complexe ● Elle vit et évolue

o Ajouts de ressources o Mise à jour ressources o Patches de Sécurité o Changer/Mise à jour d’OS o ...

Outils● Répondre à cette problématique

Chef● Chef est un outil open-source ● Gestion l’automatisation de systèmes et d’infrastructure. ● Chef est basé sur Ruby

Chef● Les nodes représentes les serveurs dans votre infrastructure

● Les nodes peuvent être: o serveurs physique o serveurs virtuel o instances dans le cloud

● Chaque nodes appartient à: o une organisation o un environnement o a un ou plusieurs rôles

Node

NodeNodeNode

Node Node

Chef Client / Serveur

Node

NodeNodeNode

Node Node

Chef Serveur

chef-client

Ressources

Cookbooks Chef● Les cookbooks contiennent les artefacts de nos ressources

Recipes

Templates

Files

Attributs Etats des ressources

Cookbooks Chef● Les cookbooks contiennent les artefacts de nos ressources

Recipes

Templates

Files

Attributs Etats des ressources

Installation/configuration des ressources

Cookbooks Chef● Les cookbooks contiennent les artefacts de nos ressources

Recipes

Templates

Files

Attributs Etats des ressources

Installation/configuration des ressources

Templates de configuration

Cookbooks Chef● Les cookbooks contiennent les artefacts de nos ressources

Recipes

Templates

Files

Attributs Etats des ressources

Installation/configuration des ressources

Templates de configuration

Fichiers de configuration/script

L’approvisionnement (provisioning)

Approvisionnement de Role

Node

Role: Base de données

Chef Serveur Hey, je suis du rôle “Base de données”

et mon environnement “Development”

Chef clientRecipes

Templates

Attributs

Files

Cookbook Recipes

Templates

Attributs

Files

Cookbook

Exemple d’infrastructure● Serveur Web - Apache 2.4/PHP-5.5 ● Serveur de base de donnée - MySql ● Serveur d’index - Solr Web

Serveur

Solr

mysql

La communauté Chef

Analyse du Cookbook Apache● Support plusieurs plates-formes ● Support version d’apache ● Attributs:

o dir, docroot_dir o log_dir, error_log, access_log o default_modules o version o ...

Support et dépendances Cookbook

Recipes

Templates

Attributs

Files

Metadata

Dépendance(s)

Les attributs

Recipes

Templates

Attributs

Files

Metadata

Les recettes

Recipes

Templates

Attributs

Files

Metadata

cd recipes ls -l

default.rb iptables.rb logrotate.rb mpm_prefork.rb mpm_worker.rb mod_php5.rb mod_*.rb

Les templates

Recipes

Templates

Attributs

Files

Metadata

Les fichiers

Recipes

Templates

Attributs

Files

Metadata

cd files/default/ ls -l

apache2_module_conf_generate.pl

Codons nos cookbooks

Rôle: Serveur Web / Env: Production

Apache / php-5.5

Recipes

Templates

Attributs

Files

Metadata

Apache2

Recipes

Templates

Attributs

Files

Metadata

iptables

Recipes

Templates

Attributs

Files

Metadata

logrotate

PRODUCTION: Attributs de remplacementNode Rôle: WebServer

RO L E

Chef Développement Kit● Installation de chef-dk

o Berkself o Knife o ChefSpec o Test-Kitchen o Serverspec o Foodcritic

● knife cookbook create mon_org-webserver

Création de notre cookbook webserver

Ajout des dépendances

Dépendance(s)

● berks init

Initialisation avec Berkshelf

● berks install

Téléchargement des dépendances

● vi attributes/defaults.rb

Les attributs

Les recettes

Testons notre cookbook● kitchen list

Testons notre cookbook● kitchen verify default-ubuntu-1404

● knife cookbook upload mon_org-webserver

Versioner et uploader nos cookbook

Répétons l’exercice pour les roles base de donnée et d’indexes

Approvisionnement de notre SandboxDevelopment

Rôle: Sandbox / Environnement: Dev

mon_org-webserver

mon_org-index

mon_org-database

Composer NodeJs

Recipes

Templates

Attributs

Files

Metadata

Recipes

Templates

Attributs

Files

Metadata

Recipes

Templates

Attributs

Files

Metadata

Recipes

Templates

Attributs

Files

Metadata

Recipes

Templates

Attributs

Files

Metadata

mon_org-webserver mon_org-Index mon_org-database composer nodejs

DEVELOPPMENT: Attributs de remplacementNode Rôle: Sandbox

RO L E

Création de notre cookbook● knife cookbook create mon_org-sanbox

Ajout des dépendances

Dépendances

Téléchargement des dépendances

Les recettes● vi recipes/default.rb

● vi attributes/default.rb

Les attributs

Attributs

Testons notre cookbook

● Cookbooks par rôle de l’infrastructure ● Cookbook spécifique à l’environment de développement

o utilise les cookbooks des rôles de l’infrastructure

● Reproduction fiable de l’approvisionnement des rôles de l’infrastructure:

o Codé o Versionné o Testé o Déployé

Approvisionnement Résumé

Créons nos environnements

Locale

Créons notre environnement de development

Development

Vagrant● Créer et configurer des environnements de développement

● Providers (Drivers) o Virtualbox/VMWare o Docker o Instance EC2

● Approvisionnement avec: o Chef Client/Solo o Docker o Puppet Agent o …

Vagrantfile

Vagrant up

Infrastructure Immuable

Infrastructure Immuable

● Avantages: o Economie du temps perdu lors de l’approvisionnement o Plus de maintenance de serveurs => Remplacement o Image machine statique pré-construites et testées o Retour aisé à une version précédente

V1

V2

V3

Data

Packer● Packer

o Builders (Amazon AMI, Microsoft Azure, DigitalOcean, Docker, Google Compute Engine, …)

o Provisioners (Shell script, Chef client, Ansible, Puppet, Salt, …) o Post-processor (Docker-push, Vagrant, Atlas, …)

Packer Config

Builders

Packer Config

Provisioners

● packer build packer.json

Créons nos image

Créons nos image

Répétons l’exercice pour le rôle index

Créons notre environnement de Production/Staging

AWS CloudFormation● Manière simple de créer et gérer un regroupement de ressources AWS

● CloudFormation s’occupe des dépendances

● Une fois les ressources déployées, vous pouvez les modifier et les mettre à jour de manière prévisible et contrôlée

● AWS CloudFormation prend en charge les ressources suivants :

o Auto Scaling/Elastic Load Balancing o VPC o EC2 o RDS o IAM o …

VPC

Subnet Privé

Subnet Public

JSON

Autoscale

Web Web Web

Autoscale

Index Index Index

Structure d’un CF

Structure d’un CF

Structure d’un CF

Structure d’un CF

Structure d’un CF

Structure d’un CF

Créons notre pile web serveur

Créons notre pile web serveur

Créons notre pile web serveur

Créons notre pile web serveur

● Approvisionnement de nos machines

● Infrastructure Immuable o Images statiques

● Utilisation Images dans Cloud Formation AWS

● Paramètre d’environnement Cloud Formation

● Nous pouvons maintenant utiliser nos artefacts pour construire nos différents environments

Infrastructure Résumé

Orchestration de l’infrastructureTesting

Development

Vagrant

Feature branch

develop branch

revision branch

Staging

Production

CI/CD

prepare test package

prepare test package

prepare test package

Questions ?