← Tous les cours
Parcours · DevOps · Débutant → Intermédiaire

Livrez des logiciels comme les vraies équipes le font.

De la ligne de commande à une chaîne CI/CD complète exécutant des conteneurs dans le cloud. Aucune expérience requise — on part de zéro jusqu’à un travail que vous pouvez mettre sur un CV.

Commencer Voir les ateliers
Niveau
Débutant → Intermédiaire
Leçons
24 notes
Ateliers
8 pratiques
Rythme
À votre rythme
Prix
Lecture gratuite
Votre progression0%
Le programme

Lire, pratiquer, valider, avancer.

Ouvrez une leçon, lisez les notes, puis validez-la. Votre progression est enregistrée sur cet appareil.

Niveau 1 · Débutant

Les bases : la boîte à outils commune à tous les ingénieurs

Avant les chaînes et les clusters, il faut le rez-de-chaussée : le terminal, Git et votre premier conteneur. Tout le reste repose là-dessus.

01

Le terminal du développeur

Bases
›Ce qu’est vraiment le DevOps✓

Le DevOps n’est pas un outil ni un titre qu’on achète avec un certificat. C’est une façon de travailler où ceux qui écrivent le logiciel et ceux qui le font tourner cessent de se renvoyer la balle et en deviennent responsables ensemble, de bout en bout.

Dev + OpsPlanifierCoderBuildTesterLivrerDéployerExploiterSuperviserune équipe, de bout en bout, en continu
DevOps : construire, livrer, exploiter en boucle

L’ancienne façon : les développeurs écrivaient le code, l’empaquetaient et le passaient à une équipe d’exploitation qui tentait de le faire tourner en production. Quand ça cassait à 2 h du matin, chacun accusait l’autre. Le DevOps fait tomber ce mur. La même équipe construit, teste automatiquement, livre automatiquement et surveille en production.

Trois idées portent tout le domaine :

  • Automatiser tout ce qui se répète — compiler, tester, déployer.
  • Faire de petits changements souvent — dix petites livraisons sûres valent mieux qu’une énorme terrifiante.
  • Mesurer ce qui se passe — on ne corrige pas ce qu’on ne voit pas.
Chez nous : une fintech de Douala qui déploie une fois par trimestre vit dans la peur de chaque livraison. La même équipe en flux DevOps livre un correctif l’après-midi même où le bug est trouvé. Pour une petite équipe africaine face à de plus gros, la vitesse et la fiabilité sont l’avantage — pas besoin d’un service d’exploitation de 50 personnes, mais d’une bonne automatisation.
›Vivre dans la ligne de commande (bases Linux)✓

Les serveurs n’ont pas de souris. Presque tous les serveurs du monde tournent sous Linux, et on leur parle en tapant. Le terminal intimide une semaine, puis devient l’outil le plus rapide que vous possédez.

Les commandes que vous utiliserez chaque jour :

  • pwd — où suis-je ? (répertoire courant)
  • ls -la — tout lister ici, y compris les fichiers cachés
  • cd projets — entrer dans un dossier ; cd .. remonte
  • cat fichier.txt — afficher un fichier ; less fichier.txt pour faire défiler
  • mkdir, cp, mv, rm — créer, copier, déplacer, supprimer
  • grep "erreur" app.log — chercher dans les fichiers
Exemple : trouver chaque ligne contenant le mot failed dans le journal du jour et les compter : grep failed app.log | wc -l. Le | (pipe) envoie la sortie d’une commande dans la suivante — ce chaînage est au cœur de la philosophie Unix.
Chez nous : vous pouvez tout cela gratuitement sur votre portable avec WSL sous Windows, ou sur un VPS bon marché. Pas besoin de matériel coûteux — un serveur à 4 $/mois vous apprend plus que n’importe quelle vidéo.
›Fichiers, permissions et paquets✓

Deux choses bloquent tout débutant sous Linux : les permissions et l’installation de logiciels.

Permissions

Chaque fichier a un propriétaire et des permissions : lecture (r), écriture (w), exécution (x). Quand un script « ne s’exécute pas », il lui manque souvent juste la permission : chmod +x deploy.sh le rend exécutable. Quand vous voyez Permission denied, soit il faut sudo (exécuter en administrateur), soit vous touchez un fichier qui ne vous appartient pas.

