puppet, la philosophie devops
TRANSCRIPT
Puppet, la philosophie DevOps
@Jeoffreybauvin@Versusmind
Jeoffrey BauvinConsultant IT chez Versusmind
Nancy, France
@jeoffreybauvin
Introduction : DevOps ?
- Équipes cloisonnées
- Mauvaise collaboration
- Lourdeur administrative / Retards de livraisons
- Besoin d’évolution rapide
- Impact sur la qualité des applications
DevOps : Pourquoi ?
Introduction : Pourquoi ?
DevOps : Popularité (1/2)
Les bénéfices du DevOps
DevOps : Composants
Automatisation IT
Déploiement manuel
- Adapté pour un serveur, mais pour 30 ?
- Un script Bash ? Est-ce maintenable ?
- Et sur d’autres systèmes d’exploitation ?
Déploiement centralisé- Configuration centralisée
- Déploiement automatisé de masse
- Abstraction du système d’exploitation
Quels produits ?
Chef (créé en 1993, développé en Erlang)
Puppet (créé en 2005, développé en Ruby)
Ansible (créé en 2012, développé en Python)
CFEngine (créé en 2013, développé en C)
Puppet
Puppet- Logiciel libre (Apache 2.0)
- Existe en version “Enterprise”- Support des machines virtuelles Amazon EC2- Dashboard centralisé
- Fonctionne sous GNU/Linux, Windows et MacOS X
- Version actuelle : 4.0, publiée le 16 avril 2015
- Communication HTTPS entre le serveur et les agents
Ils utilisent Puppet
La suite sur https://puppetlabs.com/about/customers
Architecture
SSL
Installation de l’agent- “apt-get install puppet”
- Configuration dans /etc/puppet/puppet.conf :[main] server=puppet.versusmind.eu
- Génération du certificat côté “Agent” et soumission au serveur Puppet
- Approbation (ou non) de la part du serveur Puppet
- puppet agent -t
Un agent Puppetroot@monserveur ~ # puppet agent -tInfo: Retrieving pluginfactsInfo: Retrieving pluginInfo: Loading factsInfo: Caching catalog for monserveur.example.comInfo: Applying configuration version '1431791808'Notice: /Stage[main]/Common::Install/Package[htop]/ensure: createdNotice: Finished catalog run in 7.66 seconds
Cycle de vie d’un Agent
Configurationnode /.*\.domaine.com)$/ {
class { ‘jboss’: }}
Module Jboss :
- Files : fichiers statiques- Manifests : code Puppet- Templates : fichiers dynamiques
La Forge PuppetLabshttps://forge.puppetlabs.com/ - Plus de 3 000 modules
Ressources nativesFile : créer un fichier ou un répertoire
Bien plus d’attributs sur https://docs.puppetlabs.com/references/4.0.latest/type.html
Ressources nativesPackage : installer un paquet
Providers :- apt (Debian / Ubuntu)- apple (Systèmes OS X)- gem (Pour Ruby)- pip (pour Python)- macports (MacPorts sur OS X)- pacman (ArchLinux)- windows- ...
Ressources nativesService : gérer les services
Attributs :- enable : service activé au démarrage du système- hasrestart : le script possède un paramètre “restart”- restart : spécifier une commande de restart
manuellement- ...
Support :- Debian- Windows- OS X - ...
Ressources nativesUser : créer un utilisateur
Attributs :- uid / gid : ID (numérique) pour l’utilisateur et son
groupe- Home : le répertoire par défaut- ...
Ressources nativesUne multitude de ressources :
- cron : déclarer une tâche planifiée- group : ajouter un groupe- interface : déclarer une interface réseau- exec : exécuter une commande personnalisée
La suite sur https://docs.puppetlabs.com/references/latest/type.html
Exemple concret
Composants : Git / Git Flow- Git
- Git Flow (develop, master, …)
- Une branche par nouveau module
- Pull Request !
Composants : Hiera- Séparer les données “variables” des modules- Fichiers .yaml
Hiera - Data bindings- Charger automatiquement les paramètres depuis Hiera
Noop / EnvironnementsNoop :
- /etc/puppet/puppet.conf : [agent] noop = true
- Ne pas appliquer automatiquement le catalogue Puppet- puppet agent -t --no-noop
Gestion des environnements : - Un environnement par utilisateur / feature- Une branche Git par environnement
Composants : ForemanENC : External Node Classifier
- Programme appelé par le serveur Puppet au moment ou l’agent demande son catalogue
The Foreman : - Interface Web- Rassemble les rapports d’erreurs / succès- Statistiques sur l’ensemble de vos agents- Gestion des “groupes d’hôtes” : rôles- Gestion des environnements
symposium { ensure => finished}
Merci !
questions {
ensure => present
}
@jeoffreybauvin