Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Déploiement et configuration avec Ansible
Simon DelamareLaboratoire de l’Informatique du Parallélisme
Journée ARAMIS, 13 avril 2017
S. Delamare Déploiement et configuration avec Ansible ARAMIS 1 / 29
Introduction
S. Delamare Déploiement et configuration avec Ansible ARAMIS 2 / 29
Qu’est-ce qu’Ansible
Automatisation des tâches d’adminSur un parc de machinesDéployer des applications, configurer, gérer les services
Développement :https://github.com/ansible/ansibleÉcrit en python (les utilisateurs manipulent surtout du YAML)GPLv3Première version il y a 5 ans, version 2.2.1 il y a 3 mois
S. Delamare Déploiement et configuration avec Ansible ARAMIS 3 / 29
Principes sur les outils de gestion de configuration
“Recettes” de configuration centralisées, appliquées sur les machines(= noeuds)
Pas de config “à la main”
Fournit des modules de haut niveau pour manipulations courantes (vs.script shell) : Installation de paquets, gestion de servicesOn décrit l’état souhaité plutôt que les étapes pour y arriver (vs. scriptshell)
Idempotence : une recette aboutit au même résultat qu’on l’applique une ouplusieurs foisLes recettes doivent être écrites de cette façon pour que l’état soit stable
S. Delamare Déploiement et configuration avec Ansible ARAMIS 4 / 29
Principes sur les outils de gestion de configuration
“Recettes” de configuration centralisées, appliquées sur les machines(= noeuds)
Pas de config “à la main”
Fournit des modules de haut niveau pour manipulations courantes (vs.script shell) : Installation de paquets, gestion de services
On décrit l’état souhaité plutôt que les étapes pour y arriver (vs. scriptshell)
Idempotence : une recette aboutit au même résultat qu’on l’applique une ouplusieurs foisLes recettes doivent être écrites de cette façon pour que l’état soit stable
S. Delamare Déploiement et configuration avec Ansible ARAMIS 4 / 29
Principes sur les outils de gestion de configuration
“Recettes” de configuration centralisées, appliquées sur les machines(= noeuds)
Pas de config “à la main”
Fournit des modules de haut niveau pour manipulations courantes (vs.script shell) : Installation de paquets, gestion de servicesOn décrit l’état souhaité plutôt que les étapes pour y arriver (vs. scriptshell)
Idempotence : une recette aboutit au même résultat qu’on l’applique une ouplusieurs foisLes recettes doivent être écrites de cette façon pour que l’état soit stable
S. Delamare Déploiement et configuration avec Ansible ARAMIS 4 / 29
Rapport avec le devops ?
Centralisation des configurationsInfrastructure as a code: L’état d’une l’infra décrite par des recettesTravail en équipe (utilisation d’un VCS)Partage du savoir : Les devs connaissent l’env de prod, les opsconnaissent les modification à appliquer à la prod. avant le déploiementd’une appli.
AutomatisationMoins de tâches répétitives, manuelles → Raccourcir les cycles dedev./publication/déploiement/utilisationIl devient très plus simple d’instancier une plateforme de test
S. Delamare Déploiement et configuration avec Ansible ARAMIS 5 / 29
Les autres outils
Parmi les plus connus :CFEngineChefPuppetSaltAnsible
Avantages souvent cités pour Ansible :Simplicité :
Recette en YAMLRien à installer sur les noeudsMode push (par défaut): pas de serveur dédié
Complet : Description du parc machine, commandes ad-hoc, . . .Inconvénients :
Recettes : plus une succession de tâches à appliquer qu’une vision “hautniveau” du résultat souhaitéRisque de mauvaises pratiques, erreurs non détectéesPeut être plus lent (tâches appliquées individuellement au lieu d’être analyséesglobalement)
S. Delamare Déploiement et configuration avec Ansible ARAMIS 6 / 29
Bases d’Ansible
S. Delamare Déploiement et configuration avec Ansible ARAMIS 7 / 29
Bases : Installation
Installation, sur le poste de travail de l’utilisateur (le contrôleur) :
p ip i n s t a l l a n s i b l e
Installation, sur les noeuds : ssh, python
Pas d’agent, tout passe par SSH.
S. Delamare Déploiement et configuration avec Ansible ARAMIS 8 / 29
Bases : Installation
Installation, sur le poste de travail de l’utilisateur (le contrôleur) :
p ip i n s t a l l a n s i b l e
Installation, sur les noeuds : ssh, python
Pas d’agent, tout passe par SSH.
S. Delamare Déploiement et configuration avec Ansible ARAMIS 8 / 29
Bases : Installation
Installation, sur le poste de travail de l’utilisateur (le contrôleur) :
p ip i n s t a l l a n s i b l e
Installation, sur les noeuds : ssh, python
Pas d’agent, tout passe par SSH.
S. Delamare Déploiement et configuration avec Ansible ARAMIS 8 / 29
Bases : Inventaire
Fichier avec la liste des noeuds gérés par Ansible
web . example . orgdb . example . org
S. Delamare Déploiement et configuration avec Ansible ARAMIS 9 / 29
Bases : Inventaire
Fichier avec la liste des noeuds gérés par AnsibleOrganisés en groupes
[ w eb s e r v e r s ]web1 . example . orgweb2 . example . org
[ d b s e r v e r s ]db1 . example . orgdb2 . example . org
S. Delamare Déploiement et configuration avec Ansible ARAMIS 10 / 29
Bases : Inventaire
Fichier avec la liste des noeuds gérés par AnsibleOrganisés en groupesAssociés à des variables
[ w eb s e r v e r s ]web1 . example . orgweb2 . example . org
[ d b s e r v e r s ]db1 . example . org master=t r u edb2 . example . org
[ web s e r v e r s : v a r s ]h t tp_por t=80
S. Delamare Déploiement et configuration avec Ansible ARAMIS 11 / 29
Bases : Modules
Unité de base pour la réalisation d’une tâche sur un noeud.Abstraction par Ansible
Exemples : apt, yum, service, shell, copy, template, file, lineinfile, cron,user. . .Liste des modules (et leurs arguments):
http://docs.ansible.com/ansible/modules_by_category.html
a n s i b l e a l l −m apt −a pkg=vima n s i b l e web s e r v e r s −m copy −a s r c=~/ i ndex . html d e s t=/va r /www/ index . htmla n s i b l e db1 . example . org −m s h e l l −a " ps aux "
S. Delamare Déploiement et configuration avec Ansible ARAMIS 12 / 29
Démo 1
S. Delamare Déploiement et configuration avec Ansible ARAMIS 13 / 29
Bases : Playbooks
Fichier décrivant l’application d’une opérationtâches à appliquer sur certains noeuds
− ho s t s : web s e r v e r sv a r s :
h t tp_por t : 80t a s k s :
− name : I n s t a l l Apacheapt : pkg=apache2 s t a t e=p r e s e n t
− name : I n s t a l l d e f a u l t i nd ex . htmlcopy : s r c=index . html d e s t=/va r /www/ index . html
S. Delamare Déploiement et configuration avec Ansible ARAMIS 14 / 29
Bases : Playbooks
Fichier décrivant l’application d’une opérationtâches à appliquer sur certains noeudshandlers: tâches à appliquer en cas de changement
− ho s t s : web s e r v e r sv a r s :
h t tp_por t : 80t a s k s :
− name : I n s t a l l Apacheapt : pkg=apache2 s t a t e=p r e s e n t
− name : Copy d e f a u l t i nd e x . htmlcopy : s r c=index . html d e s t=/va r /www/ index . html
− name : Setup d e f a u l t c o n f i g u r a t i o nt emp la t e : s r c=apache . con f . j 2 d e s t=/e t c / apache2 / s i t e−enab l ed/000− d e f a u l t . con fn o t i f y : Re load apache
h a nd l e r s :− name : Re load apache
s e r v i c e : name=apache2 s t a t e=r e l o a d ed
template: génère (et copie) un fichier “paramétrisé”:Utilise jinja2conditions, boucles, etc.
S. Delamare Déploiement et configuration avec Ansible ARAMIS 15 / 29
Bases : Playbooks
Fichier décrivant l’application d’une opérationtâches à appliquer sur certains noeudshandlers: tâches à appliquer en cas de changement
− ho s t s : web s e r v e r sv a r s :
h t tp_por t : 80t a s k s :
− name : I n s t a l l Apacheapt : pkg=apache2 s t a t e=p r e s e n t
− name : Copy d e f a u l t i nd e x . htmlcopy : s r c=index . html d e s t=/va r /www/ index . html
− name : Setup d e f a u l t c o n f i g u r a t i o nt emp la t e : s r c=apache . con f . j 2 d e s t=/e t c / apache2 / s i t e−enab l ed/000− d e f a u l t . con fn o t i f y : Re load apache
h a nd l e r s :− name : Re load apache
s e r v i c e : name=apache2 s t a t e=r e l o a d ed
template: génère (et copie) un fichier “paramétrisé”:Utilise jinja2conditions, boucles, etc.
S. Delamare Déploiement et configuration avec Ansible ARAMIS 15 / 29
Bases : Playbooks
template: génère (et copie) un fichier “paramétrisé”:Utilise jinja2conditions, boucles, etc.
<V i r t u a lHo s t ∗ : {{ ht tp_por t }} >ServerAdmin webmas t e r@ loca l ho s tDocumentRoot / va r /www/<D i r e c t o r y "/ va r /www/">
A l l owOve r r i d e A l l</D i r e c t o r y >
</V i r t u a lHo s t >
S. Delamare Déploiement et configuration avec Ansible ARAMIS 16 / 29
Bases : Rôles
Organisation fonctionnelle des playbooksPlaybook trop grosRéutilisation
r o l e s /apache−s e r v e r /
t a s k s /main . yml
h a nd l e r s /main . yml
f i l e s /i ndex . html
t emp la t e /apache . con f . j 2
Ansible Galaxy (https://galaxy.ansible.com/) : Dépot de rôles prêts à l’emploi
S. Delamare Déploiement et configuration avec Ansible ARAMIS 17 / 29
Bases : Rôles
Organisation fonctionnelle des playbooksPlaybook trop grosRéutilisation
r o l e s /apache−s e r v e r /
t a s k s /main . yml
h a nd l e r s /main . yml
f i l e s /i ndex . html
t emp la t e /apache . con f . j 2
Ansible Galaxy (https://galaxy.ansible.com/) : Dépot de rôles prêts à l’emploi
S. Delamare Déploiement et configuration avec Ansible ARAMIS 17 / 29
Bases : Rôles
organisation fonctionnelle des playbooksappelés depuis un playbook de plus haut niveau
− ho s t s : web s e r v e r sr o l e s :
− apache−s e r v e r− example−web s i t e
S. Delamare Déploiement et configuration avec Ansible ARAMIS 18 / 29
Bases : Rôles
organisation fonctionnelle des playbooksappelés depuis un playbook de plus haut niveau
− ho s t s : web s e r v e r sr o l e s :
− common−admin−t o o l s− common−mon i to r ing−t o o l s− apache−s e r v e r− example−web s i t e
− ho s t s : d b s e r v e r sr o l e s :
− common−admin−t o o l s− common−mon i to r ing−t o o l s− po s t g r e s−s e r v e r
S. Delamare Déploiement et configuration avec Ansible ARAMIS 19 / 29
Bases : Rôles
organisation fonctionnelle des playbooksappelés depuis un playbook de plus haut niveau
− ho s t s : a l lr o l e s :
− common−admin−t o o l s− common−mon i to r ing−t o o l s
− ho s t s : web s e r v e r s− apache−s e r v e r− example−web s i t e
− ho s t s : d b s e r v e r sr o l e s :
− po s t g r e s−s e r v e r
S. Delamare Déploiement et configuration avec Ansible ARAMIS 20 / 29
Bases : Variables
Noeud associé à des variablesPeuvent être définies, dans l’inventaire, le playbook, les rôles, les facts
facts : variables générées dynamiquement avec des informations sur lamachine :
ansible_distribution_releaseansible_default_ipv4.addressansible_memtotal_mb. . .
S. Delamare Déploiement et configuration avec Ansible ARAMIS 21 / 29
Bases : Variables
Noeud associé à des variablesPeuvent-être définies, dans l’inventaire, le playbook, les rôles, les factsUtilisées dans les playbooks :
− name : I n s t a l l a t i o n du paquet fooapt : name=foo={{ f o o_v e r s i o n }}
− name : Demarrage du s e r v i c e redundants e r v i c e : name=redundant s t a t e=s t a r t e dwhen : " not ba ckup s e r v e r "
Ou dans les templates
#backpo r t . l i s t . j 2deb ht tp : // f t p . f r . deb i an . org / deb i an {{ a n s i b l e _ d i s t r i b u t i o n _ r e l e a s e }}−backpo r t s main
Il est possible d’accéder aux groupes et aux variables des autres noeuds
S. Delamare Déploiement et configuration avec Ansible ARAMIS 22 / 29
Bases : Variables
Noeud associé à des variablesPeuvent-être définies, dans l’inventaire, le playbook, les rôles, les factsUtilisées dans les playbooks :
− name : I n s t a l l a t i o n du paquet fooapt : name=foo={{ f o o_v e r s i o n }}
− name : Demarrage du s e r v i c e redundants e r v i c e : name=redundant s t a t e=s t a r t e dwhen : " not ba ckup s e r v e r "
Ou dans les templates
#backpo r t . l i s t . j 2deb ht tp : // f t p . f r . deb i an . org / deb i an {{ a n s i b l e _ d i s t r i b u t i o n _ r e l e a s e }}−backpo r t s main
Il est possible d’accéder aux groupes et aux variables des autres noeuds
S. Delamare Déploiement et configuration avec Ansible ARAMIS 22 / 29
Bases : Variables
Noeud associé à des variablesPeuvent-être définies, dans l’inventaire, le playbook, les rôles, les factsUtilisées dans les playbooks :
− name : I n s t a l l a t i o n du paquet fooapt : name=foo={{ f o o_v e r s i o n }}
− name : Demarrage du s e r v i c e redundants e r v i c e : name=redundant s t a t e=s t a r t e dwhen : " not ba ckup s e r v e r "
Ou dans les templates
#backpo r t . l i s t . j 2deb ht tp : // f t p . f r . deb i an . org / deb i an {{ a n s i b l e _ d i s t r i b u t i o n _ r e l e a s e }}−backpo r t s main
Il est possible d’accéder aux groupes et aux variables des autres noeuds
S. Delamare Déploiement et configuration avec Ansible ARAMIS 22 / 29
Bases : Variables
Il est possible d’accéder aux groupes et aux variables des autres noeuds:
#dhcpd . con f . j 2
group {{% f o r hos t i n g roups [ ' dh c p c l i e n t s ' ] | s o r t %}
hos t {{ hos t }} {hardware e t h e r n e t {{ h o s t v a r s [ ho s t ] [ ' macaddr ' ] }} ;f i x e d−add r e s s {{ hos t }} .{{ domain }} ;
}{% end f o r %}}
S. Delamare Déploiement et configuration avec Ansible ARAMIS 23 / 29
Démo 3
S. Delamare Déploiement et configuration avec Ansible ARAMIS 24 / 29
Exemple au LIP
S. Delamare Déploiement et configuration avec Ansible ARAMIS 25 / 29
Gestion de l’infrastructure du LIP
Environ 120 noeuds gérés20 groupes, 46 rôlesRecettes dans dépôt Git : collaborer, suivre les évolutions, revenir enarrièreY compris les secrets (mot de passe, etc.), chiffrésGénération automatique de pages d’information aux utilisateursGestion dynamique de l’inventaire (module maison)Intégration à Vagrant
S. Delamare Déploiement et configuration avec Ansible ARAMIS 26 / 29
Démo 4
S. Delamare Déploiement et configuration avec Ansible ARAMIS 27 / 29
Conclusion
S. Delamare Déploiement et configuration avec Ansible ARAMIS 28 / 29
Conclusion
Ansible : Gestion des configurations, déploiement d’application,automatisation, gestion du parc de machines
S’inscrit pleinement dans une démarche devopsUn survol des fonctionnalités
Vault, gestion de machines Windows et d’équipement réseau, les UI, lemode pull, etc.Mais on peut déjà faire beaucoup
À essayer !
S. Delamare Déploiement et configuration avec Ansible ARAMIS 29 / 29