Paquets

On ne télécharge pas d’installateurs sous Linux — on utilise un gestionnaire de paquets. Sous Ubuntu/Debian, c’est apt :

  • sudo apt update — rafraîchir le catalogue
  • sudo apt install git — installer un logiciel
Exemple : préparer un serveur neuf en trois lignes : sudo apt update && sudo apt install -y git curl docker.io. Le -y répond « oui » aux invites pour que ça tourne sans surveillance.
02

Gestion de versions avec Git

Compétence clé
›Pourquoi Git, et le rythme en trois temps✓

Git est la machine à remonter le temps de votre code. Il enregistre chaque changement pour revenir en arrière, voir qui a changé quoi et quand, et laisser plusieurs personnes travailler sur le même projet sans s’écraser.

Répertoirevos éditsaddIndexchoisiscommitCommitpushGitHub
Git : add → commit → push

Travailler sans Git — final.js, final_v2.js, final_VRAI_final.js — est un cauchemar dont vous ne reviendrez jamais.

Le rythme quotidien, en trois temps :

  • git add . — préparer vos changements (choisir ce qui entre)
  • git commit -m "Ajout du formulaire de connexion" — enregistrer un instantané avec un message
  • git push — l’envoyer au serveur partagé (GitHub)
Exemple : commencer à suivre n’importe quel dossier : git init, puis git add ., puis git commit -m "Première version". Vous avez désormais un historique complet où vous pourrez toujours revenir.
Chez nous : Git fonctionne entièrement hors ligne — committez toute la journée sur une connexion lente ou coupée, puis poussez une fois quand le réseau est bon. Pour qui travaille avec internet instable, c’est un cadeau.
›Les branches : travailler sans peur✓

Une branche est une copie parallèle de votre projet où tester sans toucher la version qui marche. C’est ce qui permet aux équipes d’avancer vite sans tout casser.

mainbranche fonctionnalitéfusion
Brancher, travailler, fusionner

Le modèle : main est toujours le code stable, qui marche. Pour ajouter une fonctionnalité, on part d’une branche, on travaille, puis on fusionne quand c’est prêt.

  • git checkout -b feature/paiements — créer et basculer sur une nouvelle branche
  • travailler, add, commit normalement
  • git checkout main puis git merge feature/paiements — la ramener
Exemple : vous êtes au milieu d’un changement risqué quand un client signale un bug en production. Aucun souci — votre travail risqué est sur sa propre branche. Basculez sur main, corrigez le bug, livrez, puis revenez continuer. Rien n’est entré en collision.
›GitHub et les pull requests✓

GitHub est l’endroit où votre historique Git vit en ligne pour qu’une équipe le partage. Il ajoute une idée très importante par-dessus Git : la pull request (PR).

Une pull request dit : « voici ma branche, relisez-la avant qu’elle n’entre dans main ». Un coéquipier lit les changements, commente, approuve. Cette relecture est là où naissent la qualité et le partage de connaissances — et, plus tard, où les tests automatiques tournent avant toute fusion.

Exemple : vous poussez feature/paiements et ouvrez une PR « Ajout du paiement MTN MoMo ». Un relecteur voit que vous avez oublié de gérer un paiement échoué, vous corrigez dans la même branche, la PR se met à jour, il approuve, vous fusionnez. Le bug n’a jamais atteint un client.
Chez nous : un profil GitHub public rempli de vraies PR est le meilleur CV d’un jeune développeur africain. Les employeurs à l’étranger ne voient pas votre diplôme, mais ils voient votre code. C’est ainsi qu’on est embauché à distance depuis Yaoundé ou Buea.
03

Conteneurs avec Docker

Révolution
›Ce qu’est un conteneur (et pourquoi ça a tout changé)✓

« Ça marche sur ma machine » est la plus vieille excuse du logiciel. Docker l’a tuée.

Machines virtuellesConteneursAppOS invitélourd, GoAppOS invitélourd, GoOS hôte partagéAppléger, MoAppléger, MoAppléger, Mo
Conteneur vs machine virtuelle

Un conteneur empaquette votre application avec tout ce dont elle a besoin — le code, l’environnement d’exécution, les bibliothèques, les réglages — dans une boîte scellée qui tourne à l’identique sur votre portable, celui d’un collègue, et un serveur en centre de données.

