Qu'est-ce que le DevOps
?
"Devops"
est la concaténation des trois premières lettres du mot anglais development
(développement) et de l'abréviation ops
du mot anglais operations
(exploitation).
C'est un terme qui a été inventé par le belge Patrick Debois
en 2007.
Le DevOps
est un ensemble de pratiques qui visent à réduire le fossé entre le développement logiciel (Dev
) et les opérations informatiques (Ops
), d'où le terme.
L'idée est de favoriser une collaboration plus étroite et une meilleure communication entre ces deux entités qui, dans les modèles traditionnels, opèrent souvent de manière isolée.
Les principes clés du DevOps
comprennent aujourd'hui :
- l'intégration continue (
CI
pourcontinuous integration
en anglais - le code est régulièrement fusionné et testé), - la livraison continue (
CD
pourcontinuous delivery
- les mises à jour du logiciel sont régulièrement libérées pour la production), - l'infrastructure en tant que code (la gestion et la provision des infrastructures informatiques via le code -
IAC
en anglais pourInfrastructures As Code
), - la surveillance et la journalisation (le suivi en temps réel de la performance et des erreurs du logiciel)
- la culture de la rétroaction (l'encouragement à l'amélioration constante via les retours d'information)
Le schéma classique est celui-ci :
Outils DevOps
principaux
1 - Planification et collaboration :
Ces outils permettent de créer des tâches et de gérer un projet. Les plus utilisés sont :
Gitlab
Github
Jira
2 - Gestion du code (développement)
Ces outils permettent d'effectuer un contrôle de version du code. Les plus utilisés sont :
GitHub
GitLab
Bitbucket
3 - Intégration Continue / Déploiement Continu (CI/CD) :
Ces outils surveillent les commits
dans votre dépôt par exemple Github
. Lorsqu'un commit est effectué, ils lancent automatiquement un "pipeline
" d'intégration continue qui peut compiler le code, exécuter des tests unitaires, des tests d'intégration, et d'autres types de tests pour s'assurer que les dernières modifications n'ont pas introduit de bugs.
Si tous les tests passent, ces outils peuvent être configurés pour déployer automatiquement les changements sur un environnement de production, de staging
ou de test
. Cela accélère le processus de livraison de nouvelles fonctionnalités et de corrections de bugs.
Des solutions très connues sont :
Jenkins
GitLab CI/CD
Github actions
AWS CodePipeline
Azure DevOps
CircleCI
Travis CI
4 - Gestion de l'infrastructure :
Ces outils permettent de faire des choses très différentes mais concernent les serveurs et les clusters
.
Nous pouvons citer quelques exemples :
Docker
: pour créer des images et ensuite les exécuter dans des conteneurs sur uncluster
.Docker Hub
(ou tout autreContainer Registry
- il y en a plusieurs dizaines) : plateforme de servicecloud
qui permet aux développeurs de stocker et d'utiliser des images d'applications conteneurisées.Kubernetes
: plateforme qui automatise la déploiement, la mise à l'échelle et la gestion des applications conteneurisées, offrant un cadre pour orchestrer et coordonner des conteneurs au sein d'un environnement decloud
.Terraform
: outil d'Infrastructure as Code (IaC
) open source qui permet aux développeurs de définir et de fournir des infrastructures de centres de données en utilisant un langage de description déclaratif, facilitant ainsi la gestion et l'orchestration des ressourcescloud
.Ansible
: outil d'automatisation open source qui permet la gestion de configuration, le déploiement d'applications et l'orchestration de tâches sur une variété de systèmes et de plateformes (en résumé permet de configurer et de gérer des serveurs plus simplement).
5 - Surveillance et retour d'information :
Ces outils permettent de surveiller (monitoring
) des clusters
ou plus généralement des applications exécutées sur des serveurs.
Voici une liste des outils les plus courants :
Prometheus
: système de surveillance et d'alerte qui collecte et stocke les métriques d'application et de système en temps réel, offrant des fonctionnalités de requête et d'alerte pour aider à la détection et à la résolution des problèmes.Grafana
: plateforme pour la visualisation et l'analyse de données, permettant aux utilisateurs de créer des tableaux de bord interactifs et compréhensibles pour surveiller et analyser en temps réel les données provenant de diverses sources, le plus souvent dePrometheus
.ELK Stack
(Elasticsearch
,Logstash
,Kibana
) : suite d'outils qui fournit des capacités de recherche, d'analyse, de journalisation et de visualisation de données, permettant aux utilisateurs de transformer leurs données en insights précieux.Datadog / Nagios / New Relic / Sentry
: plateformes de surveillance et d'analyse des performances en temps réel pour les infrastructurescloud
, les applications, les journaux et les métriques, facilitant la détection des problèmes et leur résolution.
Introduction à Ansible
Ansible
est un outil d'automatisation IT
open-source écrit en Python
qui permet de gérer la configuration de systèmes, le déploiement d'applications et l'exécution de tâches sur un ensemble de machines de manière automatisée.
Il utilise une approche agentless
, ce qui signifie qu'aucun logiciel supplémentaire ou agent n'est nécessaire sur les machines cibles. Il utilise le protocole SSH
pour la communication.
Ansible
a été créé par Michael DeHaan
en 2012 et compte plus de 5500 contributeurs, ce qui en fait un des projets open source les plus suivis.
Le nom Ansible
a été choisi en référence à un roman de science-fiction qui désigne un moyen de communication plus rapide que la lumière.
Ansible Inc.
qui était la société qui développait commercialement l'application Ansible
a été racheté par Red Hat
en 2015.
Il existe donc aujourd'hui une version communautaire gratuite et le produit commercial Red Hat Ansible Automation Platform Life Cycle
.
Les principes d'Ansible
La philosophie d'Ansible
comporte plusieurs grands principes que nous allons voir ensemble.
Avoir un processus de configuration extrêmement simple avec une courbe d'apprentissage minimale
L'outil est facile à installer et à configurer. Une personne avec peu ou pas d'expérience en automatisation doit pouvoir rapidement comprendre comment utiliser l'outil. L'apprentissage peut donc être très progressif.
Gérer les machines rapidement et en parallèle
L'outil doit être capable d'exécuter des tâches sur plusieurs machines en même temps, réduisant ainsi le temps nécessaire pour l'automatisation.
Eviter des agents personnalisés et des ports ouverts supplémentaires, être agentless
en exploitant l'utilitaire SSH
existant
Pas besoin d'installer de logiciel supplémentaire sur les machines que vous souhaitez automatiser. Utilise SSH
, qui est généralement déjà installé et configuré sur les systèmes UNIX
, pour communiquer avec les machines distantes.
Décrire l'infrastructure dans un langage qui est à la fois adapté aux machines et aux humains
Le langage utilisé pour écrire les scripts
ou les configurations doit être facile à lire et à comprendre, tout en étant interprétable par la machine. C'est pourquoi Ansible
utilise YAML
.
Se concentrer sur la sécurité et la facilité d'auditabilité/examen/réécriture du contenu
L'outil doit être conçu avec la sécurité à l'esprit. Il doit également permettre un audit facile du code et des configurations, de sorte que les revues de code et la conformité aux normes de sécurité puissent être facilement réalisées.
Gérer de nouvelles machines distantes instantanément, sans initialisation de logiciel
L'idée est de pouvoir ajouter de nouvelles machines à votre infrastructure et de commencer à les automatiser immédiatement, sans avoir à installer de logiciel supplémentaire ou à faire des configurations complexes.
Permettre le développement de modules
dans n'importe quel langage dynamique, pas seulement en Python
Bien qu'Ansible soit écrit en Python
, il permet l'intégration de modules écrits dans d'autres langages de programmation. Cela le rend plus extensible et permet aux développeurs d'utiliser les langages avec lesquels ils sont les plus à l'aise.
Être utilisable en tant que non-root
Il devrait être possible d'utiliser l'outil sans privilèges d'administrateur, ce qui réduit les risques de sécurité.
Être le système d'automatisation IT
le plus facile à utiliser, pour toujours
Cela résume en quelque sorte tous les principes ci-dessus. L'objectif est de créer un outil qui est non seulement puissant mais aussi extrêmement facile à utiliser, rendant l'automatisation accessible à autant de personnes que possible.
Ces principes guident le développement et les améliorations de l'outil, assurant qu'il reste utile, efficace et facile à utiliser.
Commence dès aujourd'hui notre formation Ansible !