On confond conteneurs et machines virtuelles. Une VM embarque tout un système d’exploitation (lourd, lent à démarrer, des gigaoctets). Un conteneur partage le noyau de l’hôte et n’embarque que votre appli (léger, démarre en une seconde, des mégaoctets). On fait tourner des dizaines de conteneurs là où l’on mettait deux ou trois VM.

Chez nous : les conteneurs font que l’appli d’un développeur camerounais se comporte exactement pareil sur un portable à Limbe et sur un serveur en Europe. Fini le « mais ça marchait ici » au déploiement. Cette fiabilité vaut une fortune pour une petite équipe.
›Images, Dockerfile, build et run✓

Deux mots à ne pas confondre : une image est la recette (un plan enregistré) ; un conteneur est une instance en cours d’exécution de cette image. On construit une image une fois et on lance plusieurs conteneurs à partir d’elle.

On décrit l’image dans un Dockerfile — une simple liste d’étapes :

  • FROM node:20 — partir d’une image officielle Node.js
  • COPY . /app — copier votre code
  • RUN npm install — installer les dépendances
  • CMD ["node","server.js"] — comment la démarrer
Exemple : construire et lancer en deux commandes : docker build -t monappli . puis docker run -p 3000:80 monappli. Le -p 3000:80 relie le port 3000 de votre portable au port 80 du conteneur — ouvrez le navigateur, votre appli est en ligne.
›Docker Compose : plusieurs services à la fois✓

Les vraies applications ne sont pas un seul conteneur. Une appli web typique, c’est un frontend, une API backend et une base de données — trois conteneurs qui doivent se parler. Les démarrer et les relier à la main est pénible.

Docker Compose permet de décrire toute la pile dans un fichier docker-compose.yml et de tout lancer d’une commande : docker compose up.

Exemple : votre docker-compose.yml liste un service web, un service api et un service db (PostgreSQL). Un seul docker compose up démarre les trois, les met sur le même réseau privé, et votre API atteint la base juste par le nom db. Un nouveau coéquipier clone le dépôt et a tout le système en marche en 30 secondes.
04

Votre premier déploiement

Mettre en ligne
›Ce que signifie CI/CD✓

Deux sigles que vous entendrez sans cesse. CI (intégration continue) : à chaque envoi de code, il est automatiquement construit et testé, donc le code cassé est attrapé en minutes, pas en semaines. CD (livraison/déploiement continu) : une fois les tests passés, le code est automatiquement envoyé sur un serveur.

PushBuildTestDéployertest échoué → arrêt, rien de cassé ne part
Une chaîne CI/CD

Ensemble, ils forment une chaîne (pipeline) : push → build → test → déploiement, sans intervention manuelle. Les humains se trompent en déployant à la main à minuit ; une chaîne refait les mêmes étapes sûres chaque fois.

Chez nous : une chaîne est le grand égalisateur. Une start-up de deux personnes à Bamenda avec une bonne chaîne déploie plus sûrement qu’une grande entreprise négligée. C’est gratuit (GitHub Actions offre des minutes gratuites généreuses) et c’est la compétence DevOps la plus valorisée sur un CV.
›Déployer sur un vrai serveur✓

Mettons quelque chose sur internet. Le déploiement réel le plus simple : un serveur Linux bon marché (un VPS) exécutant votre conteneur.

Les étapes, que vous automatiserez ensuite :

  • Louer un VPS (DigitalOcean, Hetzner, Contabo — à partir de quelques dollars par mois)
  • Se connecter avec ssh user@ip-du-serveur
  • Installer Docker, copier votre image, la lancer avec docker run
  • Faire pointer un nom de domaine vers l’IP du serveur
Exemple : déployer un conteneur et le garder en marche même après déconnexion : docker run -d --restart unless-stopped -p 80:3000 monappli. Le -d le lance en arrière-plan ; --restart unless-stopped le relance automatiquement si le serveur redémarre.
›Environnements et secrets✓

Votre appli a besoin de réglages qui diffèrent entre votre portable et la production : mots de passe de base, clés d’API, quelle URL appeler. Deux règles vous gardent en sécurité.

Ne codez jamais de secrets en dur dans le code. Un mot de passe commité dans Git est un mot de passe fuité pour toujours — des gens scrutent GitHub pour exactement ça. Gardez les secrets dans des variables d’environnement, chargées à l’exécution.

Séparez les environnements. Vous voulez un développement, peut-être une copie staging pour tester, et production pour les vrais utilisateurs — chacun avec sa config, pour qu’un test ne touche jamais de vraies données client.

Exemple : passer un secret à l’exécution plutôt que de l’intégrer : docker run -e DB_PASSWORD="$DB_PASSWORD" monappli. La valeur vient de l’environnement du serveur, jamais du code — votre historique Git reste propre.
Niveau 2 · Intermédiaire

Ingénierie : chaînes, clusters et infrastructure en code

Maintenant on industrialise. Vous automatiserez tout le flux de livraison, orchestrerez des conteneurs à grande échelle, définirez des serveurs en code et surveillerez le tout en production.

05

Chaînes CI/CD avec GitHub Actions

Automatisation
›Votre première chaîne✓

GitHub Actions exécute votre chaîne gratuitement, là où votre code vit déjà. Vous la décrivez dans un fichier YAML sous .github/workflows/ et elle se déclenche sur des événements — le plus souvent « à chaque push ».

PushBuildTestDéployertest échoué → arrêt, rien de cassé ne part
Une chaîne CI/CD

Un workflow est fait de jobs, et chaque job est une liste d’étapes. Une étape exécute une commande ou utilise une action prête à l’emploi.

Exemple : un workflow minimal qui récupère votre code et lance les tests à chaque push :
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm install && npm test
›Étapes build, test, déploiement✓

Une vraie chaîne a des étapes qui s’exécutent dans l’ordre, et une étape ultérieure ne tourne que si la précédente a réussi. C’est votre filet de sécurité.

  • Build — compiler le code, construire l’image Docker
  • Test — lancer les tests automatiques ; si l’un échoue, on s’arrête et on alerte
  • Déploiement — atteint seulement sur la branche main, seulement si les tests passent

On fait attendre les jobs les uns les autres avec needs:, donc deploy a needs: [build, test]. Le code cassé ne peut physiquement pas atteindre la production, car l’étape de déploiement ne s’exécute jamais.

Chez nous : c’est la discipline qui laisse dormir une équipe africaine réduite. La machine applique la règle « ne jamais livrer de code non testé » bien mieux qu’un humain fatigué un vendredi soir.
›Artefacts, cache et secrets✓

Trois choses rendent les chaînes rapides et sûres.

Le cache : télécharger les dépendances à chaque exécution gaspille des minutes. Mettez-les en cache pour que les exécutions répétées soient rapides — une vraie économie sur des minutes gratuites limitées.

Les artefacts : le résultat d’un build (une appli compilée, une image) peut être sauvegardé et passé au job suivant au lieu d’être reconstruit.

Les secrets : votre déploiement a besoin d’une clé de serveur ou d’un mot de passe de registre. Stockez-les dans les Secrets chiffrés de GitHub, jamais dans le YAML. Référencez-les via ${{ secrets.SSH_KEY }} — ils sont masqués dans les journaux pour ne jamais fuiter.

06

Orchestration avec Kubernetes

Échelle
›Pourquoi l’orchestration existe✓

Un conteneur sur un serveur, c’est facile. Mais que se passe-t-il quand ce serveur meurt à 3 h du matin ? Ou quand le trafic triple pendant une campagne et qu’un conteneur ne suffit plus ? Ou qu’il faut mettre à jour sans coupure ?

État désiré : 3 répliquesPod 1Pod 2plantePod 3K8s le relance automatiquement
Auto-réparation Kubernetes

Kubernetes (K8s) est le système qui gère pour vous les conteneurs sur plusieurs serveurs. Vous lui dites l’état désiré — « je veux 3 copies de mon appli en permanence » — et il le rend vrai et le maintient. Un conteneur plante ? Il en démarre un neuf. Un serveur meurt ? Il déplace le travail ailleurs. On appelle ça l’auto-réparation.

Chez nous : Kubernetes a une vraie courbe d’apprentissage, et tous les projets n’en ont pas besoin — un petit site vit bien sur un seul VPS avec Docker. Mais c’est la compétence DevOps la plus demandée au monde, et les employeurs à distance la paient bien. L’apprendre ouvre le marché international d’où que vous soyez.
›Pods, déploiements et services✓

Trois objets de base font tourner presque tout dans Kubernetes.

État désiré : 3 répliquesPod 1Pod 2plantePod 3K8s le relance automatiquement
Auto-réparation Kubernetes
  • Un Pod est la plus petite unité — généralement un conteneur en cours d’exécution.
  • Un Deployment gère les Pods : il maintient le nombre demandé et gère les mises à jour progressives.
  • Un Service donne à vos Pods une adresse stable, car les Pods vont et viennent. Il répartit aussi le trafic entre eux.
Exemple : vous déclarez un Deployment avec replicas: 3. Kubernetes lance trois Pods. Vous poussez une nouvelle version ; Kubernetes les remplace un par un (une mise à jour progressive) pour que les utilisateurs ne voient jamais de coupure. Supprimez un Pod à la main et regardez un remplaçant apparaître en quelques secondes — c’est le moteur d’état désiré à l’œuvre.
›Config, secrets et sondes de santé✓

Pour tourner en production en sécurité, Kubernetes a besoin de trois choses de plus.

Les ConfigMaps contiennent les réglages non secrets (quelle API appeler, drapeaux de fonctionnalité). Les Secrets contiennent les valeurs sensibles (mots de passe, clés), séparées de vos images.

Les sondes de santé (probes) indiquent à Kubernetes si un Pod est réellement sain. Une sonde de vivacité demande « es-tu en vie ? » — sinon, redémarre-le. Une sonde de disponibilité demande « es-tu prêt à recevoir du trafic ? » — sinon, retiens le trafic jusqu’à ce qu’il le soit. Sans elles, Kubernetes enverrait des utilisateurs vers un Pod encore en démarrage ou silencieusement bloqué.

07

Infrastructure en code avec Terraform

Reproductible
›Pourquoi définir l’infrastructure en code✓

Cliquer dans une console cloud pour créer serveurs, réseaux et bases marche une fois — et devient un désastre à reproduire, documenter ou restaurer. L’infrastructure en code (IaC) consiste à écrire votre infrastructure dans des fichiers texte, à la versionner dans Git et à laisser un outil la construire.

Code (fichiers)main.tfplan/applyTerraformServeursRéseau, BDversionnez dans Git → reconstruire en 1 commande
Infrastructure en code

Terraform est l’outil IaC le plus populaire. Vous décrivez ce que vous voulez (des ressources) ; Terraform trouve comment les créer, les modifier ou les détruire pour correspondre.

Chez nous : si tout un environnement tient dans quelques fichiers texte, reconstruire après un sinistre est une commande, pas une semaine à se rappeler ce qu’on a cliqué. Et vous pouvez monter une copie staging identique pour tester sans risque — énorme pour une petite équipe sans marge d’erreur en production.
›Fournisseurs, ressources et état✓

Trois concepts font tourner Terraform.

  • Un fournisseur (provider) est le plugin d’une plateforme donnée (AWS, GCP, Azure, DigitalOcean).
  • Une ressource est une chose que vous voulez voir exister — un serveur, une base, un enregistrement DNS.
  • Le fichier d’état (state) est la mémoire de Terraform de ce qu’il a déjà construit, pour distinguer « créer » de « modifier l’existant ».
Exemple : quelques lignes déclarent un serveur : resource "digitalocean_droplet" "web" { name = "web-1"; size = "s-1vcpu-1gb"; region = "fra1" }. Terraform lit ceci et crée exactement ce serveur. Changez size et réappliquez : il redimensionne l’existant — il n’en crée pas un second.
›Plan, apply et modules✓

Le flux Terraform est volontairement sûr.

  • terraform plan — montre exactement ce qui va changer avant que rien n’arrive. Lisez toujours ceci.
  • terraform apply — applique les changements.
  • terraform destroy — démonte tout proprement (idéal pour les environnements de test temporaires, et pour ne pas payer des serveurs inactifs).

Les modules permettent d’empaqueter un morceau d’infrastructure réutilisable (par exemple « un serveur web standard + pare-feu ») et de l’utiliser plusieurs fois avec des entrées différentes — le même principe « ne pas se répéter » que les fonctions en programmation.

08

Supervision et projet final

Tout voir
›Métriques, journaux et signaux d’or✓

Une fois votre appli en ligne, vous volez à l’aveugle sans la surveiller. Deux types de données comptent : les métriques (des nombres dans le temps — CPU, mémoire, débit de requêtes) et les journaux (le relevé texte détaillé de ce qui s’est passé).

LatenceTraficErreursSaturationsurveillez ces quatre sur tout service
Les quatre signaux d’or

Prometheus collecte les métriques ; Grafana les transforme en tableaux de bord lisibles. Les quatre signaux d’or à surveiller sur tout service :

  • Latence — les réponses sont-elles lentes ?
  • Trafic — quelle demande ?
  • Erreurs — combien de requêtes échouent ?
  • Saturation — vos ressources sont-elles pleines ?
›Des alertes sans le bruit✓

Un tableau de bord que personne ne regarde ne sert à rien à 3 h du matin. L’alerte envoie un message (e-mail, SMS, Slack) quand quelque chose franchit un seuil — « erreurs au-dessus de 5 % pendant 5 minutes ».

L’art est d’alerter sur les symptômes ressentis par les utilisateurs, pas sur chaque soubresaut. Alertez sur « le site renvoie des erreurs », pas sur « le CPU a atteint 80 % pendant 10 secondes ». Trop de fausses alertes et l’équipe apprend à les ignorer — l’échec le plus dangereux, appelé fatigue d’alerte.

Chez nous : une alerte simple et bien réglée qui vous envoie un SMS quand le site est réellement en panne vaut mieux qu’un mur de beaux graphiques. Commencez petit : savoir en premier et vite quand quelque chose casse vraiment.
›Projet final : la chaîne complète✓

C’est ici que tout se relie. Votre projet final réunit tout le cours en un vrai système :

PushBuildTestDéployertest échoué → arrêt, rien de cassé ne part
Une chaîne CI/CD
  • Le code vit dans Git, relu via des pull requests
  • Une chaîne GitHub Actions construit, teste et livre à chaque fusion sur main
  • L’appli tourne en conteneur Docker, orchestrée par Kubernetes
  • L’infrastructure est définie en Terraform
  • Prometheus et Grafana la surveillent, avec une vraie alerte branchée

Quand vous pouvez montrer cela à un employeur — « j’ai construit ça, voici le dépôt, voici le tableau de bord en direct » — vous n’apprenez plus le DevOps. Vous le faites.

Là où vous construisez vraiment

Huit ateliers qui construisent une vraie chaîne

La lecture est libre et gratuite. Les ateliers, eux, demandent un compte gratuit, qui garde votre progression et vous donne un certificat.

Créez un compte Kaevor gratuit pour lancer un atelier et obtenir votre certificat. Un seul compte pour tous vos cours.

Créer un compte gratuit
🔒

Atelier 1 — Maîtriser le terminal

Naviguer dans un système de fichiers Linux, chaîner des commandes avec des pipes et écrire votre premier script bash.

Linux · Bash
🔒

Atelier 2 — Votre premier dépôt et PR

Initialiser un dépôt, créer une branche, committer, pousser sur GitHub et ouvrir une pull request.

Git · GitHub
🔒

Atelier 3 — Conteneuriser une appli

Écrire un Dockerfile, construire une image et lancer votre appli en conteneur.

Docker
🔒

Atelier 4 — Une pile Compose

Lancer une appli web, une API et une base ensemble avec un seul docker-compose.yml.

Docker Compose
🔒

Atelier 5 — Construire une chaîne

Écrire un workflow GitHub Actions qui build et teste à chaque push.

GitHub Actions
🔒

Atelier 6 — Déployer sur un serveur

Livrer votre conteneur sur un vrai VPS et y faire pointer un domaine.

SSH · VPS
🔒

Atelier 7 — Terraformer un serveur

Définir un serveur cloud en code et le monter avec plan et apply.

Terraform
🔒

Atelier 8 — Le voir en direct

Monter Prometheus et Grafana et bâtir un tableau de bord avec une vraie alerte.

Prometheus · Grafana
Où cela vous mène

Deux niveaux, un seul parcours

Niveau 1

Débutant

Terminal, Git, Docker et votre premier déploiement en ligne. La boîte à outils commune à tous les ingénieurs.

Niveau 2

Intermédiaire

CI/CD, Kubernetes, Terraform et supervision — la chaîne de livraison professionnelle complète.