<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Engineering Archives | Clever Cloud</title>
	<atom:link href="https://www.clever.cloud/fr/blog/category/engineering-fr/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.clever.cloud/fr/blog/category/engineering-fr/</link>
	<description>From Code to Product</description>
	<lastBuildDate>Wed, 15 Jul 2026 14:46:38 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://cdn.clever-cloud.com/uploads/2023/03/cropped-cropped-favicon-32x32.png</url>
	<title>Engineering Archives | Clever Cloud</title>
	<link>https://www.clever.cloud/fr/blog/category/engineering-fr/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Magnetar : un client Apache Pulsar en Rust conçu pour la simulation déterministe</title>
		<link>https://www.clever.cloud/fr/blog/engineering-fr/2026/07/15/magnetar-client-apache-pulsar-rust-simulation-deterministe/</link>
		
		<dc:creator><![CDATA[Florentin Dubois]]></dc:creator>
		<pubDate>Wed, 15 Jul 2026 14:46:37 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Rust]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=24982</guid>

					<description><![CDATA[<p><img width="2400" height="1065" src="https://cdn.clever-cloud.com/uploads/2026/07/2026-07-15-clever-cloud-banniere-blog-magnetar-fr.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026.07.15 Clever Cloud Bannière Blog Magnetar FR" decoding="async" fetchpriority="high" srcset="https://cdn.clever-cloud.com/uploads/2026/07/2026-07-15-clever-cloud-banniere-blog-magnetar-fr.png 2400w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-15-clever-cloud-banniere-blog-magnetar-fr-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-15-clever-cloud-banniere-blog-magnetar-fr-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-15-clever-cloud-banniere-blog-magnetar-fr-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-15-clever-cloud-banniere-blog-magnetar-fr-1536x682.png 1536w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-15-clever-cloud-banniere-blog-magnetar-fr-2048x909.png 2048w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-15-clever-cloud-banniere-blog-magnetar-fr-1368x607.png 1368w" sizes="(max-width: 2400px) 100vw, 2400px" /></p><!-- wp:paragraph -->
<p><a href="https://apple.github.io/foundationdb/testing.html">FoundationDB</a> a rendu cette idée célèbre. Au lieu de s'appuyer seulement sur des tests unitaires et des tests end-to-end sur un vrai cluster, le projet exécute des workloads distribués dans un monde simulé, où le temps, les fautes réseau, les pannes de processus et les décisions d'ordonnancement peuvent être explorés puis rejoués à partir d'une seed. <a href="https://github.com/tigerbeetle/tigerbeetle/blob/main/docs/TIGER_STYLE.md">TigerBeetle</a> pousse une discipline complémentaire : rendre les invariants explicites dans le code, vérifier en continu la forme de l'état et transformer une corruption silencieuse en panne locale et bruyante.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Chez Clever Cloud, nous appliquons cette direction à des logiciels d'infrastructure en Rust. <a href="https://github.com/PierreZ/moonpool">Moonpool</a>, développé par Pierre Zemb, donne aux systèmes Rust un environnement de simulation déterministe où le temps, le réseau, les tâches, l'aléa et le stockage peuvent être virtualisés derrière des traits de providers. <a href="https://github.com/CleverCloud/magnetar">Magnetar</a> est l'application de cette approche à un client <a href="https://pulsar.apache.org/">Apache Pulsar</a>. C’est d’ailleurs, l’approche que nous prenons au sein de notre reverse proxy <a href="https://www.clever.cloud/fr/blog/entreprise/2026/07/01/sozu-2-1-0-load-balancing-udp-edge-programmable/">Sōzu</a>.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Magnetar est un driver Apache Pulsar écrit en Rust, depuis zéro. Il repose sur un coeur protocolaire sans-io, un moteur de production Tokio et un moteur Moonpool pour la simulation déterministe. Cette première release publique s'adresse aux ingénieurs qui veulent essayer Magnetar, évaluer son architecture, comparer son comportement avec les clients Pulsar existants et contribuer à structurer un écosystème Pulsar Rust plus solide.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>L'objectif n'est pas seulement d'exposer une API Rust autour de Pulsar. L'objectif est de construire un client dont les comportements difficiles peuvent être inspectés, rejoués et forcés à échouer avant que la production ne s'en charge.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Un client Pulsar fait partie du système distribué</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>On pourrait être tenté de considérer une bibliothèque cliente comme la partie simple d'un système distribué. Le broker porterait la réplication, le stockage, l'ownership et la coordination. Le client se contenterait de se connecter, d'envoyer des messages, d'en recevoir et de les acquitter.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette vision ne tient pas face à un vrai client Apache Pulsar.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Un client Pulsar sérieux doit gérer les producers, consumers, readers, topics partitionnés, consumers multi-topics, subscriptions par pattern, transactions, schémas, authentification, routage proxy, lookup broker, failover de cluster, reconnect, backoff, batching, chunking, ack grouping, suivi des messages non acquittés, negative acknowledgements, retry-letter et dead-letter flows, observabilité et une longue liste de Pulsar Improvement Proposals.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les bugs difficiles ne viennent pas seulement d'une commande mal encodée. Ils viennent souvent du temps et de l'ordre. Un broker tombe pendant qu'un publish est en vol. Une reconnexion arrive alors qu'un consumer a des acknowledgements en attente. Un refresh de token se produit pendant un reset de session. Un lookup via proxy pointe vers un nouveau broker alors que l'ancienne connexion se vide encore. Un topic migre et le client doit reconstruire assez d'état pour continuer sans prétendre que l'ancienne session existe toujours.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cela signifie qu'un client Pulsar n'est pas seulement un wrapper pratique autour d'une socket. Il fait partie du système distribué. Il possède un état qui doit rester cohérent pendant que le monde autour de lui change.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Si cet état est caché dans des tâches runtime, des files de channels, des horloges implicites et des accidents de timing, alors le client devient plus difficile à raisonner précisément au moment où cette précision compte le plus. Magnetar part de l'hypothèse inverse : rendre l'état protocolaire explicite, le piloter à travers des frontières étroites et garder l'I/O à l'extérieur.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">De l'écosystème Pulsar Rust à Magnetar</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Magnetar vient d'une expérience concrète avec l'écosystème Pulsar Rust, notamment la maintenance et l'usage de <a href="https://github.com/streamnative/pulsar-rs">pulsar-rs</a>. Ce travail compte. Il a donné aux utilisateurs Rust un client Apache Pulsar et a créé le contexte pratique dans lequel l'étape suivante pouvait être évaluée.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Magnetar n'est pas une critique de ce qui existait avant lui. C'est une continuation du même écosystème, avec un point de départ architectural différent. Après avoir travaillé sur des usages Pulsar réels, la direction est devenue plus claire : un driver Pulsar Rust doit rendre la frontière protocole/runtime plus nette, rendre les comportements difficiles reproductibles, suivre la parité explicitement et faire de la testabilité une contrainte de conception.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est pourquoi Magnetar ne commence pas par le builder public. Il commence par le protocole.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>L'API utilisateur compte, et cette première release expose déjà une surface large. Mais pour un client distribué, la question plus profonde est ce qui se passe sous cette API lorsque le broker bouge, que la connexion tombe, que l'horloge avance, qu'un timeout se déclenche, qu'une subscription est reconstruite ou que la même trace est rejouée sous un autre runtime.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Le coeur sans-io</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le coeur de Magnetar est <a href="https://github.com/CleverCloud/magnetar/tree/main/crates/magnetar-proto">magnetar-proto</a>. C'est une machine d'état protocolaire synchrone. Elle n'a pas de socket. Elle ne dépend pas de Tokio. Elle ne lance pas de tâches. Elle n'utilise pas async. Elle ne lit pas l'horloge hôte sur le chemin chaud du protocole.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Sa forme suit la même idée générale qui a rendu <a href="https://github.com/quinn-rs/quinn/tree/main/quinn-proto">quinn-proto</a> influent dans le monde réseau Rust : injecter des octets, récupérer des octets à transmettre, récupérer des événements sémantiques et demander à la machine d'état quand son prochain timer expire.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Conceptuellement, l'interface ressemble à ceci :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div
  style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  "
>
  <pre
    style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "
  ><code>&gt; connection.handle_bytes(now, bytes);

connection.poll_transmit(&amp;mut out);
connection.poll_event();
connection.poll_timeout();</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Cette petite forme est un grand choix d'architecture.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>handle_bytes permet à un moteur d'injecter les octets du wire dans la machine d'état. poll_transmit draine les frames sortantes. poll_event produit les événements sémantiques auxquels le runtime doit réagir : challenges d'authentification, résultats de lookup, checksum mismatch, signaux de reconnexion ou transitions protocolaire. poll_timeout permet au runtime de savoir quand réveiller la machine d'état.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La machine d'état ne décide pas d'où viennent les octets. Elle ne sait pas si le réseau est un vrai stream TCP, un stream TLS, un pipe d'octets dans un simulateur ou un broker scripté dans un harnais différentiel. Elle ne décide pas non plus ce que "maintenant" veut dire. Le moteur lui passe le temps.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les traits publics de magnetar-proto suivent la même règle. Ce ne sont pas des services runtime cachés derrière des callbacks async. Ce sont de petits contrats protocolaires, placés aux endroits où la machine d'état a besoin d'une décision ou d'une transformation : <a href="https://github.com/CleverCloud/magnetar/blob/main/crates/magnetar-proto/src/auth.rs">AuthProvider</a> produit les octets d'authentification, <a href="https://github.com/CleverCloud/magnetar/blob/main/crates/magnetar-proto/src/schema/mod.rs">Schema</a> définit l'encodage, le décodage, les données de schéma et les hooks de schéma résolu par le broker, <a href="https://github.com/CleverCloud/magnetar/blob/main/crates/magnetar-proto/src/crypto.rs">MessageEncryptor et MessageDecryptor</a> décrivent la crypto de payload sur des octets et de la metadata de message, <a href="https://github.com/CleverCloud/magnetar/blob/main/crates/magnetar-proto/src/service_url.rs">ServiceUrlProvider</a> expose l'URL de service courante pour le failover, et <a href="https://github.com/CleverCloud/magnetar/blob/main/crates/magnetar-proto/src/health_probe.rs">HealthProbe</a> utilise un contrat de type poll au lieu d'attacher le crate protocolaire à un runtime async. Le motif est volontaire : le coeur protocolaire peut demander des faits, des octets ou un état de readiness, tandis que l'I/O, le cache, le refresh, les probes réseau et le scheduler restent à l'extérieur.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette séparation n'est pas seulement une affaire de propreté. C'est ce qui rend le protocole testable sans broker, sans socket et sans runtime async. Un bug protocolaire peut être réduit à une fixture : injecter ces octets à cet instant, récupérer ces sorties, vérifier cet event stream et rejouer la même séquence.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour un client Apache Pulsar, cela compte parce que le protocole wire ne se limite pas au chemin heureux. Il comprend la création de producers, la subscription de consumers, les acks, nacks, transactions, erreurs broker, redirects, challenges d'authentification, migrations de topics, markers de replicated subscriptions, metadata de schémas, batching, chunking et chemins de fermeture. Chacun de ces éléments porte de l'état. Chaque transition d'état est plus facile à raisonner lorsqu'elle n'est pas mélangée aux lectures de socket, au scheduling de tâches et aux wakeups spécifiques d'un runtime.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">L'interdiction des channels comme contrainte d'architecture</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Magnetar fait aussi un choix Rust async peu courant : les primitives de channels sont interdites dans le workspace.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>L'architecture directe d'un client réseau ressemble souvent à ceci : future producer vers channel, channel vers driver task, driver task vers channel, channel vers future consumer. Cela peut fonctionner, mais cela disperse l'état entre des files et des tâches. La backpressure devient implicite. Les sémantiques de fermeture dépendent de la bibliothèque de channel. Des futures abandonnées peuvent laisser des messages dans des endroits difficiles à inspecter. La question de debug devient : où est passé ce message ?</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Magnetar utilise un autre motif. L'état vit dans la machine d'état protocolaire et dans la connexion partagée détenue par le runtime. Les futures utilisateur enregistrent des wakers dans des slabs indexés par identifiants d'opération. Le driver possède la boucle d'I/O, injecte les octets dans la machine d'état, draine les frames sortantes et réveille les futures correspondantes lorsque les outcomes arrivent.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ce n'est pas une interdiction esthétique des channels. C'est une manière de garder la propriété de l'état explicite. Lorsque le driver reconstruit des producers après une reconnexion, lorsqu'un consumer attend un message, lorsqu'un ack outcome est livré ou lorsqu'une opération en attente échoue parce qu'une session a disparu, l'état pertinent est dans la machine d'état et peut y être inspecté.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ce design a des compromis. Il met plus de pression sur la correction de la machine d'état. Il impose un ordre de locks précis. Il demande aux reviewers de comprendre l'enregistrement des wakers et les chemins de réveil. Mais il rend aussi le comportement beaucoup plus facile à simuler, rejouer et comparer entre runtimes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Deux moteurs, une machine d'état</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Magnetar livre deux moteurs qui pilotent le même coeur protocolaire.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le moteur par défaut est <a href="https://github.com/CleverCloud/magnetar/tree/main/crates/magnetar-runtime-tokio">magnetar-runtime-tokio</a>. C'est le chemin d'exécution de production : TCP, TLS via tokio-rustls, tâches driver, temps réel, vraies sockets et surface publique PulsarClient que la plupart des utilisateurs rencontreront en premier.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le second moteur est <a href="https://github.com/CleverCloud/magnetar/tree/main/crates/magnetar-runtime-moonpool">magnetar-runtime-moonpool</a>. Il pilote la même machine d'état magnetar-proto::Connection à travers des providers Moonpool. Au lieu d'inscrire le runtime en dur, Moonpool expose des traits de providers pour le réseau, le temps, le spawning de tâches, l'aléa et le stockage. Avec un bundle de providers proche de la production, le moteur peut exécuter de vraies I/O. Avec des providers de simulation, ces mêmes catégories peuvent être virtualisées.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est là que la simulation déterministe devient pratique. Le client peut être piloté dans un monde où le temps avance sous contrôle, où les livraisons réseau peuvent être réordonnées ou interrompues, où les tâches s'exécutent sous un scheduler déterministe, où l'aléa est seedé et où les pannes peuvent être rejouées depuis la même seed.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Moonpool n'est pas un mock. Un mock remplace généralement un composant par un comportement simplifié. C'est utile pour beaucoup de tests unitaires, mais ce n'est pas la même chose que d'exercer un vrai client dans des interleavings difficiles.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Moonpool n'est pas non plus un test end-to-end classique. Un e2e exécute le vrai système, ce qui est indispensable, mais il utilise souvent du temps réel, un vrai réseau et des pannes difficiles à reproduire une fois le timing passé.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Moonpool occupe un autre espace. Il garde le code proche du chemin réel d'exécution tout en virtualisant les providers qui rendent le comportement distribué difficile à reproduire. Le but n'est pas d'éviter les e2e. Le but est d'ajouter un régime où les pannes ne sont plus des anecdotes. Elles deviennent des seeds.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le moteur Moonpool de Magnetar utilise la même machine d'état protocolaire que le moteur Tokio. Le chemin TLS est lui aussi piloté de façon à préserver la frontière de simulation : au lieu de s'appuyer sur tokio-rustls, le moteur Moonpool pilote directement rustls::ClientConnection au-dessus du pipe d'octets. Cela maintient les handshakes TLS sous le même contrôle déterministe que le reste du réseau simulé.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Tests différentiels : faire converger les moteurs</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Deux moteurs ne sont utiles que s'ils ne deviennent pas silencieusement deux clients différents.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Magnetar inclut donc un harnais différentiel. Il exécute une trace, par exemple connect, open producer, send, subscribe, receive, ack, seek et close, contre les moteurs Tokio et Moonpool, puis compare les event streams visibles par l'utilisateur.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cela compte parce que le moteur Moonpool sert à trouver des bugs difficiles à exposer avec du temps réel et de vraies sockets. Pour que cette recherche ait du sens, le moteur simulé doit rester aligné avec le moteur de production à la frontière utilisateur.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Si Tokio et Moonpool divergent, le simulateur devient moins fiable. Si le harnais différentiel les maintient alignés, alors une seed rouge dans le monde simulé pointe beaucoup plus probablement vers une propriété réelle du client, et non vers une implémentation séparée réservée aux tests.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est aussi pour cela que la politique de validation de Magnetar est stricte sur la couverture cross-runtime. Les changements comportementaux doivent exercer la couche sans-io, le runtime Tokio, le runtime Moonpool, l'équivalence différentielle et la surface e2e lorsque c'est applicable. C'est plus de travail qu'un seul test unitaire. C'est aussi le coût pour faire de la simulation déterministe un vrai outil d'ingénierie, pas une expérience annexe.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">La parité Java comme contrat de crédibilité</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La simulation ne remplace pas la largeur fonctionnelle. Elle rend cette largeur moins fragile.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Apache Pulsar possède un <a href="https://pulsar.apache.org/docs/">client Java</a> mature, et pour beaucoup d'utilisateurs ce client définit ce que signifie "un client Pulsar". Le produce/consume de base ne suffit pas. Un client crédible doit couvrir les comportements sur lesquels les applications s'appuient : batching, compression, transactions, schémas, topics partitionnés, consumers multi-topics et par pattern, retries, dead-letter flows, providers d'authentification, support proxy, failover, opérations admin et PIPs qui structurent les usages modernes de Pulsar.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Magnetar suit la parité avec le client Java comme un contrat public. Le <a href="https://github.com/CleverCloud/magnetar/blob/main/README.md">README</a> porte la matrice de parité et le statut moteur par moteur. L'article n'a pas besoin de recopier cette matrice, mais son existence est importante. Elle donne aux utilisateurs un moyen d'évaluer le projet comme client Pulsar, et non comme une expérience étroite autour d'un seul chemin heureux.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est pourquoi la première release publique de Magnetar est plus large qu'une démo minimale. Elle inclut la fondation protocolaire, la façade publique, les moteurs runtime, le support admin, les providers d'authentification, la crypto de messages, le travail CLI, les hooks d'observabilité et une liste croissante de surfaces PIP.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La raison de suivre la parité est simple : les utilisateurs ne choisissent pas une bibliothèque cliente uniquement parce que son architecture interne est élégante. Ils la choisissent parce qu'elle peut représenter le système qu'ils exécutent réellement. L'architecture rend cette surface maintenable. La parité la rend utile.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Au-delà de la production et de la consommation</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>L'expression "client Pulsar" peut masquer une large surface fonctionnelle. Vus de l'extérieur, les premiers exemples paraissent généralement modestes : construire un client, créer un producer, envoyer un payload, souscrire avec un consumer, recevoir un message, l'acquitter. Ces exemples sont utiles parce qu'ils montrent le point d'entrée. Ils ne suffisent pas à évaluer le client.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les vraies applications Pulsar dépendent de comportements qui n'apparaissent qu'une fois la première démo fonctionnelle. Un producer peut avoir besoin de batching, de compression, de chunking, de modes d'accès, de sequence ids, de timeouts d'envoi, de propriétés par message, de transactions, d'interceptors et de statistiques de latence. Un consumer peut avoir besoin de batch receive, d'acquittements cumulatifs, d'acquittements par index de batch, de nack backoff, de gestion des timeouts d'ack, de retry topics, de dead-letter topics, de seek, de pause/resume, de modes de souscription et de comportements par partition. Les applications avec des schémas stricts ont besoin d'Avro, de JSON, de Protobuf, de Protobuf-native, de KeyValue, de schémas primitifs et de la sémantique de résolution de schéma côté broker. Les déploiements avec des exigences de sécurité ont besoin d'authentification par token, de mTLS, d'OAuth2, de SASL, de Kerberos/GSSAPI, d'Athenz, de choix de provider TLS, et d'un moyen de raisonner sur le comportement de la crypto sans forcer chaque build à embarquer tous les providers.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ces fonctionnalités ne sont pas des cases à cocher indépendantes. Elles interagissent. Le batching interagit avec la compression et les timeouts d'envoi. Le chunking interagit avec les sequence ids et la redélivrance. Les transactions interagissent avec les acquittements. La reconnexion interagit avec les producers, les consumers, les lookups, le routage proxy et le failover. L'observabilité doit décrire le comportement sans laisser fuiter de secrets ni noyer les opérateurs en période de churn.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est pourquoi le travail fonctionnel et le travail d'architecture de Magnetar sont liés. Plus la surface devient complète, plus il est important que l'état protocolaire soit explicite et que la frontière avec le runtime reste étroite. Un client large bâti sur un état accidentel devient plus difficile à maintenir à mesure qu'il devient plus utile. Un client large bâti sur un état rejouable donne aux mainteneurs une meilleure chance d'empêcher la croissance fonctionnelle de se transformer en comportement caché.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">La validation comme architecture</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La stratégie de test de Magnetar est volontairement stratifiée, parce que chaque couche attrape une classe différente de bugs.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La couche sans-io permet de tester le comportement protocolaire sans sockets ni tâches async. La <a href="https://github.com/CleverCloud/magnetar/blob/main/docs/testing.md">documentation de test du projet</a> mentionne aujourd'hui plus de 270 tests unitaires dans magnetar-proto. Ces tests exercent directement la machine d'état : octets en entrée, événements en sortie, buffers de transmission en sortie, transitions d'état vérifiées.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les tests d'intégration runtime exercent la colle que les tests purement protocolaires ne peuvent pas couvrir. Les moteurs Tokio et Moonpool ont chacun leur surface d'intégration, et le projet impose une parité runtime afin qu'un moteur ne prenne pas silencieusement du retard sur l'autre.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le pack de chaos déterministe cible les ordonnancements de panne qui ont motivé l'architecture : reconnect, failover, timers en horloge virtuelle, ordre des handshakes TLS, publishes en vol, migration de broker et comportements réseau adversariaux. La <a href="https://github.com/CleverCloud/magnetar/blob/main/docs/moonpool-engine.md">documentation du moteur Moonpool</a> décrit un sweep Moonpool quotidien avec 128 seeds aléatoires fraîchement générées en parallèle. Le chiffre compte moins que ce qu'il représente : le client est poussé dans des ordonnancements qu'un humain n'écrirait pas à la main.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les tests d'équivalence différentielle comparent les deux mondes runtime. Ils posent une question directe : si la même trace est exécutée dans Tokio et Moonpool, l'utilisateur observe-t-il le même comportement ?</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les tests end-to-end restent nécessaires. Ils gardent Magnetar honnête face à un vrai broker Apache Pulsar. La simulation rend des pannes reproductibles, mais elle ne remplace pas la compatibilité avec le système que les utilisateurs déploient.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ensemble, ces couches ne sont pas une cérémonie. Elles font partie de l'architecture. Le but n'est pas d'accumuler de grands nombres de tests. Le but est d'appliquer la pression de validation exactement là où les clients distribués échouent : état protocolaire, frontières runtime, logique de reconnexion, timing, équivalence et comportement face à un vrai broker.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Ce que la reproductibilité change concrètement</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La valeur pratique de la simulation déterministe n'est pas seulement de rendre les tests plus sophistiqués. Elle change la boucle de debug.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Lorsqu'un test end-to-end traditionnel échoue à cause du timing, la première question est souvent de savoir si l'échec est reproductible. S'il ne l'est pas, on ajoute des sleeps, des logs, des timeouts plus larges ou des boucles de retry. Certaines de ces modifications sont utiles. Beaucoup ne font que déplacer la panne ailleurs. La panne reste une histoire : "on l'a vue une fois en CI".</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Avec une simulation déterministe, la panne doit devenir un artefact. Cet artefact est une seed, une trace et une transition d'état rejouable. La question passe de "peut-on la refaire apparaître ?" à "quel invariant cet ordonnancement a-t-il violé ?"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette différence compte pour une bibliothèque cliente. Les bugs de client se trouvent souvent à la frontière entre le code utilisateur et le broker. Ils sont faciles à attribuer au mauvais endroit. Un publish peut échouer parce que le broker a fermé la connexion, parce que le client a perdu un outcome, parce que le chemin de reconnexion a reconstruit le producer trop tard, parce qu'un ack a réveillé le mauvais waiter, parce qu'un timeout a frappé un état de session périmé, ou parce que la tâche runtime est morte après que le protocole a déjà changé d'état.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Si tout ce comportement est dispersé entre des tâches, des channels, des timers et des sockets, un rapport de panne est difficile à réduire. Si la machine d'état protocolaire est explicite, si la frontière runtime est étroite et si la même séquence peut être rejouée avec des providers contrôlés, le rapport devient beaucoup plus petit : cette seed, cette trace, cet ordre d'événements, cet invariant.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est pourquoi Magnetar traite la reproductibilité comme une partie du design du client. Le but n'est pas seulement de trouver plus de bugs. Le but est que les bugs trouvés coûtent moins cher à comprendre et soient plus sûrs à corriger.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cela change aussi la revue de code. Un reviewer peut demander si un comportement est couvert à la bonne couche. Est-ce une transition protocolaire pure ? Alors le test sans-io doit injecter des octets et vérifier des événements. Est-ce de la colle runtime ? Alors Tokio et Moonpool doivent avoir une couverture équivalente. Est-ce un comportement observable partagé par les deux moteurs ? Alors le harnais différentiel doit comparer les event streams. Est-ce de la compatibilité broker ? Alors un e2e doit toucher un vrai broker Pulsar.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ces questions sont plus précises que "a-t-on ajouté des tests ?" Elles relient le test au modèle de panne.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Par où commencer la lecture</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Pour les ingénieurs qui découvrent Magnetar, le meilleur point d'entrée n'est pas un fichier unique. C'est la relation entre les documents et le code.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le <a href="https://github.com/CleverCloud/magnetar/blob/main/README.md">README</a> donne la surface publique : ce que le client expose, quelles fonctionnalités sont implémentées, comment la matrice de parité Java est suivie, quels PIPs sont supportés et comment les deux moteurs sont positionnés. C'est le contrat utilisateur.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le <a href="https://github.com/CleverCloud/magnetar/blob/main/ARCHITECTURE.md">document d'architecture</a> explique la forme située sous ce contrat. Il montre la topologie de crates, le sens des dépendances, la frontière sans-io, la boucle driver, le modèle d'événements, les chemins producer et consumer, les moteurs runtime, les sites TLS, les schémas, la couverture PIP et la stratégie de validation. C'est la carte du système.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La <a href="https://github.com/CleverCloud/magnetar/tree/main/specs/adr">série d'ADR</a> explique pourquoi le système a cette forme. <a href="https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0004-sans-io-protocol-core.md">ADR-0004</a> documente la séparation sans-io. <a href="https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0003-no-channels-rule.md">ADR-0003</a> documente l'interdiction des channels. <a href="https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0011-clock-injection-sans-io.md">ADR-0011</a> documente l'injection d'horloge. <a href="https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0010-v0-1-full-java-parity.md">ADR-0010</a> documente la décision de parité Java. <a href="https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0019-engine-scope-and-moonpool-parity.md">ADR-0019</a> documente la relation entre le moteur de production Tokio et le moteur Moonpool par rapport à cet objectif de parité. <a href="https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0024-cross-runtime-test-and-coverage-policy.md">ADR-0024</a> documente la politique de test cross-runtime.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cela compte parce que Magnetar n'est volontairement pas seulement un dépôt de code. C'est un ensemble de décisions d'ingénierie avec une trace publique. Si vous n'êtes pas d'accord avec le design, les ADR donnent la bonne surface de discussion. Si vous voulez contribuer une fonctionnalité, la matrice de parité et la politique de validation indiquent ce que "terminé" veut dire. Si vous voulez évaluer le travail de simulation, la <a href="https://github.com/CleverCloud/magnetar/blob/main/docs/moonpool-engine.md">documentation du moteur Moonpool</a> et le harnais différentiel montrent comment le même coeur protocolaire est piloté dans plusieurs mondes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette première release doit donc se lire de deux manières. Comme utilisateur Pulsar, regardez la surface cliente et la matrice de parité. Comme ingénieur infrastructure Rust, regardez la frontière de machine d'état et la stratégie de simulation. Ce qui rend Magnetar intéressant, c'est que ces deux lectures sont censées se renforcer.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Ce que donne la première release publique</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Cette première release publique est un point d'entrée technique. Elle s'adresse aux ingénieurs qui veulent essayer Magnetar, lire l'architecture, inspecter les ADR, comparer le comportement avec les clients Pulsar existants et contribuer à structurer l'écosystème Pulsar Rust.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>L'API cliente de haut niveau commence par une forme attendue :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div
  style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  "
>
  <pre
    style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "
  ><code>let client = PulsarClient::builder()
    .service_url("pulsar://localhost:6650")
    .build()
    .await?;

let producer = client
    .producer("persistent://public/default/orders")
    .create()
    .await?;</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Cette API est importante, parce que le client doit être utilisable. Mais la release est aussi une invitation à inspecter les couches inférieures. Lire le <a href="https://github.com/CleverCloud/magnetar/blob/main/README.md">README</a> pour la matrice fonctionnelle. Lire le <a href="https://github.com/CleverCloud/magnetar/blob/main/ARCHITECTURE.md">document d'architecture</a> pour le design sans-io. Lire les <a href="https://github.com/CleverCloud/magnetar/tree/main/specs/adr">ADR</a> pour les décisions derrière l'interdiction des channels, les moteurs remplaçables, l'injection d'horloge, la parité Java, la parité Moonpool, les choix de providers TLS et la validation cross-runtime. Lire la <a href="https://github.com/CleverCloud/magnetar/blob/main/docs/moonpool-engine.md">documentation du moteur Moonpool</a> si la simulation déterministe appliquée à un vrai client réseau vous intéresse.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le point important pour cet article est la direction : Magnetar est public pour que les ingénieurs puissent évaluer à la fois la surface cliente et le modèle d'ingénierie qui la porte.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Vous pouvez consulter la première release publique de Magnetar <a href="https://github.com/CleverCloud/magnetar/releases#release-v1.0.0">v1.0.0</a>, ainsi que la dernière release à ce jour, la version <a href="https://github.com/CleverCloud/magnetar/releases#release-v1.2.0">v1.2.0</a>.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Pourquoi cela dépasse Magnetar</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Magnetar est un client Apache Pulsar. C'est aussi un exemple concret de la manière dont nous voulons construire davantage de logiciel d'infrastructure en Rust.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les systèmes distribués échouent par transitions d'état. Certaines de ces transitions sont évidentes et faciles à tester. Beaucoup ne le sont pas. Elles apparaissent lorsque le temps avance au mauvais endroit, lorsqu'un retry chevauche un chemin de fermeture, lorsqu'un broker coupe une connexion après avoir accepté une partie de la session, lorsqu'un callback est enregistré juste après une notification, ou lorsqu'un chemin de reconnexion reconstruit un handle mais pas un autre.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>On peut essayer de traquer ces bugs après coup. C'est parfois inévitable. Mais l'architecture peut rendre cette traque plus facile ou plus difficile.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Un client avec un coeur protocolaire pur, des événements explicites, du temps injecté, une I/O remplaçable, des seeds déterministes et une comparaison cross-runtime donne de meilleurs outils aux ingénieurs. Il permet de réduire une panne à une trace. Il permet de rejouer cette trace. Il permet de demander si une panne simulée correspond au runtime de production. Il permet d'ajouter un invariant là où une dérive silencieuse de l'état pouvait se cacher.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est la direction prise par Magnetar. Rendre le protocole explicite. Rendre le runtime remplaçable. Rendre les pannes reproductibles. Faire de la correction quelque chose que le code doit démontrer en continu.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Merci à Pierre Zemb pour Moonpool et pour cette direction de simulation déterministe en Rust, ainsi qu'aux contributeurs et mainteneurs de l'écosystème Pulsar Rust dont le travail a rendu l'étape suivante possible.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Magnetar est open source. Le code, les notes d'architecture, les ADR et la documentation vivent sur <a href="https://github.com/CleverCloud/magnetar">github.com/CleverCloud/magnetar</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"25px"} -->
<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:html -->
<hr style="border: none; height: 1px; background-color: #ccc; margin: 32px 0;">
<!-- /wp:html -->

<!-- wp:spacer {"height":"25px"} -->
<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Références</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Magnetar</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>Dépôt Magnetar</strong>. Dépôt public du client Apache Pulsar Rust. <a href="https://github.com/CleverCloud/magnetar">https://github.com/CleverCloud/magnetar</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>README Magnetar</strong>. Surface publique, matrice de parité Java, PIPs supportés, couverture par moteur et statut. <a href="https://github.com/CleverCloud/magnetar/blob/main/README.md">https://github.com/CleverCloud/magnetar/blob/main/README.md</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Architecture Magnetar</strong>. Rationale sans-io, topologie de crates, driver loop, machine d'état protocolaire et tests. <a href="https://github.com/CleverCloud/magnetar/blob/main/ARCHITECTURE.md">https://github.com/CleverCloud/magnetar/blob/main/ARCHITECTURE.md</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Index de documentation Magnetar</strong>. Moteur Moonpool, testing, CLI, observabilité, logging, features PIP. <a href="https://github.com/CleverCloud/magnetar/blob/main/docs/README.md">https://github.com/CleverCloud/magnetar/blob/main/docs/README.md</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Documentation du moteur Moonpool</strong>. Moteur de simulation déterministe, chaos pack, harnais différentiel, modèle de providers. <a href="https://github.com/CleverCloud/magnetar/blob/main/docs/moonpool-engine.md">https://github.com/CleverCloud/magnetar/blob/main/docs/moonpool-engine.md</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Documentation de test</strong>. Catégories de tests et commandes de validation. <a href="https://github.com/CleverCloud/magnetar/blob/main/docs/testing.md">https://github.com/CleverCloud/magnetar/blob/main/docs/testing.md</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>ADR-0004</strong>. magnetar-proto sans-io et moteurs d'I/O remplaçables. <a href="https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0004-sans-io-protocol-core.md">https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0004-sans-io-protocol-core.md</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>ADR-0010</strong>. Parité complète avec le client Java. <a href="https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0010-v0-1-full-java-parity.md">https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0010-v0-1-full-java-parity.md</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>ADR-0024</strong>. Politique de tests et couverture cross-runtime. <a href="https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0024-cross-runtime-test-and-coverage-policy.md">https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0024-cross-runtime-test-and-coverage-policy.md</a></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Écosystème</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>pulsar-rs</strong>. Client Apache Pulsar Rust existant. <a href="https://github.com/streamnative/pulsar-rs">https://github.com/streamnative/pulsar-rs</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Apache Pulsar</strong>. Plateforme distribuée de messaging et streaming. <a href="https://pulsar.apache.org/">https://pulsar.apache.org/</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Client Java Apache Pulsar</strong>. Surface de référence pour de nombreux utilisateurs Pulsar. <a href="https://pulsar.apache.org/docs/">https://pulsar.apache.org/docs/</a></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Simulation déterministe</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>FoundationDB testing</strong>. Lignée de la simulation déterministe et de l'injection de fautes. <a href="https://apple.github.io/foundationdb/testing.html">https://apple.github.io/foundationdb/testing.html</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>TigerBeetle TigerStyle</strong>. Style d'ingénierie centré sur les assertions. <a href="https://github.com/tigerbeetle/tigerbeetle/blob/main/docs/TIGER_STYLE.md">https://github.com/tigerbeetle/tigerbeetle/blob/main/docs/TIGER_STYLE.md</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>TigerBeetle VOPR</strong>. Approche de simulation testing. <a href="https://github.com/tigerbeetle/tigerbeetle/blob/main/docs/internals/vopr.md">https://github.com/tigerbeetle/tigerbeetle/blob/main/docs/internals/vopr.md</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Dépôt Moonpool</strong>. Simulation déterministe pour systèmes Rust, développée par Pierre Zemb. <a href="https://github.com/PierreZ/moonpool">https://github.com/PierreZ/moonpool</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>moonpool-sim</strong>. Crate du moteur de simulation Moonpool. <a href="https://crates.io/crates/moonpool-sim">https://crates.io/crates/moonpool-sim</a></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->]]></description>
										<content:encoded><![CDATA[<p><img width="2400" height="1065" src="https://cdn.clever-cloud.com/uploads/2026/07/2026-07-15-clever-cloud-banniere-blog-magnetar-fr.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026.07.15 Clever Cloud Bannière Blog Magnetar FR" decoding="async" srcset="https://cdn.clever-cloud.com/uploads/2026/07/2026-07-15-clever-cloud-banniere-blog-magnetar-fr.png 2400w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-15-clever-cloud-banniere-blog-magnetar-fr-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-15-clever-cloud-banniere-blog-magnetar-fr-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-15-clever-cloud-banniere-blog-magnetar-fr-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-15-clever-cloud-banniere-blog-magnetar-fr-1536x682.png 1536w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-15-clever-cloud-banniere-blog-magnetar-fr-2048x909.png 2048w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-15-clever-cloud-banniere-blog-magnetar-fr-1368x607.png 1368w" sizes="(max-width: 2400px) 100vw, 2400px" /></p><!-- wp:paragraph -->
<p><a href="https://apple.github.io/foundationdb/testing.html">FoundationDB</a> a rendu cette idée célèbre. Au lieu de s'appuyer seulement sur des tests unitaires et des tests end-to-end sur un vrai cluster, le projet exécute des workloads distribués dans un monde simulé, où le temps, les fautes réseau, les pannes de processus et les décisions d'ordonnancement peuvent être explorés puis rejoués à partir d'une seed. <a href="https://github.com/tigerbeetle/tigerbeetle/blob/main/docs/TIGER_STYLE.md">TigerBeetle</a> pousse une discipline complémentaire : rendre les invariants explicites dans le code, vérifier en continu la forme de l'état et transformer une corruption silencieuse en panne locale et bruyante.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Chez Clever Cloud, nous appliquons cette direction à des logiciels d'infrastructure en Rust. <a href="https://github.com/PierreZ/moonpool">Moonpool</a>, développé par Pierre Zemb, donne aux systèmes Rust un environnement de simulation déterministe où le temps, le réseau, les tâches, l'aléa et le stockage peuvent être virtualisés derrière des traits de providers. <a href="https://github.com/CleverCloud/magnetar">Magnetar</a> est l'application de cette approche à un client <a href="https://pulsar.apache.org/">Apache Pulsar</a>. C’est d’ailleurs, l’approche que nous prenons au sein de notre reverse proxy <a href="https://www.clever.cloud/fr/blog/entreprise/2026/07/01/sozu-2-1-0-load-balancing-udp-edge-programmable/">Sōzu</a>.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Magnetar est un driver Apache Pulsar écrit en Rust, depuis zéro. Il repose sur un coeur protocolaire sans-io, un moteur de production Tokio et un moteur Moonpool pour la simulation déterministe. Cette première release publique s'adresse aux ingénieurs qui veulent essayer Magnetar, évaluer son architecture, comparer son comportement avec les clients Pulsar existants et contribuer à structurer un écosystème Pulsar Rust plus solide.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>L'objectif n'est pas seulement d'exposer une API Rust autour de Pulsar. L'objectif est de construire un client dont les comportements difficiles peuvent être inspectés, rejoués et forcés à échouer avant que la production ne s'en charge.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Un client Pulsar fait partie du système distribué</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>On pourrait être tenté de considérer une bibliothèque cliente comme la partie simple d'un système distribué. Le broker porterait la réplication, le stockage, l'ownership et la coordination. Le client se contenterait de se connecter, d'envoyer des messages, d'en recevoir et de les acquitter.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette vision ne tient pas face à un vrai client Apache Pulsar.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Un client Pulsar sérieux doit gérer les producers, consumers, readers, topics partitionnés, consumers multi-topics, subscriptions par pattern, transactions, schémas, authentification, routage proxy, lookup broker, failover de cluster, reconnect, backoff, batching, chunking, ack grouping, suivi des messages non acquittés, negative acknowledgements, retry-letter et dead-letter flows, observabilité et une longue liste de Pulsar Improvement Proposals.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les bugs difficiles ne viennent pas seulement d'une commande mal encodée. Ils viennent souvent du temps et de l'ordre. Un broker tombe pendant qu'un publish est en vol. Une reconnexion arrive alors qu'un consumer a des acknowledgements en attente. Un refresh de token se produit pendant un reset de session. Un lookup via proxy pointe vers un nouveau broker alors que l'ancienne connexion se vide encore. Un topic migre et le client doit reconstruire assez d'état pour continuer sans prétendre que l'ancienne session existe toujours.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cela signifie qu'un client Pulsar n'est pas seulement un wrapper pratique autour d'une socket. Il fait partie du système distribué. Il possède un état qui doit rester cohérent pendant que le monde autour de lui change.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Si cet état est caché dans des tâches runtime, des files de channels, des horloges implicites et des accidents de timing, alors le client devient plus difficile à raisonner précisément au moment où cette précision compte le plus. Magnetar part de l'hypothèse inverse : rendre l'état protocolaire explicite, le piloter à travers des frontières étroites et garder l'I/O à l'extérieur.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">De l'écosystème Pulsar Rust à Magnetar</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Magnetar vient d'une expérience concrète avec l'écosystème Pulsar Rust, notamment la maintenance et l'usage de <a href="https://github.com/streamnative/pulsar-rs">pulsar-rs</a>. Ce travail compte. Il a donné aux utilisateurs Rust un client Apache Pulsar et a créé le contexte pratique dans lequel l'étape suivante pouvait être évaluée.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Magnetar n'est pas une critique de ce qui existait avant lui. C'est une continuation du même écosystème, avec un point de départ architectural différent. Après avoir travaillé sur des usages Pulsar réels, la direction est devenue plus claire : un driver Pulsar Rust doit rendre la frontière protocole/runtime plus nette, rendre les comportements difficiles reproductibles, suivre la parité explicitement et faire de la testabilité une contrainte de conception.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est pourquoi Magnetar ne commence pas par le builder public. Il commence par le protocole.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>L'API utilisateur compte, et cette première release expose déjà une surface large. Mais pour un client distribué, la question plus profonde est ce qui se passe sous cette API lorsque le broker bouge, que la connexion tombe, que l'horloge avance, qu'un timeout se déclenche, qu'une subscription est reconstruite ou que la même trace est rejouée sous un autre runtime.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Le coeur sans-io</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le coeur de Magnetar est <a href="https://github.com/CleverCloud/magnetar/tree/main/crates/magnetar-proto">magnetar-proto</a>. C'est une machine d'état protocolaire synchrone. Elle n'a pas de socket. Elle ne dépend pas de Tokio. Elle ne lance pas de tâches. Elle n'utilise pas async. Elle ne lit pas l'horloge hôte sur le chemin chaud du protocole.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Sa forme suit la même idée générale qui a rendu <a href="https://github.com/quinn-rs/quinn/tree/main/quinn-proto">quinn-proto</a> influent dans le monde réseau Rust : injecter des octets, récupérer des octets à transmettre, récupérer des événements sémantiques et demander à la machine d'état quand son prochain timer expire.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Conceptuellement, l'interface ressemble à ceci :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div
  style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  "
>
  <pre
    style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "
  ><code>&gt; connection.handle_bytes(now, bytes);

connection.poll_transmit(&amp;mut out);
connection.poll_event();
connection.poll_timeout();</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Cette petite forme est un grand choix d'architecture.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>handle_bytes permet à un moteur d'injecter les octets du wire dans la machine d'état. poll_transmit draine les frames sortantes. poll_event produit les événements sémantiques auxquels le runtime doit réagir : challenges d'authentification, résultats de lookup, checksum mismatch, signaux de reconnexion ou transitions protocolaire. poll_timeout permet au runtime de savoir quand réveiller la machine d'état.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La machine d'état ne décide pas d'où viennent les octets. Elle ne sait pas si le réseau est un vrai stream TCP, un stream TLS, un pipe d'octets dans un simulateur ou un broker scripté dans un harnais différentiel. Elle ne décide pas non plus ce que "maintenant" veut dire. Le moteur lui passe le temps.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les traits publics de magnetar-proto suivent la même règle. Ce ne sont pas des services runtime cachés derrière des callbacks async. Ce sont de petits contrats protocolaires, placés aux endroits où la machine d'état a besoin d'une décision ou d'une transformation : <a href="https://github.com/CleverCloud/magnetar/blob/main/crates/magnetar-proto/src/auth.rs">AuthProvider</a> produit les octets d'authentification, <a href="https://github.com/CleverCloud/magnetar/blob/main/crates/magnetar-proto/src/schema/mod.rs">Schema</a> définit l'encodage, le décodage, les données de schéma et les hooks de schéma résolu par le broker, <a href="https://github.com/CleverCloud/magnetar/blob/main/crates/magnetar-proto/src/crypto.rs">MessageEncryptor et MessageDecryptor</a> décrivent la crypto de payload sur des octets et de la metadata de message, <a href="https://github.com/CleverCloud/magnetar/blob/main/crates/magnetar-proto/src/service_url.rs">ServiceUrlProvider</a> expose l'URL de service courante pour le failover, et <a href="https://github.com/CleverCloud/magnetar/blob/main/crates/magnetar-proto/src/health_probe.rs">HealthProbe</a> utilise un contrat de type poll au lieu d'attacher le crate protocolaire à un runtime async. Le motif est volontaire : le coeur protocolaire peut demander des faits, des octets ou un état de readiness, tandis que l'I/O, le cache, le refresh, les probes réseau et le scheduler restent à l'extérieur.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette séparation n'est pas seulement une affaire de propreté. C'est ce qui rend le protocole testable sans broker, sans socket et sans runtime async. Un bug protocolaire peut être réduit à une fixture : injecter ces octets à cet instant, récupérer ces sorties, vérifier cet event stream et rejouer la même séquence.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour un client Apache Pulsar, cela compte parce que le protocole wire ne se limite pas au chemin heureux. Il comprend la création de producers, la subscription de consumers, les acks, nacks, transactions, erreurs broker, redirects, challenges d'authentification, migrations de topics, markers de replicated subscriptions, metadata de schémas, batching, chunking et chemins de fermeture. Chacun de ces éléments porte de l'état. Chaque transition d'état est plus facile à raisonner lorsqu'elle n'est pas mélangée aux lectures de socket, au scheduling de tâches et aux wakeups spécifiques d'un runtime.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">L'interdiction des channels comme contrainte d'architecture</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Magnetar fait aussi un choix Rust async peu courant : les primitives de channels sont interdites dans le workspace.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>L'architecture directe d'un client réseau ressemble souvent à ceci : future producer vers channel, channel vers driver task, driver task vers channel, channel vers future consumer. Cela peut fonctionner, mais cela disperse l'état entre des files et des tâches. La backpressure devient implicite. Les sémantiques de fermeture dépendent de la bibliothèque de channel. Des futures abandonnées peuvent laisser des messages dans des endroits difficiles à inspecter. La question de debug devient : où est passé ce message ?</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Magnetar utilise un autre motif. L'état vit dans la machine d'état protocolaire et dans la connexion partagée détenue par le runtime. Les futures utilisateur enregistrent des wakers dans des slabs indexés par identifiants d'opération. Le driver possède la boucle d'I/O, injecte les octets dans la machine d'état, draine les frames sortantes et réveille les futures correspondantes lorsque les outcomes arrivent.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ce n'est pas une interdiction esthétique des channels. C'est une manière de garder la propriété de l'état explicite. Lorsque le driver reconstruit des producers après une reconnexion, lorsqu'un consumer attend un message, lorsqu'un ack outcome est livré ou lorsqu'une opération en attente échoue parce qu'une session a disparu, l'état pertinent est dans la machine d'état et peut y être inspecté.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ce design a des compromis. Il met plus de pression sur la correction de la machine d'état. Il impose un ordre de locks précis. Il demande aux reviewers de comprendre l'enregistrement des wakers et les chemins de réveil. Mais il rend aussi le comportement beaucoup plus facile à simuler, rejouer et comparer entre runtimes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Deux moteurs, une machine d'état</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Magnetar livre deux moteurs qui pilotent le même coeur protocolaire.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le moteur par défaut est <a href="https://github.com/CleverCloud/magnetar/tree/main/crates/magnetar-runtime-tokio">magnetar-runtime-tokio</a>. C'est le chemin d'exécution de production : TCP, TLS via tokio-rustls, tâches driver, temps réel, vraies sockets et surface publique PulsarClient que la plupart des utilisateurs rencontreront en premier.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le second moteur est <a href="https://github.com/CleverCloud/magnetar/tree/main/crates/magnetar-runtime-moonpool">magnetar-runtime-moonpool</a>. Il pilote la même machine d'état magnetar-proto::Connection à travers des providers Moonpool. Au lieu d'inscrire le runtime en dur, Moonpool expose des traits de providers pour le réseau, le temps, le spawning de tâches, l'aléa et le stockage. Avec un bundle de providers proche de la production, le moteur peut exécuter de vraies I/O. Avec des providers de simulation, ces mêmes catégories peuvent être virtualisées.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est là que la simulation déterministe devient pratique. Le client peut être piloté dans un monde où le temps avance sous contrôle, où les livraisons réseau peuvent être réordonnées ou interrompues, où les tâches s'exécutent sous un scheduler déterministe, où l'aléa est seedé et où les pannes peuvent être rejouées depuis la même seed.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Moonpool n'est pas un mock. Un mock remplace généralement un composant par un comportement simplifié. C'est utile pour beaucoup de tests unitaires, mais ce n'est pas la même chose que d'exercer un vrai client dans des interleavings difficiles.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Moonpool n'est pas non plus un test end-to-end classique. Un e2e exécute le vrai système, ce qui est indispensable, mais il utilise souvent du temps réel, un vrai réseau et des pannes difficiles à reproduire une fois le timing passé.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Moonpool occupe un autre espace. Il garde le code proche du chemin réel d'exécution tout en virtualisant les providers qui rendent le comportement distribué difficile à reproduire. Le but n'est pas d'éviter les e2e. Le but est d'ajouter un régime où les pannes ne sont plus des anecdotes. Elles deviennent des seeds.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le moteur Moonpool de Magnetar utilise la même machine d'état protocolaire que le moteur Tokio. Le chemin TLS est lui aussi piloté de façon à préserver la frontière de simulation : au lieu de s'appuyer sur tokio-rustls, le moteur Moonpool pilote directement rustls::ClientConnection au-dessus du pipe d'octets. Cela maintient les handshakes TLS sous le même contrôle déterministe que le reste du réseau simulé.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Tests différentiels : faire converger les moteurs</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Deux moteurs ne sont utiles que s'ils ne deviennent pas silencieusement deux clients différents.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Magnetar inclut donc un harnais différentiel. Il exécute une trace, par exemple connect, open producer, send, subscribe, receive, ack, seek et close, contre les moteurs Tokio et Moonpool, puis compare les event streams visibles par l'utilisateur.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cela compte parce que le moteur Moonpool sert à trouver des bugs difficiles à exposer avec du temps réel et de vraies sockets. Pour que cette recherche ait du sens, le moteur simulé doit rester aligné avec le moteur de production à la frontière utilisateur.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Si Tokio et Moonpool divergent, le simulateur devient moins fiable. Si le harnais différentiel les maintient alignés, alors une seed rouge dans le monde simulé pointe beaucoup plus probablement vers une propriété réelle du client, et non vers une implémentation séparée réservée aux tests.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est aussi pour cela que la politique de validation de Magnetar est stricte sur la couverture cross-runtime. Les changements comportementaux doivent exercer la couche sans-io, le runtime Tokio, le runtime Moonpool, l'équivalence différentielle et la surface e2e lorsque c'est applicable. C'est plus de travail qu'un seul test unitaire. C'est aussi le coût pour faire de la simulation déterministe un vrai outil d'ingénierie, pas une expérience annexe.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">La parité Java comme contrat de crédibilité</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La simulation ne remplace pas la largeur fonctionnelle. Elle rend cette largeur moins fragile.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Apache Pulsar possède un <a href="https://pulsar.apache.org/docs/">client Java</a> mature, et pour beaucoup d'utilisateurs ce client définit ce que signifie "un client Pulsar". Le produce/consume de base ne suffit pas. Un client crédible doit couvrir les comportements sur lesquels les applications s'appuient : batching, compression, transactions, schémas, topics partitionnés, consumers multi-topics et par pattern, retries, dead-letter flows, providers d'authentification, support proxy, failover, opérations admin et PIPs qui structurent les usages modernes de Pulsar.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Magnetar suit la parité avec le client Java comme un contrat public. Le <a href="https://github.com/CleverCloud/magnetar/blob/main/README.md">README</a> porte la matrice de parité et le statut moteur par moteur. L'article n'a pas besoin de recopier cette matrice, mais son existence est importante. Elle donne aux utilisateurs un moyen d'évaluer le projet comme client Pulsar, et non comme une expérience étroite autour d'un seul chemin heureux.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est pourquoi la première release publique de Magnetar est plus large qu'une démo minimale. Elle inclut la fondation protocolaire, la façade publique, les moteurs runtime, le support admin, les providers d'authentification, la crypto de messages, le travail CLI, les hooks d'observabilité et une liste croissante de surfaces PIP.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La raison de suivre la parité est simple : les utilisateurs ne choisissent pas une bibliothèque cliente uniquement parce que son architecture interne est élégante. Ils la choisissent parce qu'elle peut représenter le système qu'ils exécutent réellement. L'architecture rend cette surface maintenable. La parité la rend utile.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Au-delà de la production et de la consommation</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>L'expression "client Pulsar" peut masquer une large surface fonctionnelle. Vus de l'extérieur, les premiers exemples paraissent généralement modestes : construire un client, créer un producer, envoyer un payload, souscrire avec un consumer, recevoir un message, l'acquitter. Ces exemples sont utiles parce qu'ils montrent le point d'entrée. Ils ne suffisent pas à évaluer le client.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les vraies applications Pulsar dépendent de comportements qui n'apparaissent qu'une fois la première démo fonctionnelle. Un producer peut avoir besoin de batching, de compression, de chunking, de modes d'accès, de sequence ids, de timeouts d'envoi, de propriétés par message, de transactions, d'interceptors et de statistiques de latence. Un consumer peut avoir besoin de batch receive, d'acquittements cumulatifs, d'acquittements par index de batch, de nack backoff, de gestion des timeouts d'ack, de retry topics, de dead-letter topics, de seek, de pause/resume, de modes de souscription et de comportements par partition. Les applications avec des schémas stricts ont besoin d'Avro, de JSON, de Protobuf, de Protobuf-native, de KeyValue, de schémas primitifs et de la sémantique de résolution de schéma côté broker. Les déploiements avec des exigences de sécurité ont besoin d'authentification par token, de mTLS, d'OAuth2, de SASL, de Kerberos/GSSAPI, d'Athenz, de choix de provider TLS, et d'un moyen de raisonner sur le comportement de la crypto sans forcer chaque build à embarquer tous les providers.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ces fonctionnalités ne sont pas des cases à cocher indépendantes. Elles interagissent. Le batching interagit avec la compression et les timeouts d'envoi. Le chunking interagit avec les sequence ids et la redélivrance. Les transactions interagissent avec les acquittements. La reconnexion interagit avec les producers, les consumers, les lookups, le routage proxy et le failover. L'observabilité doit décrire le comportement sans laisser fuiter de secrets ni noyer les opérateurs en période de churn.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est pourquoi le travail fonctionnel et le travail d'architecture de Magnetar sont liés. Plus la surface devient complète, plus il est important que l'état protocolaire soit explicite et que la frontière avec le runtime reste étroite. Un client large bâti sur un état accidentel devient plus difficile à maintenir à mesure qu'il devient plus utile. Un client large bâti sur un état rejouable donne aux mainteneurs une meilleure chance d'empêcher la croissance fonctionnelle de se transformer en comportement caché.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">La validation comme architecture</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La stratégie de test de Magnetar est volontairement stratifiée, parce que chaque couche attrape une classe différente de bugs.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La couche sans-io permet de tester le comportement protocolaire sans sockets ni tâches async. La <a href="https://github.com/CleverCloud/magnetar/blob/main/docs/testing.md">documentation de test du projet</a> mentionne aujourd'hui plus de 270 tests unitaires dans magnetar-proto. Ces tests exercent directement la machine d'état : octets en entrée, événements en sortie, buffers de transmission en sortie, transitions d'état vérifiées.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les tests d'intégration runtime exercent la colle que les tests purement protocolaires ne peuvent pas couvrir. Les moteurs Tokio et Moonpool ont chacun leur surface d'intégration, et le projet impose une parité runtime afin qu'un moteur ne prenne pas silencieusement du retard sur l'autre.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le pack de chaos déterministe cible les ordonnancements de panne qui ont motivé l'architecture : reconnect, failover, timers en horloge virtuelle, ordre des handshakes TLS, publishes en vol, migration de broker et comportements réseau adversariaux. La <a href="https://github.com/CleverCloud/magnetar/blob/main/docs/moonpool-engine.md">documentation du moteur Moonpool</a> décrit un sweep Moonpool quotidien avec 128 seeds aléatoires fraîchement générées en parallèle. Le chiffre compte moins que ce qu'il représente : le client est poussé dans des ordonnancements qu'un humain n'écrirait pas à la main.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les tests d'équivalence différentielle comparent les deux mondes runtime. Ils posent une question directe : si la même trace est exécutée dans Tokio et Moonpool, l'utilisateur observe-t-il le même comportement ?</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les tests end-to-end restent nécessaires. Ils gardent Magnetar honnête face à un vrai broker Apache Pulsar. La simulation rend des pannes reproductibles, mais elle ne remplace pas la compatibilité avec le système que les utilisateurs déploient.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ensemble, ces couches ne sont pas une cérémonie. Elles font partie de l'architecture. Le but n'est pas d'accumuler de grands nombres de tests. Le but est d'appliquer la pression de validation exactement là où les clients distribués échouent : état protocolaire, frontières runtime, logique de reconnexion, timing, équivalence et comportement face à un vrai broker.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Ce que la reproductibilité change concrètement</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La valeur pratique de la simulation déterministe n'est pas seulement de rendre les tests plus sophistiqués. Elle change la boucle de debug.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Lorsqu'un test end-to-end traditionnel échoue à cause du timing, la première question est souvent de savoir si l'échec est reproductible. S'il ne l'est pas, on ajoute des sleeps, des logs, des timeouts plus larges ou des boucles de retry. Certaines de ces modifications sont utiles. Beaucoup ne font que déplacer la panne ailleurs. La panne reste une histoire : "on l'a vue une fois en CI".</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Avec une simulation déterministe, la panne doit devenir un artefact. Cet artefact est une seed, une trace et une transition d'état rejouable. La question passe de "peut-on la refaire apparaître ?" à "quel invariant cet ordonnancement a-t-il violé ?"</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette différence compte pour une bibliothèque cliente. Les bugs de client se trouvent souvent à la frontière entre le code utilisateur et le broker. Ils sont faciles à attribuer au mauvais endroit. Un publish peut échouer parce que le broker a fermé la connexion, parce que le client a perdu un outcome, parce que le chemin de reconnexion a reconstruit le producer trop tard, parce qu'un ack a réveillé le mauvais waiter, parce qu'un timeout a frappé un état de session périmé, ou parce que la tâche runtime est morte après que le protocole a déjà changé d'état.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Si tout ce comportement est dispersé entre des tâches, des channels, des timers et des sockets, un rapport de panne est difficile à réduire. Si la machine d'état protocolaire est explicite, si la frontière runtime est étroite et si la même séquence peut être rejouée avec des providers contrôlés, le rapport devient beaucoup plus petit : cette seed, cette trace, cet ordre d'événements, cet invariant.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est pourquoi Magnetar traite la reproductibilité comme une partie du design du client. Le but n'est pas seulement de trouver plus de bugs. Le but est que les bugs trouvés coûtent moins cher à comprendre et soient plus sûrs à corriger.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cela change aussi la revue de code. Un reviewer peut demander si un comportement est couvert à la bonne couche. Est-ce une transition protocolaire pure ? Alors le test sans-io doit injecter des octets et vérifier des événements. Est-ce de la colle runtime ? Alors Tokio et Moonpool doivent avoir une couverture équivalente. Est-ce un comportement observable partagé par les deux moteurs ? Alors le harnais différentiel doit comparer les event streams. Est-ce de la compatibilité broker ? Alors un e2e doit toucher un vrai broker Pulsar.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ces questions sont plus précises que "a-t-on ajouté des tests ?" Elles relient le test au modèle de panne.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Par où commencer la lecture</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Pour les ingénieurs qui découvrent Magnetar, le meilleur point d'entrée n'est pas un fichier unique. C'est la relation entre les documents et le code.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le <a href="https://github.com/CleverCloud/magnetar/blob/main/README.md">README</a> donne la surface publique : ce que le client expose, quelles fonctionnalités sont implémentées, comment la matrice de parité Java est suivie, quels PIPs sont supportés et comment les deux moteurs sont positionnés. C'est le contrat utilisateur.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le <a href="https://github.com/CleverCloud/magnetar/blob/main/ARCHITECTURE.md">document d'architecture</a> explique la forme située sous ce contrat. Il montre la topologie de crates, le sens des dépendances, la frontière sans-io, la boucle driver, le modèle d'événements, les chemins producer et consumer, les moteurs runtime, les sites TLS, les schémas, la couverture PIP et la stratégie de validation. C'est la carte du système.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La <a href="https://github.com/CleverCloud/magnetar/tree/main/specs/adr">série d'ADR</a> explique pourquoi le système a cette forme. <a href="https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0004-sans-io-protocol-core.md">ADR-0004</a> documente la séparation sans-io. <a href="https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0003-no-channels-rule.md">ADR-0003</a> documente l'interdiction des channels. <a href="https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0011-clock-injection-sans-io.md">ADR-0011</a> documente l'injection d'horloge. <a href="https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0010-v0-1-full-java-parity.md">ADR-0010</a> documente la décision de parité Java. <a href="https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0019-engine-scope-and-moonpool-parity.md">ADR-0019</a> documente la relation entre le moteur de production Tokio et le moteur Moonpool par rapport à cet objectif de parité. <a href="https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0024-cross-runtime-test-and-coverage-policy.md">ADR-0024</a> documente la politique de test cross-runtime.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cela compte parce que Magnetar n'est volontairement pas seulement un dépôt de code. C'est un ensemble de décisions d'ingénierie avec une trace publique. Si vous n'êtes pas d'accord avec le design, les ADR donnent la bonne surface de discussion. Si vous voulez contribuer une fonctionnalité, la matrice de parité et la politique de validation indiquent ce que "terminé" veut dire. Si vous voulez évaluer le travail de simulation, la <a href="https://github.com/CleverCloud/magnetar/blob/main/docs/moonpool-engine.md">documentation du moteur Moonpool</a> et le harnais différentiel montrent comment le même coeur protocolaire est piloté dans plusieurs mondes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette première release doit donc se lire de deux manières. Comme utilisateur Pulsar, regardez la surface cliente et la matrice de parité. Comme ingénieur infrastructure Rust, regardez la frontière de machine d'état et la stratégie de simulation. Ce qui rend Magnetar intéressant, c'est que ces deux lectures sont censées se renforcer.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Ce que donne la première release publique</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Cette première release publique est un point d'entrée technique. Elle s'adresse aux ingénieurs qui veulent essayer Magnetar, lire l'architecture, inspecter les ADR, comparer le comportement avec les clients Pulsar existants et contribuer à structurer l'écosystème Pulsar Rust.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>L'API cliente de haut niveau commence par une forme attendue :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div
  style="
    max-width: 780px;
    margin: 1.5rem auto;
    padding: 16px 20px;
    background: #0f172a;
    color: #e5eefc;
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 12px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
      Roboto, 'Helvetica Neue', Arial, sans-serif;
    font-size: 15px;
    line-height: 1.7;
  "
>
  <pre
    style="
      margin: 0;
      overflow-x: auto;
      white-space: pre-wrap;
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
        'Liberation Mono', 'Courier New', monospace;
    "
  ><code>let client = PulsarClient::builder()
    .service_url("pulsar://localhost:6650")
    .build()
    .await?;

let producer = client
    .producer("persistent://public/default/orders")
    .create()
    .await?;</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Cette API est importante, parce que le client doit être utilisable. Mais la release est aussi une invitation à inspecter les couches inférieures. Lire le <a href="https://github.com/CleverCloud/magnetar/blob/main/README.md">README</a> pour la matrice fonctionnelle. Lire le <a href="https://github.com/CleverCloud/magnetar/blob/main/ARCHITECTURE.md">document d'architecture</a> pour le design sans-io. Lire les <a href="https://github.com/CleverCloud/magnetar/tree/main/specs/adr">ADR</a> pour les décisions derrière l'interdiction des channels, les moteurs remplaçables, l'injection d'horloge, la parité Java, la parité Moonpool, les choix de providers TLS et la validation cross-runtime. Lire la <a href="https://github.com/CleverCloud/magnetar/blob/main/docs/moonpool-engine.md">documentation du moteur Moonpool</a> si la simulation déterministe appliquée à un vrai client réseau vous intéresse.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le point important pour cet article est la direction : Magnetar est public pour que les ingénieurs puissent évaluer à la fois la surface cliente et le modèle d'ingénierie qui la porte.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Vous pouvez consulter la première release publique de Magnetar <a href="https://github.com/CleverCloud/magnetar/releases#release-v1.0.0">v1.0.0</a>, ainsi que la dernière release à ce jour, la version <a href="https://github.com/CleverCloud/magnetar/releases#release-v1.2.0">v1.2.0</a>.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Pourquoi cela dépasse Magnetar</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Magnetar est un client Apache Pulsar. C'est aussi un exemple concret de la manière dont nous voulons construire davantage de logiciel d'infrastructure en Rust.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les systèmes distribués échouent par transitions d'état. Certaines de ces transitions sont évidentes et faciles à tester. Beaucoup ne le sont pas. Elles apparaissent lorsque le temps avance au mauvais endroit, lorsqu'un retry chevauche un chemin de fermeture, lorsqu'un broker coupe une connexion après avoir accepté une partie de la session, lorsqu'un callback est enregistré juste après une notification, ou lorsqu'un chemin de reconnexion reconstruit un handle mais pas un autre.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>On peut essayer de traquer ces bugs après coup. C'est parfois inévitable. Mais l'architecture peut rendre cette traque plus facile ou plus difficile.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Un client avec un coeur protocolaire pur, des événements explicites, du temps injecté, une I/O remplaçable, des seeds déterministes et une comparaison cross-runtime donne de meilleurs outils aux ingénieurs. Il permet de réduire une panne à une trace. Il permet de rejouer cette trace. Il permet de demander si une panne simulée correspond au runtime de production. Il permet d'ajouter un invariant là où une dérive silencieuse de l'état pouvait se cacher.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est la direction prise par Magnetar. Rendre le protocole explicite. Rendre le runtime remplaçable. Rendre les pannes reproductibles. Faire de la correction quelque chose que le code doit démontrer en continu.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Merci à Pierre Zemb pour Moonpool et pour cette direction de simulation déterministe en Rust, ainsi qu'aux contributeurs et mainteneurs de l'écosystème Pulsar Rust dont le travail a rendu l'étape suivante possible.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Magnetar est open source. Le code, les notes d'architecture, les ADR et la documentation vivent sur <a href="https://github.com/CleverCloud/magnetar">github.com/CleverCloud/magnetar</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"25px"} -->
<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:html -->
<hr style="border: none; height: 1px; background-color: #ccc; margin: 32px 0;">
<!-- /wp:html -->

<!-- wp:spacer {"height":"25px"} -->
<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Références</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Magnetar</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>Dépôt Magnetar</strong>. Dépôt public du client Apache Pulsar Rust. <a href="https://github.com/CleverCloud/magnetar">https://github.com/CleverCloud/magnetar</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>README Magnetar</strong>. Surface publique, matrice de parité Java, PIPs supportés, couverture par moteur et statut. <a href="https://github.com/CleverCloud/magnetar/blob/main/README.md">https://github.com/CleverCloud/magnetar/blob/main/README.md</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Architecture Magnetar</strong>. Rationale sans-io, topologie de crates, driver loop, machine d'état protocolaire et tests. <a href="https://github.com/CleverCloud/magnetar/blob/main/ARCHITECTURE.md">https://github.com/CleverCloud/magnetar/blob/main/ARCHITECTURE.md</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Index de documentation Magnetar</strong>. Moteur Moonpool, testing, CLI, observabilité, logging, features PIP. <a href="https://github.com/CleverCloud/magnetar/blob/main/docs/README.md">https://github.com/CleverCloud/magnetar/blob/main/docs/README.md</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Documentation du moteur Moonpool</strong>. Moteur de simulation déterministe, chaos pack, harnais différentiel, modèle de providers. <a href="https://github.com/CleverCloud/magnetar/blob/main/docs/moonpool-engine.md">https://github.com/CleverCloud/magnetar/blob/main/docs/moonpool-engine.md</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Documentation de test</strong>. Catégories de tests et commandes de validation. <a href="https://github.com/CleverCloud/magnetar/blob/main/docs/testing.md">https://github.com/CleverCloud/magnetar/blob/main/docs/testing.md</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>ADR-0004</strong>. magnetar-proto sans-io et moteurs d'I/O remplaçables. <a href="https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0004-sans-io-protocol-core.md">https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0004-sans-io-protocol-core.md</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>ADR-0010</strong>. Parité complète avec le client Java. <a href="https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0010-v0-1-full-java-parity.md">https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0010-v0-1-full-java-parity.md</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>ADR-0024</strong>. Politique de tests et couverture cross-runtime. <a href="https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0024-cross-runtime-test-and-coverage-policy.md">https://github.com/CleverCloud/magnetar/blob/main/specs/adr/0024-cross-runtime-test-and-coverage-policy.md</a></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Écosystème</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>pulsar-rs</strong>. Client Apache Pulsar Rust existant. <a href="https://github.com/streamnative/pulsar-rs">https://github.com/streamnative/pulsar-rs</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Apache Pulsar</strong>. Plateforme distribuée de messaging et streaming. <a href="https://pulsar.apache.org/">https://pulsar.apache.org/</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Client Java Apache Pulsar</strong>. Surface de référence pour de nombreux utilisateurs Pulsar. <a href="https://pulsar.apache.org/docs/">https://pulsar.apache.org/docs/</a></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Simulation déterministe</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>FoundationDB testing</strong>. Lignée de la simulation déterministe et de l'injection de fautes. <a href="https://apple.github.io/foundationdb/testing.html">https://apple.github.io/foundationdb/testing.html</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>TigerBeetle TigerStyle</strong>. Style d'ingénierie centré sur les assertions. <a href="https://github.com/tigerbeetle/tigerbeetle/blob/main/docs/TIGER_STYLE.md">https://github.com/tigerbeetle/tigerbeetle/blob/main/docs/TIGER_STYLE.md</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>TigerBeetle VOPR</strong>. Approche de simulation testing. <a href="https://github.com/tigerbeetle/tigerbeetle/blob/main/docs/internals/vopr.md">https://github.com/tigerbeetle/tigerbeetle/blob/main/docs/internals/vopr.md</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Dépôt Moonpool</strong>. Simulation déterministe pour systèmes Rust, développée par Pierre Zemb. <a href="https://github.com/PierreZ/moonpool">https://github.com/PierreZ/moonpool</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>moonpool-sim</strong>. Crate du moteur de simulation Moonpool. <a href="https://crates.io/crates/moonpool-sim">https://crates.io/crates/moonpool-sim</a></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Kubernetes orchestration : à quoi sert l&#8217;orchestration de conteneurs ?</title>
		<link>https://www.clever.cloud/fr/blog/engineering-fr/2026/07/03/kubernetes-orchestration-conteneurs-a-quoi-ca-sert/</link>
		
		<dc:creator><![CDATA[Leo Le Levé Dandé]]></dc:creator>
		<pubDate>Fri, 03 Jul 2026 09:40:47 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[kubernetes]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=24867</guid>

					<description><![CDATA[<p><img width="2500" height="1109" src="https://cdn.clever-cloud.com/uploads/2026/07/2026-07-02-clever-cloud-banniere-blog-kubernetes-orchestration-fr.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026.07.02 Clever Cloud Bannière Blog Kubernetes Orchestration FR" decoding="async" srcset="https://cdn.clever-cloud.com/uploads/2026/07/2026-07-02-clever-cloud-banniere-blog-kubernetes-orchestration-fr.png 2500w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-02-clever-cloud-banniere-blog-kubernetes-orchestration-fr-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-02-clever-cloud-banniere-blog-kubernetes-orchestration-fr-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-02-clever-cloud-banniere-blog-kubernetes-orchestration-fr-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-02-clever-cloud-banniere-blog-kubernetes-orchestration-fr-1536x681.png 1536w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-02-clever-cloud-banniere-blog-kubernetes-orchestration-fr-2048x908.png 2048w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-02-clever-cloud-banniere-blog-kubernetes-orchestration-fr-1368x607.png 1368w" sizes="(max-width: 2500px) 100vw, 2500px" /></p><!-- wp:html -->
<style>
  .cc-table-wrap { overflow-x: auto; }
  .cc-table {
    width: 100%;
    border-collapse: collapse;
    table-layout: fixed;
    font-size: 17px;
    font-family: "Plus Jakarta Sans","PlusJakartaSans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;
    color: #111827;
  }
  .cc-table th,
  .cc-table td {
    text-align: left;
    padding: 12px 16px;
    vertical-align: top;
    line-height: 1.6;
  }
  .cc-table tbody tr + tr td,
  .cc-table tbody tr:first-child td {
    border-top: 1px solid #deddee;
  }
  .cc-table th + th,
  .cc-table td + td {
    border-left: 1px solid #deddee;
  }
  .cc-table thead th {
    font-weight: 700;
    text-align: center;
  }
  .cc-table th:nth-child(1),
  .cc-table td:nth-child(1) { width: 28%; }
  .cc-table th:nth-child(2),
  .cc-table td:nth-child(2) { width: 36%; }
  .cc-table th:nth-child(3),
  .cc-table td:nth-child(3) { width: 36%; }
</style>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>C'est une fonction distincte de la conteneurisation elle-même, qui consiste à empaqueter une application avec ses dépendances dans un format standard. Les<a href="https://www.clever.cloud/fr/blog/fonctionnalites/2026/05/22/kubernetes-vs-docker-quelles-differences-et-quand-les-utiliser/"> différences entre Docker et Kubernetes</a> reposent précisément sur cette distinction : Docker fabrique et exécute les conteneurs, Kubernetes les orchestre. Aujourd'hui, Kubernetes est l'orchestrateur de référence, mais l'orchestration en tant que concept existe indépendamment de l'outil qui la met en œuvre.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Pourquoi l'orchestration existe ?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Faire tourner trois conteneurs sur un serveur ne demande pas d'orchestration. On démarre, on supervise à l'œil, on redémarre à la main si quelque chose plante. Le problème change de nature à partir du moment où une application devient un système distribué : plusieurs services, plusieurs machines, du trafic variable, des déploiements fréquents. Les questions opérationnelles qui apparaissent alors sont concrètes. Sur quelle machine placer ce nouveau conteneur ? Que faire si un nœud tombe la nuit ? Comment passer de la version 1.4 à la 1.5 sans interruption visible ? Comment un service interne en trouve un autre quand les adresses IP changent à chaque redémarrage ?</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Chacune de ces questions a une réponse manuelle possible, scriptable même. L'orchestration consiste à les automatiser de manière cohérente, sous un modèle unique.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Les cinq fonctions principales de l'orchestration</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Kubernetes traite ces questions via un<a href="https://www.clever.cloud/fr/blog/engineering-fr/2026/05/19/k8s-kubernetes-definition-standard/"> modèle déclaratif construit sur des boucles de réconciliation</a> : on décrit l'état souhaité du système, et l'orchestrateur compare en permanence cet état désiré à l'état réel pour les rapprocher. Les cinq fonctions qui suivent sont des instanciations de ce mécanisme général.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Scheduling : placer les conteneurs sur les bonnes machines</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le scheduling répond à une question : quand un nouveau conteneur doit démarrer, sur quelle machine du cluster doit-il s'exécuter ? Sur un cluster de quelques nœuds aux profils homogènes, la décision est triviale. Sur un cluster réel, elle ne l'est pas : certaines machines ont du GPU, d'autres pas, certaines sont déjà chargées, certaines applications doivent être isolées, d'autres doivent au contraire être co-localisées pour des raisons de latence.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le composant kube-scheduler effectue ce choix en deux étapes : filtering, qui élimine les nœuds qui ne peuvent pas accueillir le pod (capacité insuffisante, contraintes d'affinité, taints et tolerations), et scoring, qui note les nœuds restants selon plusieurs critères. Le pod est ensuite assigné au nœud retenu via une opération de binding auprès de l'API server. La qualité de la décision dépend des informations fournies au scheduler. Ce sont les requests de ressources déclarées sur les pods qui déterminent le placement : le scheduler cherche un nœud dont la capacité disponible couvre ces requests. Les limits, elles, ne servent pas au placement mais plafonnent la consommation d'un conteneur une fois qu'il tourne.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Scaling : ajuster la capacité au trafic réel</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le scaling automatise une décision simple à formuler : combien de copies d'un service doivent tourner à un instant donné ? Trop de copies coûte cher. Trop peu provoque des incidents au moindre pic.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le scaling est une fonction commune à tous les orchestrateurs ; les mécanismes varient selon l'implémentation. Dans Kubernetes, il repose sur trois briques distinctes. Le Horizontal Pod Autoscaler (HPA), inclus dans le cœur de Kubernetes, ajuste le nombre de pods d'un déploiement en fonction d'une métrique. Il s'appuie pour cela sur le Metrics Server, un composant à installer séparément, car la collecte de métriques n'est pas fournie par défaut. Le Vertical Pod Autoscaler (VPA), livré lui aussi comme projet séparé, ajuste les ressources allouées à chaque pod. Le Cluster Autoscaler, enfin, ajoute ou retire des nœuds entiers selon les besoins agrégés. Ces mécanismes supposent des métriques fiables : un HPA piloté sur le CPU, alors que le service est en réalité contraint par les I/O disque, ne produit pas le résultat attendu.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Self-healing : remplacer ce qui tombe</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>À partir d'un certain nombre de machines, les pannes ne sont plus des événements exceptionnels mais une donnée d'arrière-plan. Un disque défaille, un kernel panic survient, un conteneur fuit de la mémoire et finit OOM-killed. Sans orchestration, chaque panne déclenche une intervention humaine, plus ou moins urgente. Avec orchestration, ces événements sont absorbés sans intervention.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Au sein de Kubernetes, le mécanisme repose sur deux éléments. D'abord, des sondes (liveness, readiness, startup) qui lui&nbsp; permettent de savoir si un conteneur fonctionne réellement, et pas seulement s'il a démarré. Ensuite, le principe que tout objet géré par un controller (Deployment, StatefulSet, DaemonSet) est en permanence comparé à l'état désiré : si un pod disparaît, le controller en demande un nouveau. La précision des sondes conditionne la qualité du self-healing : des sondes trop strictes provoquent des redémarrages inutiles, des sondes trop laxistes laissent passer des conteneurs cassés.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Service discovery et load balancing interne</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Dans un parc de conteneurs en mouvement, où chaque pod a une adresse IP éphémère, deux services qui doivent communiquer ne peuvent pas s'appuyer sur des configurations IP statiques. Le service discovery résout ce problème par une couche d'indirection. Dans Kubernetes, un objet Service regroupe un ensemble de pods (sélectionnés par labels) sous un nom DNS stable et une IP virtuelle. CoreDNS, le serveur DNS interne du cluster, résout ces noms. Le trafic envoyé à l'IP du Service est distribué entre les pods prêts via kube-proxy. Ce principe n'est pas propre à Kubernetes : d'autres orchestrateurs répondent au même besoin autrement. Sur Clever Cloud, par exemple, les services se découvrent via l'injection de configuration entre applications et via les Network Groups, un réseau privé chiffré doté d'une résolution DNS interne.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Plusieurs types de Services existent (ClusterIP pour l'interne, NodePort et LoadBalancer pour l'externe), auxquels s'ajoute la notion d'Ingress pour le routage HTTP au niveau applicatif. Cette couche réseau, simple en apparence, contient une part substantielle de la complexité d'exploitation de Kubernetes : choix du plugin CNI, politiques réseau, observabilité du trafic est-ouest.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Rolling updates et rollbacks</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Mettre en production une nouvelle version sans interrompre le service est une opération risquée si elle est faite à la main. Kubernetes la traite comme une transition d'état : on modifie le manifeste du Deployment pour pointer vers la nouvelle version d'image, et le controller applique la stratégie de rollout configurée.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La stratégie RollingUpdate (par défaut) remplace progressivement les anciens pods par des nouveaux, en garantissant qu'un nombre minimal reste disponible à tout moment. La stratégie Recreate arrête tout puis redémarre, utile pour des migrations de schéma incompatibles. En cas d'échec, le rollout ne revient pas seul à l'état antérieur : il s'interrompt, les nouveaux pods qui échouent aux sondes ne remplacent pas les anciens, et c'est un opérateur qui déclenche le retour à la version précédente avec kubectl rollout undo. La condition pour que cela fonctionne est que les versions soient compatibles entre elles pendant la transition, ce qui implique une discipline côté contrats d'API et migrations de base de données.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Au-delà des cinq fonctions de base</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>L'orchestration de Kubernetes ne se limite pas à ces cinq fonctions. En pratique, un cluster Kubernetes en production gère aussi la configuration applicative (ConfigMaps), les secrets (avec ou sans chiffrement au repos), le stockage persistant via les PersistentVolumeClaims, l'autorisation (RBAC), l'isolation réseau (NetworkPolicies), l'observabilité (logs, métriques, traces), et la gestion du cycle de vie des certificats. Chacune de ces fonctions est elle-même une responsabilité opérationnelle qui s'ajoute au socle.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Sans orchestrateur vs avec Kubernetes : comparaison fonction par fonction</h2>
<!-- /wp:heading -->

<!-- wp:spacer {"height":"25px"} -->
<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:html -->
<div class="cc-table-wrap">
  <table class="cc-table">
    <thead>
      <tr>
        <th>Fonction</th>
        <th>Sans orchestrateur</th>
        <th>Avec Kubernetes</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Scheduling</td>
        <td>Placement manuel ou scripts d'allocation custom</td>
        <td>kube-scheduler avec contraintes déclaratives</td>
      </tr>
      <tr>
        <td>Scaling</td>
        <td>Provisioning manuel ou règles externes</td>
        <td>HPA, VPA, Cluster Autoscaler</td>
      </tr>
      <tr>
        <td>Self-healing</td>
        <td>Supervision externe et scripts de redémarrage</td>
        <td>Sondes intégrées et controllers</td>
      </tr>
      <tr>
        <td>Service discovery</td>
        <td>Fichiers de configuration, Consul, etcd à part</td>
        <td>Services et DNS interne natifs</td>
      </tr>
      <tr>
        <td>Rolling updates</td>
        <td>Scripts de déploiement custom et bascule manuelle de load balancer</td>
        <td>Deployment controller et stratégies déclaratives</td>
      </tr>
    </tbody>
  </table>
</div>
<!-- /wp:html -->

<!-- wp:spacer {"height":"25px"} -->
<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:paragraph -->
<p>Le tableau ne hiérarchise pas les deux colonnes. Il montre que Kubernetes fournit un modèle unifié pour ces cinq fonctions, là où une approche sans orchestrateur les traite séparément avec des outils différents. Pour un système qui n'a pas besoin de cette unification, la colonne de gauche reste pertinente.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Pratiques fréquentes à connaître</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>Choisir l'outil en fonction du besoin, pas par défaut.</strong> Toutes les applications n'ont pas besoin de scheduling, de scaling automatique ou de service discovery au niveau qu'offre Kubernetes. Un PaaS, un déploiement sur VM, ou un binaire systemd répondent à de nombreux besoins avec un autre modèle d'exploitation.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Penser l'observabilité dès le départ.</strong> Un cluster Kubernetes sans logs centralisés, sans métriques agrégées et sans traces devient rapidement difficile à exploiter au-delà de quelques services. L'observabilité fait partie intégrante de l'orchestration, pas d'un ajout optionnel.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Définir </strong><strong>requests</strong><strong> et </strong><strong>limits</strong><strong> avant d'activer l'autoscaling.</strong> Le HPA et le Cluster Autoscaler s'appuient sur les ressources déclarées des pods pour décider du scaling. Sans déclaration, leurs décisions reposent sur des informations partielles.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Soigner la configuration des sondes.</strong> Les liveness et readiness probes conditionnent à la fois le self-healing et l'acheminement du trafic. Une configuration approximative dégrade ces deux fonctions simultanément.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Quand l'orchestration Kubernetes devient pertinente</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Aucune des cinq fonctions, prise isolément, ne justifie d'introduire Kubernetes dans un système. Un script de déploiement, un load balancer correctement configuré, un outil de monitoring avec restart automatique peuvent couvrir individuellement chacune d'elles. Ce qui justifie l'adoption d'un orchestrateur, c'est le moment où les cinq fonctions deviennent simultanément nécessaires sur une infrastructure suffisamment distribuée pour rendre les solutions ad hoc coûteuses à maintenir.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Concrètement, cela correspond à des architectures avec une dizaine de services ou plus, déployés sur plusieurs machines, avec des cycles de déploiement fréquents, des variations de charge significatives et des exigences de résilience qui ne tolèrent plus l'intervention manuelle. Pour des contextes plus contraints en ressources (edge, IoT, machines de développement, petits clusters), une<a href="https://www.clever.cloud/fr/blog/fonctionnalites/2026/05/28/k3s-vs-k8s-quelles-differences-et-lequel-choisir-en-2026/"> distribution Kubernetes allégée comme K3s peut convenir</a>.<a href="https://www.clever.cloud/fr/blog/engineering-fr/2025/03/05/quest-ce-qu-un-paas-platform-as-a-service/"> Un PaaS répond également à ces besoins</a>, comme à bien d'autres profils d'applications (déploiement industrialisé, scaling automatique, résilience, mises à jour), avec un modèle d'exploitation distinct de Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Lorsque Kubernetes devient pertinent, la question suivante porte rarement sur l'installation et plus souvent sur l'exploitation au quotidien : mises à jour du control plane, gestion d'etcd, rotation des certificats, observabilité, sauvegardes. C'est ce constat qui explique l'adoption croissante des services Kubernetes managés. Côté Clever Cloud, <a href="https://www.clever.cloud/fr/clever-kubernetes-engine/">Clever Kubernetes Engine</a> répond à ce besoin avec Materia etcd, une implémentation serverless de l'API etcd bâtie sur FoundationDB qui prend le relais de l'etcd standard, devenu un goulot d'étranglement à grande échelle, sur une infrastructure souveraine répartie sur nos trois datacenters parisiens.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">L'orchestration de conteneurs en synthèse</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>L'orchestration de conteneurs automatise plusieurs catégories de décisions opérationnelles, dont cinq grandes classes principales : où placer un conteneur, quand en démarrer plus, que faire quand l'un d'eux tombe, comment ils se trouvent entre eux, comment passer d'une version à la suivante sans interruption. Kubernetes regroupe ces fonctions sous un modèle unifié, ce qui en fait l'outil de référence pour les systèmes distribués qui en ont besoin simultanément. La question utile, face à un projet, n'est pas de savoir si on doit faire de l'orchestration, mais lesquelles de ces fonctions sont réellement nécessaires, et à quel niveau d'automatisation.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">FAQ - Kubernetes orchestration</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Quelle est la différence entre conteneurisation et orchestration ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La conteneurisation empaquette une application et ses dépendances dans un format standardisé exécutable de manière identique sur n'importe quel hôte compatible. L'orchestration automatise la gestion d'un parc de conteneurs en production : placement, scaling, self-healing, service discovery, mises à jour. Docker est l'outil de référence pour la première, Kubernetes pour la seconde.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Faut-il forcément Kubernetes pour orchestrer des conteneurs ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Non. Kubernetes est l'orchestrateur le plus largement adopté, mais d'autres existent : Nomad de HashiCorp, qui orchestre conteneurs, VM et binaires dans un même cluster, ou Docker Swarm, toujours maintenu mais dont l'adoption a reculé. Apache Mesos, longtemps cité comme alternative, a été retiré dans l'Apache Attic en octobre 2025 et n'est plus en développement actif. Par ailleurs, un PaaS comme Clever Cloud assure l'ensemble de ces fonctions d'orchestration (placement, scaling automatique, self-healing, rolling updates, service discovery) avec son propre control plane, indépendant de Kubernetes. C'est ce control plane qui orchestre aussi bien les applications exécutées en VM que les conteneurs du runtime Docker de la plateforme.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">L'orchestration de conteneurs est-elle nécessaire pour CI/CD ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Non, mais elle est souvent utilisée conjointement. Les pipelines CI/CD modernes produisent des images de conteneurs comme artefact final, et l'orchestrateur (Kubernetes ou autre) prend le relais pour déployer et exploiter ces images. CI/CD et orchestration sont deux étapes complémentaires du cycle de vie applicatif.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">K3s permet-il l'orchestration en environnement contraint ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Oui. K3s est une distribution Kubernetes certifiée CNCF, conçue pour les environnements aux ressources limitées (edge, IoT, machines de développement, petits clusters). Elle conserve les API standards de Kubernetes tout en réduisant l'empreinte ressources et la complexité de déploiement.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Un Kubernetes managé change-t-il les fonctions d'orchestration disponibles ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Non. Un Kubernetes managé fournit le même ensemble de fonctions d'orchestration qu'un cluster auto-hébergé, puisqu'il s'agit du même Kubernetes. La différence porte sur la répartition des responsabilités opérationnelles : le fournisseur prend en charge la gestion du control plane, les mises à jour, la supervision sous-jacente. Les utilisateurs se concentrent alors sur leurs workloads applicatifs.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Quelle est la fonction d'orchestration la plus difficile à maîtriser ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le réseau est fréquemment cité comme la plus complexe. Service discovery, load balancing interne, NetworkPolicies, Ingress, plugin CNI, observabilité du trafic est-ouest : la couche réseau de Kubernetes concentre une part significative des sujets opérationnels avancés et reste une source fréquente d'incidents en production.</p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="2500" height="1109" src="https://cdn.clever-cloud.com/uploads/2026/07/2026-07-02-clever-cloud-banniere-blog-kubernetes-orchestration-fr.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026.07.02 Clever Cloud Bannière Blog Kubernetes Orchestration FR" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/07/2026-07-02-clever-cloud-banniere-blog-kubernetes-orchestration-fr.png 2500w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-02-clever-cloud-banniere-blog-kubernetes-orchestration-fr-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-02-clever-cloud-banniere-blog-kubernetes-orchestration-fr-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-02-clever-cloud-banniere-blog-kubernetes-orchestration-fr-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-02-clever-cloud-banniere-blog-kubernetes-orchestration-fr-1536x681.png 1536w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-02-clever-cloud-banniere-blog-kubernetes-orchestration-fr-2048x908.png 2048w, https://cdn.clever-cloud.com/uploads/2026/07/2026-07-02-clever-cloud-banniere-blog-kubernetes-orchestration-fr-1368x607.png 1368w" sizes="auto, (max-width: 2500px) 100vw, 2500px" /></p><!-- wp:html -->
<style>
  .cc-table-wrap { overflow-x: auto; }
  .cc-table {
    width: 100%;
    border-collapse: collapse;
    table-layout: fixed;
    font-size: 17px;
    font-family: "Plus Jakarta Sans","PlusJakartaSans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;
    color: #111827;
  }
  .cc-table th,
  .cc-table td {
    text-align: left;
    padding: 12px 16px;
    vertical-align: top;
    line-height: 1.6;
  }
  .cc-table tbody tr + tr td,
  .cc-table tbody tr:first-child td {
    border-top: 1px solid #deddee;
  }
  .cc-table th + th,
  .cc-table td + td {
    border-left: 1px solid #deddee;
  }
  .cc-table thead th {
    font-weight: 700;
    text-align: center;
  }
  .cc-table th:nth-child(1),
  .cc-table td:nth-child(1) { width: 28%; }
  .cc-table th:nth-child(2),
  .cc-table td:nth-child(2) { width: 36%; }
  .cc-table th:nth-child(3),
  .cc-table td:nth-child(3) { width: 36%; }
</style>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>C'est une fonction distincte de la conteneurisation elle-même, qui consiste à empaqueter une application avec ses dépendances dans un format standard. Les<a href="https://www.clever.cloud/fr/blog/fonctionnalites/2026/05/22/kubernetes-vs-docker-quelles-differences-et-quand-les-utiliser/"> différences entre Docker et Kubernetes</a> reposent précisément sur cette distinction : Docker fabrique et exécute les conteneurs, Kubernetes les orchestre. Aujourd'hui, Kubernetes est l'orchestrateur de référence, mais l'orchestration en tant que concept existe indépendamment de l'outil qui la met en œuvre.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Pourquoi l'orchestration existe ?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Faire tourner trois conteneurs sur un serveur ne demande pas d'orchestration. On démarre, on supervise à l'œil, on redémarre à la main si quelque chose plante. Le problème change de nature à partir du moment où une application devient un système distribué : plusieurs services, plusieurs machines, du trafic variable, des déploiements fréquents. Les questions opérationnelles qui apparaissent alors sont concrètes. Sur quelle machine placer ce nouveau conteneur ? Que faire si un nœud tombe la nuit ? Comment passer de la version 1.4 à la 1.5 sans interruption visible ? Comment un service interne en trouve un autre quand les adresses IP changent à chaque redémarrage ?</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Chacune de ces questions a une réponse manuelle possible, scriptable même. L'orchestration consiste à les automatiser de manière cohérente, sous un modèle unique.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Les cinq fonctions principales de l'orchestration</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Kubernetes traite ces questions via un<a href="https://www.clever.cloud/fr/blog/engineering-fr/2026/05/19/k8s-kubernetes-definition-standard/"> modèle déclaratif construit sur des boucles de réconciliation</a> : on décrit l'état souhaité du système, et l'orchestrateur compare en permanence cet état désiré à l'état réel pour les rapprocher. Les cinq fonctions qui suivent sont des instanciations de ce mécanisme général.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Scheduling : placer les conteneurs sur les bonnes machines</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le scheduling répond à une question : quand un nouveau conteneur doit démarrer, sur quelle machine du cluster doit-il s'exécuter ? Sur un cluster de quelques nœuds aux profils homogènes, la décision est triviale. Sur un cluster réel, elle ne l'est pas : certaines machines ont du GPU, d'autres pas, certaines sont déjà chargées, certaines applications doivent être isolées, d'autres doivent au contraire être co-localisées pour des raisons de latence.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le composant kube-scheduler effectue ce choix en deux étapes : filtering, qui élimine les nœuds qui ne peuvent pas accueillir le pod (capacité insuffisante, contraintes d'affinité, taints et tolerations), et scoring, qui note les nœuds restants selon plusieurs critères. Le pod est ensuite assigné au nœud retenu via une opération de binding auprès de l'API server. La qualité de la décision dépend des informations fournies au scheduler. Ce sont les requests de ressources déclarées sur les pods qui déterminent le placement : le scheduler cherche un nœud dont la capacité disponible couvre ces requests. Les limits, elles, ne servent pas au placement mais plafonnent la consommation d'un conteneur une fois qu'il tourne.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Scaling : ajuster la capacité au trafic réel</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le scaling automatise une décision simple à formuler : combien de copies d'un service doivent tourner à un instant donné ? Trop de copies coûte cher. Trop peu provoque des incidents au moindre pic.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le scaling est une fonction commune à tous les orchestrateurs ; les mécanismes varient selon l'implémentation. Dans Kubernetes, il repose sur trois briques distinctes. Le Horizontal Pod Autoscaler (HPA), inclus dans le cœur de Kubernetes, ajuste le nombre de pods d'un déploiement en fonction d'une métrique. Il s'appuie pour cela sur le Metrics Server, un composant à installer séparément, car la collecte de métriques n'est pas fournie par défaut. Le Vertical Pod Autoscaler (VPA), livré lui aussi comme projet séparé, ajuste les ressources allouées à chaque pod. Le Cluster Autoscaler, enfin, ajoute ou retire des nœuds entiers selon les besoins agrégés. Ces mécanismes supposent des métriques fiables : un HPA piloté sur le CPU, alors que le service est en réalité contraint par les I/O disque, ne produit pas le résultat attendu.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Self-healing : remplacer ce qui tombe</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>À partir d'un certain nombre de machines, les pannes ne sont plus des événements exceptionnels mais une donnée d'arrière-plan. Un disque défaille, un kernel panic survient, un conteneur fuit de la mémoire et finit OOM-killed. Sans orchestration, chaque panne déclenche une intervention humaine, plus ou moins urgente. Avec orchestration, ces événements sont absorbés sans intervention.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Au sein de Kubernetes, le mécanisme repose sur deux éléments. D'abord, des sondes (liveness, readiness, startup) qui lui&nbsp; permettent de savoir si un conteneur fonctionne réellement, et pas seulement s'il a démarré. Ensuite, le principe que tout objet géré par un controller (Deployment, StatefulSet, DaemonSet) est en permanence comparé à l'état désiré : si un pod disparaît, le controller en demande un nouveau. La précision des sondes conditionne la qualité du self-healing : des sondes trop strictes provoquent des redémarrages inutiles, des sondes trop laxistes laissent passer des conteneurs cassés.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Service discovery et load balancing interne</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Dans un parc de conteneurs en mouvement, où chaque pod a une adresse IP éphémère, deux services qui doivent communiquer ne peuvent pas s'appuyer sur des configurations IP statiques. Le service discovery résout ce problème par une couche d'indirection. Dans Kubernetes, un objet Service regroupe un ensemble de pods (sélectionnés par labels) sous un nom DNS stable et une IP virtuelle. CoreDNS, le serveur DNS interne du cluster, résout ces noms. Le trafic envoyé à l'IP du Service est distribué entre les pods prêts via kube-proxy. Ce principe n'est pas propre à Kubernetes : d'autres orchestrateurs répondent au même besoin autrement. Sur Clever Cloud, par exemple, les services se découvrent via l'injection de configuration entre applications et via les Network Groups, un réseau privé chiffré doté d'une résolution DNS interne.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Plusieurs types de Services existent (ClusterIP pour l'interne, NodePort et LoadBalancer pour l'externe), auxquels s'ajoute la notion d'Ingress pour le routage HTTP au niveau applicatif. Cette couche réseau, simple en apparence, contient une part substantielle de la complexité d'exploitation de Kubernetes : choix du plugin CNI, politiques réseau, observabilité du trafic est-ouest.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Rolling updates et rollbacks</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Mettre en production une nouvelle version sans interrompre le service est une opération risquée si elle est faite à la main. Kubernetes la traite comme une transition d'état : on modifie le manifeste du Deployment pour pointer vers la nouvelle version d'image, et le controller applique la stratégie de rollout configurée.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La stratégie RollingUpdate (par défaut) remplace progressivement les anciens pods par des nouveaux, en garantissant qu'un nombre minimal reste disponible à tout moment. La stratégie Recreate arrête tout puis redémarre, utile pour des migrations de schéma incompatibles. En cas d'échec, le rollout ne revient pas seul à l'état antérieur : il s'interrompt, les nouveaux pods qui échouent aux sondes ne remplacent pas les anciens, et c'est un opérateur qui déclenche le retour à la version précédente avec kubectl rollout undo. La condition pour que cela fonctionne est que les versions soient compatibles entre elles pendant la transition, ce qui implique une discipline côté contrats d'API et migrations de base de données.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Au-delà des cinq fonctions de base</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>L'orchestration de Kubernetes ne se limite pas à ces cinq fonctions. En pratique, un cluster Kubernetes en production gère aussi la configuration applicative (ConfigMaps), les secrets (avec ou sans chiffrement au repos), le stockage persistant via les PersistentVolumeClaims, l'autorisation (RBAC), l'isolation réseau (NetworkPolicies), l'observabilité (logs, métriques, traces), et la gestion du cycle de vie des certificats. Chacune de ces fonctions est elle-même une responsabilité opérationnelle qui s'ajoute au socle.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Sans orchestrateur vs avec Kubernetes : comparaison fonction par fonction</h2>
<!-- /wp:heading -->

<!-- wp:spacer {"height":"25px"} -->
<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:html -->
<div class="cc-table-wrap">
  <table class="cc-table">
    <thead>
      <tr>
        <th>Fonction</th>
        <th>Sans orchestrateur</th>
        <th>Avec Kubernetes</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Scheduling</td>
        <td>Placement manuel ou scripts d'allocation custom</td>
        <td>kube-scheduler avec contraintes déclaratives</td>
      </tr>
      <tr>
        <td>Scaling</td>
        <td>Provisioning manuel ou règles externes</td>
        <td>HPA, VPA, Cluster Autoscaler</td>
      </tr>
      <tr>
        <td>Self-healing</td>
        <td>Supervision externe et scripts de redémarrage</td>
        <td>Sondes intégrées et controllers</td>
      </tr>
      <tr>
        <td>Service discovery</td>
        <td>Fichiers de configuration, Consul, etcd à part</td>
        <td>Services et DNS interne natifs</td>
      </tr>
      <tr>
        <td>Rolling updates</td>
        <td>Scripts de déploiement custom et bascule manuelle de load balancer</td>
        <td>Deployment controller et stratégies déclaratives</td>
      </tr>
    </tbody>
  </table>
</div>
<!-- /wp:html -->

<!-- wp:spacer {"height":"25px"} -->
<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:paragraph -->
<p>Le tableau ne hiérarchise pas les deux colonnes. Il montre que Kubernetes fournit un modèle unifié pour ces cinq fonctions, là où une approche sans orchestrateur les traite séparément avec des outils différents. Pour un système qui n'a pas besoin de cette unification, la colonne de gauche reste pertinente.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Pratiques fréquentes à connaître</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>Choisir l'outil en fonction du besoin, pas par défaut.</strong> Toutes les applications n'ont pas besoin de scheduling, de scaling automatique ou de service discovery au niveau qu'offre Kubernetes. Un PaaS, un déploiement sur VM, ou un binaire systemd répondent à de nombreux besoins avec un autre modèle d'exploitation.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Penser l'observabilité dès le départ.</strong> Un cluster Kubernetes sans logs centralisés, sans métriques agrégées et sans traces devient rapidement difficile à exploiter au-delà de quelques services. L'observabilité fait partie intégrante de l'orchestration, pas d'un ajout optionnel.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Définir </strong><strong>requests</strong><strong> et </strong><strong>limits</strong><strong> avant d'activer l'autoscaling.</strong> Le HPA et le Cluster Autoscaler s'appuient sur les ressources déclarées des pods pour décider du scaling. Sans déclaration, leurs décisions reposent sur des informations partielles.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Soigner la configuration des sondes.</strong> Les liveness et readiness probes conditionnent à la fois le self-healing et l'acheminement du trafic. Une configuration approximative dégrade ces deux fonctions simultanément.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Quand l'orchestration Kubernetes devient pertinente</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Aucune des cinq fonctions, prise isolément, ne justifie d'introduire Kubernetes dans un système. Un script de déploiement, un load balancer correctement configuré, un outil de monitoring avec restart automatique peuvent couvrir individuellement chacune d'elles. Ce qui justifie l'adoption d'un orchestrateur, c'est le moment où les cinq fonctions deviennent simultanément nécessaires sur une infrastructure suffisamment distribuée pour rendre les solutions ad hoc coûteuses à maintenir.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Concrètement, cela correspond à des architectures avec une dizaine de services ou plus, déployés sur plusieurs machines, avec des cycles de déploiement fréquents, des variations de charge significatives et des exigences de résilience qui ne tolèrent plus l'intervention manuelle. Pour des contextes plus contraints en ressources (edge, IoT, machines de développement, petits clusters), une<a href="https://www.clever.cloud/fr/blog/fonctionnalites/2026/05/28/k3s-vs-k8s-quelles-differences-et-lequel-choisir-en-2026/"> distribution Kubernetes allégée comme K3s peut convenir</a>.<a href="https://www.clever.cloud/fr/blog/engineering-fr/2025/03/05/quest-ce-qu-un-paas-platform-as-a-service/"> Un PaaS répond également à ces besoins</a>, comme à bien d'autres profils d'applications (déploiement industrialisé, scaling automatique, résilience, mises à jour), avec un modèle d'exploitation distinct de Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Lorsque Kubernetes devient pertinent, la question suivante porte rarement sur l'installation et plus souvent sur l'exploitation au quotidien : mises à jour du control plane, gestion d'etcd, rotation des certificats, observabilité, sauvegardes. C'est ce constat qui explique l'adoption croissante des services Kubernetes managés. Côté Clever Cloud, <a href="https://www.clever.cloud/fr/clever-kubernetes-engine/">Clever Kubernetes Engine</a> répond à ce besoin avec Materia etcd, une implémentation serverless de l'API etcd bâtie sur FoundationDB qui prend le relais de l'etcd standard, devenu un goulot d'étranglement à grande échelle, sur une infrastructure souveraine répartie sur nos trois datacenters parisiens.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">L'orchestration de conteneurs en synthèse</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>L'orchestration de conteneurs automatise plusieurs catégories de décisions opérationnelles, dont cinq grandes classes principales : où placer un conteneur, quand en démarrer plus, que faire quand l'un d'eux tombe, comment ils se trouvent entre eux, comment passer d'une version à la suivante sans interruption. Kubernetes regroupe ces fonctions sous un modèle unifié, ce qui en fait l'outil de référence pour les systèmes distribués qui en ont besoin simultanément. La question utile, face à un projet, n'est pas de savoir si on doit faire de l'orchestration, mais lesquelles de ces fonctions sont réellement nécessaires, et à quel niveau d'automatisation.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">FAQ - Kubernetes orchestration</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Quelle est la différence entre conteneurisation et orchestration ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La conteneurisation empaquette une application et ses dépendances dans un format standardisé exécutable de manière identique sur n'importe quel hôte compatible. L'orchestration automatise la gestion d'un parc de conteneurs en production : placement, scaling, self-healing, service discovery, mises à jour. Docker est l'outil de référence pour la première, Kubernetes pour la seconde.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Faut-il forcément Kubernetes pour orchestrer des conteneurs ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Non. Kubernetes est l'orchestrateur le plus largement adopté, mais d'autres existent : Nomad de HashiCorp, qui orchestre conteneurs, VM et binaires dans un même cluster, ou Docker Swarm, toujours maintenu mais dont l'adoption a reculé. Apache Mesos, longtemps cité comme alternative, a été retiré dans l'Apache Attic en octobre 2025 et n'est plus en développement actif. Par ailleurs, un PaaS comme Clever Cloud assure l'ensemble de ces fonctions d'orchestration (placement, scaling automatique, self-healing, rolling updates, service discovery) avec son propre control plane, indépendant de Kubernetes. C'est ce control plane qui orchestre aussi bien les applications exécutées en VM que les conteneurs du runtime Docker de la plateforme.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">L'orchestration de conteneurs est-elle nécessaire pour CI/CD ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Non, mais elle est souvent utilisée conjointement. Les pipelines CI/CD modernes produisent des images de conteneurs comme artefact final, et l'orchestrateur (Kubernetes ou autre) prend le relais pour déployer et exploiter ces images. CI/CD et orchestration sont deux étapes complémentaires du cycle de vie applicatif.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">K3s permet-il l'orchestration en environnement contraint ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Oui. K3s est une distribution Kubernetes certifiée CNCF, conçue pour les environnements aux ressources limitées (edge, IoT, machines de développement, petits clusters). Elle conserve les API standards de Kubernetes tout en réduisant l'empreinte ressources et la complexité de déploiement.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Un Kubernetes managé change-t-il les fonctions d'orchestration disponibles ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Non. Un Kubernetes managé fournit le même ensemble de fonctions d'orchestration qu'un cluster auto-hébergé, puisqu'il s'agit du même Kubernetes. La différence porte sur la répartition des responsabilités opérationnelles : le fournisseur prend en charge la gestion du control plane, les mises à jour, la supervision sous-jacente. Les utilisateurs se concentrent alors sur leurs workloads applicatifs.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Quelle est la fonction d'orchestration la plus difficile à maîtriser ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le réseau est fréquemment cité comme la plus complexe. Service discovery, load balancing interne, NetworkPolicies, Ingress, plugin CNI, observabilité du trafic est-ouest : la couche réseau de Kubernetes concentre une part significative des sujets opérationnels avancés et reste une source fréquente d'incidents en production.</p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Sōzu 2.0 : du reverse proxy à l&#8217;edge programmable</title>
		<link>https://www.clever.cloud/fr/blog/engineering-fr/2026/05/29/sozu-2-0-reverse-proxy-edge-programmable/</link>
		
		<dc:creator><![CDATA[Florentin Dubois]]></dc:creator>
		<pubDate>Fri, 29 May 2026 15:15:50 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[reverse proxy]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=24438</guid>

					<description><![CDATA[<p><img width="2499" height="1109" src="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-fr.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026.05.29 Clever Cloud Bannière Blog Sōzu 2.0 FR" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-fr.png 2499w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-fr-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-fr-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-fr-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-fr-1536x682.png 1536w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-fr-2048x909.png 2048w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-fr-1368x607.png 1368w" sizes="auto, (max-width: 2499px) 100vw, 2499px" /></p><!-- wp:paragraph -->
<p>Cette version marque une étape : la mécanique sous-jacente est désormais prête à accueillir les fonctionnalités produit que nous voulons bâtir au-dessus. Plutôt qu'une liste de correctifs, nous avons regroupé le travail en six thèmes ; pour chacun, nous disons deux choses — ce qui a été livré, et ce que cela rend possible, pour celles et ceux qui font tourner leurs applications sur la plateforme comme pour les opérateurs qui exécutent Sōzu sur leur propre infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">1. Un multiplexer HTTP/2 réécrit intégralement</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La pile HTTP/1 de Sōzu avait déjà été réécrite autour de <strong>kawa</strong>, notre format pivot : une représentation interne du message HTTP indépendante de sa version, dans le même esprit que le format HTX de HAProxy. Le multiplexer HTTP/2 en est le prolongement naturel — il étend kawa avec la gestion des sessions et le multiplexing des streams.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Il couvre l'intégralité de la matrice des protocoles (H1↔H1, H1↔H2, H2↔H1, H2↔H2), avec un état de stream partagé, la compression HPACK assurée par loona-hpack, le pooling des connexions HTTP/2 vers les backends, la priorisation des streams selon <a href="https://datatracker.ietf.org/doc/html/rfc9218">RFC 9218</a> Extensible Priorities, et la négociation ALPN par listener, afin que chaque connexion TLS aboutisse sur le bon chemin de code. Environ 181 tests end-to-end et deux cibles de fuzzing (cargo-fuzz) maintiennent le parser et le décodeur HPACK dans le droit chemin — dont des garde-fous de régression qui vérifient octet pour octet l'intégrité des réponses volumineuses sur un trajet « backend HTTP/1 → frontend HTTP/2 », précisément la frontière où se cachent les bugs de readiness en mode edge-triggered d'epoll.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour les clients Clever Cloud, l'incidence concrète est simple : <strong>chaque application servie par la plateforme parle désormais HTTP/2 par défaut, côté frontend</strong> — aucun opt-in, aucune modification de code, aucune configuration. L'activation du HTTP/2 jusqu'au backend reste un choix par cluster — un <em>cluster</em>, dans le modèle de Sōzu, étant l'une de vos applications ; activée de bout en bout, elle débloque notamment gRPC sur toute la chaîne. Les pages s'affichent en moins de connexions TCP ; les navigateurs peuvent mutualiser les requêtes entre les hôtes qui partagent un certificat (nous honorons le SAN coalescing décrit dans la <a href="https://datatracker.ietf.org/doc/html/rfc7540">RFC 7540 §9.1.1</a> : lorsque le certificat, l'autorité d'origine et les conditions de connexion s'y prêtent, Firefox et Chrome peuvent réutiliser une seule connexion vers vos cdn.example.com et assets.example.com au lieu d'en ouvrir plusieurs en parallèle). Il s'agit, au meilleur sens du terme, d'une mise à niveau silencieuse de la plateforme.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est aussi le prérequis structurel pour la suite — HTTP/3 sur QUIC et des fondations de streaming plus solides à l'edge. La réécriture du multiplexer est la pièce de la roadmap qui devait advenir en premier.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">2. La sécurité pour socle, non comme option</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La seconde moitié de la réécriture HTTP/2 est celle dont personne ne réclame l'existence tant qu'elle ne fait pas défaut : la résistance aux floods et aux attaques par déni de service. Sōzu 2.0 embarque des mitigations natives pour les vulnérabilités <a href="https://nvd.nist.gov/vuln/detail/CVE-2023-44487"><strong>CVE-2023-44487</strong></a><strong> (Rapid Reset)</strong>, <a href="https://nvd.nist.gov/vuln/detail/CVE-2024-27316"><strong>CVE-2024-27316</strong></a><strong> (CONTINUATION flood)</strong>, <a href="https://nvd.nist.gov/vuln/detail/CVE-2025-8671"><strong>CVE-2025-8671</strong></a><strong> (MadeYouReset)</strong>, ainsi que pour la famille PING / SETTINGS / empty-DATA des <a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9512">CVE-2019-9512</a>/<a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9515">CVE-2019-9515</a>/<a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9518">CVE-2019-9518</a>. Chaque mitigation expose un counter dédié — douze métriques sous h2.flood.violation.* — afin qu'un SIEM puisse mesurer en fenêtre glissante le taux de déclenchement, sans avoir à parser les logs. Dix-sept motifs de rejet HPACK sont exposés selon le même principe ; il s'agit du premier signal observable côté opérateur pour les tentatives de request smuggling contre la pile HTTP/2.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le reste du travail de sécurité se déploie à travers le proxy : un plafond de connexions par couple (cluster, IP source) assorti d'une réponse 429 Too Many Requests ; une éviction optionnelle des sessions les plus anciennes lorsque l'accept queue sature ; un durcissement du command channel, du parser HTTP/1, du pattern-trie router (fermeture d'un contournement de routing via regex non ancrées) et du wildcard matcher ; un assainissement du pipeline d'audit contre les séquences <a href="https://nvd.nist.gov/vuln/detail/CVE-2021-42574">Trojan-Source</a> et le SIEM column-smuggling ; et une rotation à chaud des certificats TLS qui <strong>ne laisse jamais tomber le certificat fonctionnel en cas d'échec</strong>, quand bien même le nouveau serait malformé. Quatre security advisories de dépendances purgées au cours de la même fenêtre.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Chaque mutation privilégiée atterrit désormais dans un journal d'audit structuré : chaque action du plan de contrôle est consignée sous la forme d'une ligne Command(verb=…, actor_uid=…, actor_user=…, result=…) — qui a fait quoi, depuis où, et avec quel résultat. Deux sinks dédiés l'exportent : audit_logs_target pour le flux lisible, et audit_logs_json_target pour un objet JSON à schéma stable par ligne, de sorte que la piste se déverse directement dans un SIEM (Wazuh, Elastic, Loki, Splunk) sans parser sur mesure — dans un format pensé pour PCI-DSS 10.5.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le cadrage produit est limpide : <strong>notre métier, c'est d'opérer la plateforme et de protéger vos applications dès que nous le pouvons</strong>. Lorsque la prochaine vulnérabilité HTTP/2 de cette classe paraît un vendredi à vingt-et-une heures, elle n'a pas à se traduire par un week-end de correctifs et de redéploiements sur des milliers d'applications : les attaques de cette classe sont largement absorbées ou atténuées au niveau du proxy, un counter s'incrémente sur un dashboard, et les applications continuent de servir leur trafic. Le « trust-by-default » n'est pas un slogan : c'est l'effet cumulé de dizaines de petits correctifs défensifs, livrés à la couche où la frontière de sécurité se joue véritablement.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">3. De la visibilité à chaque couche</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>L'ajout le plus visible pour l'utilisateur en 2.0 est <strong>sozu top</strong> — une TUI opérateur (derrière le feature flag Cargo tui) qui offre une vue en temps réel, à la manière de btop ou htop, sur sept panes : Overview, Clusters, Backends, Listeners, H2, Certificates, Events. Palette accessible aux personnes daltoniennes, thèmes personnalisables : l'essentiel tient dans un terminal, sans dashboard externe.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Sous la TUI, la surface des métriques elle-même a été refondue. Le multiplexer expose des counters par type de frame et par code d'erreur <a href="https://datatracker.ietf.org/doc/html/rfc9113">RFC 9113</a>, la télémétrie des handshakes TLS, des counters HTTP par status code, et de nouvelles gauges de cycle de vie du worker. L'access log gagne les champs TLS et de forwarding (version, cipher, SNI, ALPN, chaîne XFF), la propagation x_request_id de bout en bout, ainsi que les RTT client et serveur — de quoi corréler une requête d'un hop à l'autre.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Une nouvelle commande, SetMetricDetail, permet à un opérateur d'élever à la demande la cardinalité des métriques, via un lease à durée limitée qui expire : la production reste à faible cardinalité par défaut, et l'inspection fine devient une décision ponctuelle plutôt qu'une réécriture de configuration.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour Clever Cloud, c'est le socle du <strong>prochain chapitre de l'observabilité tournée vers le client</strong> — percentiles de latence par application, disponibilité par cluster, décomposition des handshakes TLS, request IDs traçables d'un hop à l'autre. Les métriques existent désormais au niveau du proxy. L'étape suivante consiste à les exposer dans la console Clever Cloud, à leur juste place, aux côtés des vues de build et de déploiement — afin qu'aucun APM externe ne soit nécessaire pour comprendre le trafic que votre application reçoit véritablement.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">4. Des policies de trafic enfin actionnables d'un geste</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Sōzu 2.0 refond l'intégralité de la surface des policies côté frontend (#1231) : <strong>HSTS typé</strong> (<a href="https://datatracker.ietf.org/doc/html/rfc6797">RFC 6797</a>), configurable par listener et par frontend ; <strong>URL rewrite</strong> (host, path, port) avec propagation des regex captures depuis le routing trie vers les rewrite templates ; <strong>réécriture des headers</strong> de requête et de réponse par frontend — ajouter, modifier ou supprimer n'importe quel header (une valeur vide le supprime, parité avec le del-header de HAProxy), avec en complément l'injection de X-Real-IP au niveau listener et l'élision anti-spoofing des valeurs fournies par le client ; <strong>redirects HTTP 301 / 302 / 308</strong> au travers d'une enum typée RedirectPolicy ; et l'<strong>authentification HTTP Basic</strong> par frontend, avec des credentials hashés en SHA-256 et une comparaison constant-time assurée par la crate subtle (le credential boundary est durci contre les side-channels temporels — la code review l'avait identifié).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est la partie de la release où l'opportunité produit est la plus saillante. Aujourd'hui, mener une migration de domaine propre sur une plateforme managée requiert typiquement soit un backend sachant rediriger, soit un service de redirection déployé en parallèle ; placer une URL de preview derrière un mot de passe requiert typiquement un add-on d'authentification. <strong>Avec Sōzu 2.0, ces usages deviennent des boutons sur le proxy.</strong> La plomberie existe ; ce qu'il reste à accomplir, c'est d'exposer ces boutons dans la console Clever Cloud — sous la forme d'une case à cocher sur un domaine, ou d'un toggle à clic unique pour les preview environments. C'est la surface no-code de contrôle du trafic que nous voulons construire ensuite.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">5. L'exploitation comme bénéfice pour le client</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Une réécriture de cette profondeur ne se livre sereinement que si la flotte demeure en mouvement en dessous. L'exploitation au quotidien a reçu une attention particulière en 2.0.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>sozu listener {http,https,tcp} update est un nouveau patch verb field-masked qui ajuste à la volée les paramètres d'un listener modifiables sans recycler les sockets sous-jacents : seuils de flood HTTP/2, SNI binding, préférence ALPN, idle timeouts, HSTS, custom answers. <strong>Les mitigations CVE peuvent désormais être resserrées sous attaque sans recycler les sockets d'écoute.</strong> Les health checks actifs des backends s'exécutent à l'intérieur de la loop d'événements mio existante (aucun scheduler async, aucun thread supplémentaire), avec des sondes HTTP/1.1 et HTTP/2, des intervalles dotés d'un léger jitter, et un fail-open path qui achemine à travers les backends au statut Normal dont la retry policy l'autorise. L'intégration systemd (qui clôt #228) effectue enfin ce qu'il convient : des units Type=notify, un READY=1 envoyé seulement après la création des workers initiaux et le replay de l'état sauvegardé, un STOPPING=1 lors du graceful shutdown, un MAINPID=&lt;nouveau&gt; lors des hot upgrades.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les releases elles-mêmes ont changé de forme. Pousser un tag produit désormais <strong>dix tarballs pré-compilés</strong> (trois cibles Linux croisées avec jusqu'à quatre crypto providers), signés keyless via sigstore (cosign + GitHub OIDC), accompagnés d'une attestation SLSA build provenance et d'un pointeur SOURCE.txt vers le code source correspondant satisfaisant l'AGPL §6 et la LGPL §4 — refermant ainsi l'écart noté dans #1089. Les fichiers fullchain.pem ACME se chargent à présent proprement, y compris lorsque le client a émis le leaf en tête de chaîne (Certbot, lego, acme.sh) ; une race condition vieille de six ans sur l'auto-restart des workers (#515) est corrigée par pinning de l'inode original au moyen de /proc/self/fd. Le verbe IPC LoadState demeure forward-compatible avec les clients sozu-command-lib 1.1.1, de sorte que l'écosystème d'intégrations ne se brise pas lors de l'upgrade.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>À l'échelle de Clever Cloud, le coût d'un incident d'exploitation ne se mesure pas en tickets — il s'agit d'une latence qui s'accumule sur des milliers d'applications, et du temps d'ingénierie que nous devons à la construction de l'étape suivante. <strong>Sōzu 2.0 est le proxy qui se laisse exploiter en silence, et cette tranquillité est ce que les clients vivent comme de l'uptime.</strong> C'est également ce qui rend Sōzu crédible comme outil que l'on peut exécuter sur sa propre infrastructure : binaires signés, hot reloads, particularités ACME absorbées, intégration systemd menée correctement.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">6. Une crypto prête pour demain</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La pile TLS a reçu une refonte plus discrète, mais d'égale importance (#1191). Sōzu prend désormais en charge <strong>quatre crypto providers pluggables</strong> pour rustls : crypto-ring (par défaut), crypto-aws-lc-rs, crypto-openssl, et fips (qui implique aws-lc-rs en mode FIPS). Les quatre sont exercés par la CI, et la precedence chain fips &gt; ring &gt; aws-lc-rs &gt; openssl résout le provider actif de manière déterministe lorsque plusieurs features sont activées simultanément.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ce dont nous sommes le plus satisfaits, en revanche, est le groups_list par défaut : <strong>X25519MLKEM768</strong><strong> est désormais le groupe d'échange de clés en première préférence</strong> lorsque le provider le prend en charge. Il s'agit de l'hybride post-quantique en cours de normalisation à l'IETF (<a href="https://datatracker.ietf.org/doc/html/draft-ietf-tls-ecdhe-mlkem">draft-ietf-tls-ecdhe-mlkem</a>), déjà enregistré dans le registre TLS de l'IANA ; en pratique, cela signifie qu'un client uniquement compatible X25519 et un client post-quantum négocient l'un comme l'autre l'échange le plus robuste mutuellement pris en charge, sans aucune action de l'opérateur.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Lorsque la transition post-quantique deviendra une exigence réglementaire — selon un calendrier dont l'industrie débat encore — <strong>les fondations seront déjà en place sur Clever Cloud</strong> : tout client TLS 1.3 qui propose l'hybride le négocie dès aujourd'hui, sans action de l'opérateur. Nous avons effectué ce choix en silence, et nous l'avons inscrit par défaut.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Du reverse proxy à l'edge programmable</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Sōzu a toujours été un <strong>load balancer d'infrastructure</strong> : bien au-delà du HTTP, il équilibre aussi du TCP brut, avec un chemin de forwarding zéro-copie via splice(2) sous Linux pour les listeners TCP. Avec la 2.0, il se rapproche d'une <strong>API gateway</strong> et devient le substrat d'un <strong>edge programmable</strong> — et « programmable » est le mot qui compte. Chaque capacité décrite ci-dessus (HTTP/2 par défaut, contrôles anti-abus, observabilité, policies de trafic, crypto agility, calme opérationnel) est un bouton. L'année qui vient de la roadmap Clever Cloud consiste à exposer ces boutons sous la forme de features produit : à travers la console, à travers l'API, à travers les workflows que vous utilisez déjà pour déployer vos applications.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Voilà ce que nous voulons dire lorsque nous affirmons que Sōzu 2.0 est un premier pas vers quelque chose de plus grand. La 2.0 n'est pas la destination — c'est la plateforme sur laquelle nous bâtissons désormais. Le HTTP/2 managé, partout, en constitue la première brique. La deuxième : une console permettant d'activer HSTS, de protéger par mot de passe un preview environment, ou de rediriger un domaine migré. L'aboutissement — un edge entièrement programmable, doté de policy primitives que vous composez — est ce vers quoi nous bâtissons au fil du prochain release cycle.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Deux chantiers sont déjà sur l'établi. D'abord, un volet <strong>load balancing UDP</strong> — dans l'esprit d'IPVS, mais avec le rechargement à chaud propre à Sōzu — assorti de <strong>health checks TCP</strong> pour valider la disponibilité des backends UDP ; de quoi ancrer un peu plus le rôle de load balancer d'infrastructure. Ensuite, des <strong>backends joignables en HTTPS</strong>, qui consolident la connectivité amont et ouvrent la voie à l'API gateway.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Sōzu est un projet open source publié sous AGPL-3.0 (la command library est diffusée sous LGPL-3.0). Les binaires de la version 2.0 sont signés via sigstore et embarquent une attestation SLSA ; si vous opérez votre propre edge, cette version vous appartient : à utiliser, à auditer, à étendre. Le code, l'issue tracker, et les conversations vivent à l'adresse <a href="https://github.com/sozu-proxy/sozu">github.com/sozu-proxy/sozu</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous remercions les contributeurs qui ont rendu cette release possible — ainsi que toutes celles et ceux qui exécutent Sōzu en production, dont les retours guident la suite.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Références</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Standards et spécifications</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>RFC 6797</strong> — HTTP Strict Transport Security (HSTS). <a href="https://datatracker.ietf.org/doc/html/rfc6797">https://datatracker.ietf.org/doc/html/rfc6797</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>RFC 7540</strong> — Hypertext Transfer Protocol Version 2 (HTTP/2). Désormais obsolétée par la RFC 9113, mais le §9.1.1 sur le connection coalescing demeure la citation reprise par la RFC 9113. <a href="https://datatracker.ietf.org/doc/html/rfc7540">https://datatracker.ietf.org/doc/html/rfc7540</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>RFC 9113</strong> — HTTP/2 (en vigueur). §5 streams, §6 frames, §6.8 GOAWAY, §7 codes d'erreur, §8.1 sémantique HTTP. <a href="https://datatracker.ietf.org/doc/html/rfc9113">https://datatracker.ietf.org/doc/html/rfc9113</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>RFC 9218</strong> — Extensible Prioritization Scheme for HTTP. <a href="https://datatracker.ietf.org/doc/html/rfc9218">https://datatracker.ietf.org/doc/html/rfc9218</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>draft-ietf-tls-ecdhe-mlkem</strong> — Hybrid key exchange in TLS 1.3 : X25519MLKEM768 (Internet-Draft IETF, enregistré à l'IANA ; l'hybride post-quantique que Sōzu privilégie par défaut). <a href="https://datatracker.ietf.org/doc/html/draft-ietf-tls-ecdhe-mlkem">https://datatracker.ietf.org/doc/html/draft-ietf-tls-ecdhe-mlkem</a></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">CVE</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>CVE-2019-9512</strong> — HTTP/2 Ping Flood. <a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9512">https://nvd.nist.gov/vuln/detail/CVE-2019-9512</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2019-9515</strong> — HTTP/2 Settings Flood. <a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9515">https://nvd.nist.gov/vuln/detail/CVE-2019-9515</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2019-9518</strong> — HTTP/2 Empty Frames Flood. <a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9518">https://nvd.nist.gov/vuln/detail/CVE-2019-9518</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2021-42574</strong> — Trojan Source (bidirectional override). <a href="https://nvd.nist.gov/vuln/detail/CVE-2021-42574">https://nvd.nist.gov/vuln/detail/CVE-2021-42574</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2023-44487</strong> — HTTP/2 Rapid Reset. <a href="https://nvd.nist.gov/vuln/detail/CVE-2023-44487">https://nvd.nist.gov/vuln/detail/CVE-2023-44487</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2024-27316</strong> — HTTP/2 CONTINUATION Flood. <a href="https://nvd.nist.gov/vuln/detail/CVE-2024-27316">https://nvd.nist.gov/vuln/detail/CVE-2024-27316</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2025-8671</strong> — MadeYouReset (HTTP/2). <a href="https://nvd.nist.gov/vuln/detail/CVE-2025-8671">https://nvd.nist.gov/vuln/detail/CVE-2025-8671</a></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Pour aller plus loin</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>Cloudflare</strong> — <em>HTTP/2 Rapid Reset: deconstructing the record-breaking attack</em>. Le compte rendu canonique de la divulgation coordonnée d'octobre 2023, incluant la mécanique de l'attaque ainsi que le pic de 398 millions de rps capturé en direct. <a href="https://blog.cloudflare.com/technical-breakdown-http2-rapid-reset-ddos-attack/">https://blog.cloudflare.com/technical-breakdown-http2-rapid-reset-ddos-attack/</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>HAProxy Technologies</strong> — <em>HAProxy is Not Affected by the HTTP/2 Rapid Reset Attack (CVE-2023-44487)</em>. L'argument structurel de HAProxy quant à la raison pour laquelle son cycle de vie de stream absorbe naturellement le Rapid Reset ; un contraste utile face à l'approche par counters de flood retenue par Sōzu. <a href="https://www.haproxy.com/blog/haproxy-is-not-affected-by-the-http-2-rapid-reset-attack-cve-2023-44487">https://www.haproxy.com/blog/haproxy-is-not-affected-by-the-http-2-rapid-reset-attack-cve-2023-44487</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Cloudflare blog — série Post-quantum</strong>. Couverture pluriannuelle assurée par Bas Westerbaan et ses collaborateurs sur l'échange de clés post-quantique et les groupes hybrides ; filiation de l'hybride X25519MLKEM768 que Sōzu négocie désormais par défaut. <a href="https://blog.cloudflare.com/tag/post-quantum/">https://blog.cloudflare.com/tag/post-quantum/</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Cloudflare Learning Center</strong> — <em>What is HSTS?</em>. Primer accessible sur HSTS, la sémantique max-age / includeSubDomains / preload, et la politique de la HSTS preload list.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->]]></description>
										<content:encoded><![CDATA[<p><img width="2499" height="1109" src="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-fr.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026.05.29 Clever Cloud Bannière Blog Sōzu 2.0 FR" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-fr.png 2499w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-fr-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-fr-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-fr-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-fr-1536x682.png 1536w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-fr-2048x909.png 2048w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-29-clever-cloud-banniere-blog-sozu-2-0-fr-1368x607.png 1368w" sizes="auto, (max-width: 2499px) 100vw, 2499px" /></p><!-- wp:paragraph -->
<p>Cette version marque une étape : la mécanique sous-jacente est désormais prête à accueillir les fonctionnalités produit que nous voulons bâtir au-dessus. Plutôt qu'une liste de correctifs, nous avons regroupé le travail en six thèmes ; pour chacun, nous disons deux choses — ce qui a été livré, et ce que cela rend possible, pour celles et ceux qui font tourner leurs applications sur la plateforme comme pour les opérateurs qui exécutent Sōzu sur leur propre infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">1. Un multiplexer HTTP/2 réécrit intégralement</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La pile HTTP/1 de Sōzu avait déjà été réécrite autour de <strong>kawa</strong>, notre format pivot : une représentation interne du message HTTP indépendante de sa version, dans le même esprit que le format HTX de HAProxy. Le multiplexer HTTP/2 en est le prolongement naturel — il étend kawa avec la gestion des sessions et le multiplexing des streams.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Il couvre l'intégralité de la matrice des protocoles (H1↔H1, H1↔H2, H2↔H1, H2↔H2), avec un état de stream partagé, la compression HPACK assurée par loona-hpack, le pooling des connexions HTTP/2 vers les backends, la priorisation des streams selon <a href="https://datatracker.ietf.org/doc/html/rfc9218">RFC 9218</a> Extensible Priorities, et la négociation ALPN par listener, afin que chaque connexion TLS aboutisse sur le bon chemin de code. Environ 181 tests end-to-end et deux cibles de fuzzing (cargo-fuzz) maintiennent le parser et le décodeur HPACK dans le droit chemin — dont des garde-fous de régression qui vérifient octet pour octet l'intégrité des réponses volumineuses sur un trajet « backend HTTP/1 → frontend HTTP/2 », précisément la frontière où se cachent les bugs de readiness en mode edge-triggered d'epoll.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour les clients Clever Cloud, l'incidence concrète est simple : <strong>chaque application servie par la plateforme parle désormais HTTP/2 par défaut, côté frontend</strong> — aucun opt-in, aucune modification de code, aucune configuration. L'activation du HTTP/2 jusqu'au backend reste un choix par cluster — un <em>cluster</em>, dans le modèle de Sōzu, étant l'une de vos applications ; activée de bout en bout, elle débloque notamment gRPC sur toute la chaîne. Les pages s'affichent en moins de connexions TCP ; les navigateurs peuvent mutualiser les requêtes entre les hôtes qui partagent un certificat (nous honorons le SAN coalescing décrit dans la <a href="https://datatracker.ietf.org/doc/html/rfc7540">RFC 7540 §9.1.1</a> : lorsque le certificat, l'autorité d'origine et les conditions de connexion s'y prêtent, Firefox et Chrome peuvent réutiliser une seule connexion vers vos cdn.example.com et assets.example.com au lieu d'en ouvrir plusieurs en parallèle). Il s'agit, au meilleur sens du terme, d'une mise à niveau silencieuse de la plateforme.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est aussi le prérequis structurel pour la suite — HTTP/3 sur QUIC et des fondations de streaming plus solides à l'edge. La réécriture du multiplexer est la pièce de la roadmap qui devait advenir en premier.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">2. La sécurité pour socle, non comme option</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La seconde moitié de la réécriture HTTP/2 est celle dont personne ne réclame l'existence tant qu'elle ne fait pas défaut : la résistance aux floods et aux attaques par déni de service. Sōzu 2.0 embarque des mitigations natives pour les vulnérabilités <a href="https://nvd.nist.gov/vuln/detail/CVE-2023-44487"><strong>CVE-2023-44487</strong></a><strong> (Rapid Reset)</strong>, <a href="https://nvd.nist.gov/vuln/detail/CVE-2024-27316"><strong>CVE-2024-27316</strong></a><strong> (CONTINUATION flood)</strong>, <a href="https://nvd.nist.gov/vuln/detail/CVE-2025-8671"><strong>CVE-2025-8671</strong></a><strong> (MadeYouReset)</strong>, ainsi que pour la famille PING / SETTINGS / empty-DATA des <a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9512">CVE-2019-9512</a>/<a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9515">CVE-2019-9515</a>/<a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9518">CVE-2019-9518</a>. Chaque mitigation expose un counter dédié — douze métriques sous h2.flood.violation.* — afin qu'un SIEM puisse mesurer en fenêtre glissante le taux de déclenchement, sans avoir à parser les logs. Dix-sept motifs de rejet HPACK sont exposés selon le même principe ; il s'agit du premier signal observable côté opérateur pour les tentatives de request smuggling contre la pile HTTP/2.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le reste du travail de sécurité se déploie à travers le proxy : un plafond de connexions par couple (cluster, IP source) assorti d'une réponse 429 Too Many Requests ; une éviction optionnelle des sessions les plus anciennes lorsque l'accept queue sature ; un durcissement du command channel, du parser HTTP/1, du pattern-trie router (fermeture d'un contournement de routing via regex non ancrées) et du wildcard matcher ; un assainissement du pipeline d'audit contre les séquences <a href="https://nvd.nist.gov/vuln/detail/CVE-2021-42574">Trojan-Source</a> et le SIEM column-smuggling ; et une rotation à chaud des certificats TLS qui <strong>ne laisse jamais tomber le certificat fonctionnel en cas d'échec</strong>, quand bien même le nouveau serait malformé. Quatre security advisories de dépendances purgées au cours de la même fenêtre.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Chaque mutation privilégiée atterrit désormais dans un journal d'audit structuré : chaque action du plan de contrôle est consignée sous la forme d'une ligne Command(verb=…, actor_uid=…, actor_user=…, result=…) — qui a fait quoi, depuis où, et avec quel résultat. Deux sinks dédiés l'exportent : audit_logs_target pour le flux lisible, et audit_logs_json_target pour un objet JSON à schéma stable par ligne, de sorte que la piste se déverse directement dans un SIEM (Wazuh, Elastic, Loki, Splunk) sans parser sur mesure — dans un format pensé pour PCI-DSS 10.5.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le cadrage produit est limpide : <strong>notre métier, c'est d'opérer la plateforme et de protéger vos applications dès que nous le pouvons</strong>. Lorsque la prochaine vulnérabilité HTTP/2 de cette classe paraît un vendredi à vingt-et-une heures, elle n'a pas à se traduire par un week-end de correctifs et de redéploiements sur des milliers d'applications : les attaques de cette classe sont largement absorbées ou atténuées au niveau du proxy, un counter s'incrémente sur un dashboard, et les applications continuent de servir leur trafic. Le « trust-by-default » n'est pas un slogan : c'est l'effet cumulé de dizaines de petits correctifs défensifs, livrés à la couche où la frontière de sécurité se joue véritablement.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">3. De la visibilité à chaque couche</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>L'ajout le plus visible pour l'utilisateur en 2.0 est <strong>sozu top</strong> — une TUI opérateur (derrière le feature flag Cargo tui) qui offre une vue en temps réel, à la manière de btop ou htop, sur sept panes : Overview, Clusters, Backends, Listeners, H2, Certificates, Events. Palette accessible aux personnes daltoniennes, thèmes personnalisables : l'essentiel tient dans un terminal, sans dashboard externe.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Sous la TUI, la surface des métriques elle-même a été refondue. Le multiplexer expose des counters par type de frame et par code d'erreur <a href="https://datatracker.ietf.org/doc/html/rfc9113">RFC 9113</a>, la télémétrie des handshakes TLS, des counters HTTP par status code, et de nouvelles gauges de cycle de vie du worker. L'access log gagne les champs TLS et de forwarding (version, cipher, SNI, ALPN, chaîne XFF), la propagation x_request_id de bout en bout, ainsi que les RTT client et serveur — de quoi corréler une requête d'un hop à l'autre.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Une nouvelle commande, SetMetricDetail, permet à un opérateur d'élever à la demande la cardinalité des métriques, via un lease à durée limitée qui expire : la production reste à faible cardinalité par défaut, et l'inspection fine devient une décision ponctuelle plutôt qu'une réécriture de configuration.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour Clever Cloud, c'est le socle du <strong>prochain chapitre de l'observabilité tournée vers le client</strong> — percentiles de latence par application, disponibilité par cluster, décomposition des handshakes TLS, request IDs traçables d'un hop à l'autre. Les métriques existent désormais au niveau du proxy. L'étape suivante consiste à les exposer dans la console Clever Cloud, à leur juste place, aux côtés des vues de build et de déploiement — afin qu'aucun APM externe ne soit nécessaire pour comprendre le trafic que votre application reçoit véritablement.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">4. Des policies de trafic enfin actionnables d'un geste</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Sōzu 2.0 refond l'intégralité de la surface des policies côté frontend (#1231) : <strong>HSTS typé</strong> (<a href="https://datatracker.ietf.org/doc/html/rfc6797">RFC 6797</a>), configurable par listener et par frontend ; <strong>URL rewrite</strong> (host, path, port) avec propagation des regex captures depuis le routing trie vers les rewrite templates ; <strong>réécriture des headers</strong> de requête et de réponse par frontend — ajouter, modifier ou supprimer n'importe quel header (une valeur vide le supprime, parité avec le del-header de HAProxy), avec en complément l'injection de X-Real-IP au niveau listener et l'élision anti-spoofing des valeurs fournies par le client ; <strong>redirects HTTP 301 / 302 / 308</strong> au travers d'une enum typée RedirectPolicy ; et l'<strong>authentification HTTP Basic</strong> par frontend, avec des credentials hashés en SHA-256 et une comparaison constant-time assurée par la crate subtle (le credential boundary est durci contre les side-channels temporels — la code review l'avait identifié).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est la partie de la release où l'opportunité produit est la plus saillante. Aujourd'hui, mener une migration de domaine propre sur une plateforme managée requiert typiquement soit un backend sachant rediriger, soit un service de redirection déployé en parallèle ; placer une URL de preview derrière un mot de passe requiert typiquement un add-on d'authentification. <strong>Avec Sōzu 2.0, ces usages deviennent des boutons sur le proxy.</strong> La plomberie existe ; ce qu'il reste à accomplir, c'est d'exposer ces boutons dans la console Clever Cloud — sous la forme d'une case à cocher sur un domaine, ou d'un toggle à clic unique pour les preview environments. C'est la surface no-code de contrôle du trafic que nous voulons construire ensuite.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">5. L'exploitation comme bénéfice pour le client</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Une réécriture de cette profondeur ne se livre sereinement que si la flotte demeure en mouvement en dessous. L'exploitation au quotidien a reçu une attention particulière en 2.0.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>sozu listener {http,https,tcp} update est un nouveau patch verb field-masked qui ajuste à la volée les paramètres d'un listener modifiables sans recycler les sockets sous-jacents : seuils de flood HTTP/2, SNI binding, préférence ALPN, idle timeouts, HSTS, custom answers. <strong>Les mitigations CVE peuvent désormais être resserrées sous attaque sans recycler les sockets d'écoute.</strong> Les health checks actifs des backends s'exécutent à l'intérieur de la loop d'événements mio existante (aucun scheduler async, aucun thread supplémentaire), avec des sondes HTTP/1.1 et HTTP/2, des intervalles dotés d'un léger jitter, et un fail-open path qui achemine à travers les backends au statut Normal dont la retry policy l'autorise. L'intégration systemd (qui clôt #228) effectue enfin ce qu'il convient : des units Type=notify, un READY=1 envoyé seulement après la création des workers initiaux et le replay de l'état sauvegardé, un STOPPING=1 lors du graceful shutdown, un MAINPID=&lt;nouveau&gt; lors des hot upgrades.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les releases elles-mêmes ont changé de forme. Pousser un tag produit désormais <strong>dix tarballs pré-compilés</strong> (trois cibles Linux croisées avec jusqu'à quatre crypto providers), signés keyless via sigstore (cosign + GitHub OIDC), accompagnés d'une attestation SLSA build provenance et d'un pointeur SOURCE.txt vers le code source correspondant satisfaisant l'AGPL §6 et la LGPL §4 — refermant ainsi l'écart noté dans #1089. Les fichiers fullchain.pem ACME se chargent à présent proprement, y compris lorsque le client a émis le leaf en tête de chaîne (Certbot, lego, acme.sh) ; une race condition vieille de six ans sur l'auto-restart des workers (#515) est corrigée par pinning de l'inode original au moyen de /proc/self/fd. Le verbe IPC LoadState demeure forward-compatible avec les clients sozu-command-lib 1.1.1, de sorte que l'écosystème d'intégrations ne se brise pas lors de l'upgrade.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>À l'échelle de Clever Cloud, le coût d'un incident d'exploitation ne se mesure pas en tickets — il s'agit d'une latence qui s'accumule sur des milliers d'applications, et du temps d'ingénierie que nous devons à la construction de l'étape suivante. <strong>Sōzu 2.0 est le proxy qui se laisse exploiter en silence, et cette tranquillité est ce que les clients vivent comme de l'uptime.</strong> C'est également ce qui rend Sōzu crédible comme outil que l'on peut exécuter sur sa propre infrastructure : binaires signés, hot reloads, particularités ACME absorbées, intégration systemd menée correctement.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">6. Une crypto prête pour demain</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La pile TLS a reçu une refonte plus discrète, mais d'égale importance (#1191). Sōzu prend désormais en charge <strong>quatre crypto providers pluggables</strong> pour rustls : crypto-ring (par défaut), crypto-aws-lc-rs, crypto-openssl, et fips (qui implique aws-lc-rs en mode FIPS). Les quatre sont exercés par la CI, et la precedence chain fips &gt; ring &gt; aws-lc-rs &gt; openssl résout le provider actif de manière déterministe lorsque plusieurs features sont activées simultanément.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ce dont nous sommes le plus satisfaits, en revanche, est le groups_list par défaut : <strong>X25519MLKEM768</strong><strong> est désormais le groupe d'échange de clés en première préférence</strong> lorsque le provider le prend en charge. Il s'agit de l'hybride post-quantique en cours de normalisation à l'IETF (<a href="https://datatracker.ietf.org/doc/html/draft-ietf-tls-ecdhe-mlkem">draft-ietf-tls-ecdhe-mlkem</a>), déjà enregistré dans le registre TLS de l'IANA ; en pratique, cela signifie qu'un client uniquement compatible X25519 et un client post-quantum négocient l'un comme l'autre l'échange le plus robuste mutuellement pris en charge, sans aucune action de l'opérateur.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Lorsque la transition post-quantique deviendra une exigence réglementaire — selon un calendrier dont l'industrie débat encore — <strong>les fondations seront déjà en place sur Clever Cloud</strong> : tout client TLS 1.3 qui propose l'hybride le négocie dès aujourd'hui, sans action de l'opérateur. Nous avons effectué ce choix en silence, et nous l'avons inscrit par défaut.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Du reverse proxy à l'edge programmable</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Sōzu a toujours été un <strong>load balancer d'infrastructure</strong> : bien au-delà du HTTP, il équilibre aussi du TCP brut, avec un chemin de forwarding zéro-copie via splice(2) sous Linux pour les listeners TCP. Avec la 2.0, il se rapproche d'une <strong>API gateway</strong> et devient le substrat d'un <strong>edge programmable</strong> — et « programmable » est le mot qui compte. Chaque capacité décrite ci-dessus (HTTP/2 par défaut, contrôles anti-abus, observabilité, policies de trafic, crypto agility, calme opérationnel) est un bouton. L'année qui vient de la roadmap Clever Cloud consiste à exposer ces boutons sous la forme de features produit : à travers la console, à travers l'API, à travers les workflows que vous utilisez déjà pour déployer vos applications.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Voilà ce que nous voulons dire lorsque nous affirmons que Sōzu 2.0 est un premier pas vers quelque chose de plus grand. La 2.0 n'est pas la destination — c'est la plateforme sur laquelle nous bâtissons désormais. Le HTTP/2 managé, partout, en constitue la première brique. La deuxième : une console permettant d'activer HSTS, de protéger par mot de passe un preview environment, ou de rediriger un domaine migré. L'aboutissement — un edge entièrement programmable, doté de policy primitives que vous composez — est ce vers quoi nous bâtissons au fil du prochain release cycle.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Deux chantiers sont déjà sur l'établi. D'abord, un volet <strong>load balancing UDP</strong> — dans l'esprit d'IPVS, mais avec le rechargement à chaud propre à Sōzu — assorti de <strong>health checks TCP</strong> pour valider la disponibilité des backends UDP ; de quoi ancrer un peu plus le rôle de load balancer d'infrastructure. Ensuite, des <strong>backends joignables en HTTPS</strong>, qui consolident la connectivité amont et ouvrent la voie à l'API gateway.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Sōzu est un projet open source publié sous AGPL-3.0 (la command library est diffusée sous LGPL-3.0). Les binaires de la version 2.0 sont signés via sigstore et embarquent une attestation SLSA ; si vous opérez votre propre edge, cette version vous appartient : à utiliser, à auditer, à étendre. Le code, l'issue tracker, et les conversations vivent à l'adresse <a href="https://github.com/sozu-proxy/sozu">github.com/sozu-proxy/sozu</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous remercions les contributeurs qui ont rendu cette release possible — ainsi que toutes celles et ceux qui exécutent Sōzu en production, dont les retours guident la suite.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Références</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Standards et spécifications</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>RFC 6797</strong> — HTTP Strict Transport Security (HSTS). <a href="https://datatracker.ietf.org/doc/html/rfc6797">https://datatracker.ietf.org/doc/html/rfc6797</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>RFC 7540</strong> — Hypertext Transfer Protocol Version 2 (HTTP/2). Désormais obsolétée par la RFC 9113, mais le §9.1.1 sur le connection coalescing demeure la citation reprise par la RFC 9113. <a href="https://datatracker.ietf.org/doc/html/rfc7540">https://datatracker.ietf.org/doc/html/rfc7540</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>RFC 9113</strong> — HTTP/2 (en vigueur). §5 streams, §6 frames, §6.8 GOAWAY, §7 codes d'erreur, §8.1 sémantique HTTP. <a href="https://datatracker.ietf.org/doc/html/rfc9113">https://datatracker.ietf.org/doc/html/rfc9113</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>RFC 9218</strong> — Extensible Prioritization Scheme for HTTP. <a href="https://datatracker.ietf.org/doc/html/rfc9218">https://datatracker.ietf.org/doc/html/rfc9218</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>draft-ietf-tls-ecdhe-mlkem</strong> — Hybrid key exchange in TLS 1.3 : X25519MLKEM768 (Internet-Draft IETF, enregistré à l'IANA ; l'hybride post-quantique que Sōzu privilégie par défaut). <a href="https://datatracker.ietf.org/doc/html/draft-ietf-tls-ecdhe-mlkem">https://datatracker.ietf.org/doc/html/draft-ietf-tls-ecdhe-mlkem</a></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">CVE</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>CVE-2019-9512</strong> — HTTP/2 Ping Flood. <a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9512">https://nvd.nist.gov/vuln/detail/CVE-2019-9512</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2019-9515</strong> — HTTP/2 Settings Flood. <a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9515">https://nvd.nist.gov/vuln/detail/CVE-2019-9515</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2019-9518</strong> — HTTP/2 Empty Frames Flood. <a href="https://nvd.nist.gov/vuln/detail/CVE-2019-9518">https://nvd.nist.gov/vuln/detail/CVE-2019-9518</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2021-42574</strong> — Trojan Source (bidirectional override). <a href="https://nvd.nist.gov/vuln/detail/CVE-2021-42574">https://nvd.nist.gov/vuln/detail/CVE-2021-42574</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2023-44487</strong> — HTTP/2 Rapid Reset. <a href="https://nvd.nist.gov/vuln/detail/CVE-2023-44487">https://nvd.nist.gov/vuln/detail/CVE-2023-44487</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2024-27316</strong> — HTTP/2 CONTINUATION Flood. <a href="https://nvd.nist.gov/vuln/detail/CVE-2024-27316">https://nvd.nist.gov/vuln/detail/CVE-2024-27316</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>CVE-2025-8671</strong> — MadeYouReset (HTTP/2). <a href="https://nvd.nist.gov/vuln/detail/CVE-2025-8671">https://nvd.nist.gov/vuln/detail/CVE-2025-8671</a></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Pour aller plus loin</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>Cloudflare</strong> — <em>HTTP/2 Rapid Reset: deconstructing the record-breaking attack</em>. Le compte rendu canonique de la divulgation coordonnée d'octobre 2023, incluant la mécanique de l'attaque ainsi que le pic de 398 millions de rps capturé en direct. <a href="https://blog.cloudflare.com/technical-breakdown-http2-rapid-reset-ddos-attack/">https://blog.cloudflare.com/technical-breakdown-http2-rapid-reset-ddos-attack/</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>HAProxy Technologies</strong> — <em>HAProxy is Not Affected by the HTTP/2 Rapid Reset Attack (CVE-2023-44487)</em>. L'argument structurel de HAProxy quant à la raison pour laquelle son cycle de vie de stream absorbe naturellement le Rapid Reset ; un contraste utile face à l'approche par counters de flood retenue par Sōzu. <a href="https://www.haproxy.com/blog/haproxy-is-not-affected-by-the-http-2-rapid-reset-attack-cve-2023-44487">https://www.haproxy.com/blog/haproxy-is-not-affected-by-the-http-2-rapid-reset-attack-cve-2023-44487</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Cloudflare blog — série Post-quantum</strong>. Couverture pluriannuelle assurée par Bas Westerbaan et ses collaborateurs sur l'échange de clés post-quantique et les groupes hybrides ; filiation de l'hybride X25519MLKEM768 que Sōzu négocie désormais par défaut. <a href="https://blog.cloudflare.com/tag/post-quantum/">https://blog.cloudflare.com/tag/post-quantum/</a></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Cloudflare Learning Center</strong> — <em>What is HSTS?</em>. Primer accessible sur HSTS, la sémantique max-age / includeSubDomains / preload, et la politique de la HSTS preload list.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>K3s vs K8s : quelles différences et lequel choisir en 2026 ?</title>
		<link>https://www.clever.cloud/fr/blog/fonctionnalites/2026/05/28/k3s-vs-k8s-quelles-differences-et-lequel-choisir-en-2026/</link>
		
		<dc:creator><![CDATA[Marjorie Darrigade]]></dc:creator>
		<pubDate>Thu, 28 May 2026 07:19:00 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Fonctionnalités]]></category>
		<category><![CDATA[K3s]]></category>
		<category><![CDATA[K8S]]></category>
		<category><![CDATA[kubernetes]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=24406</guid>

					<description><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-fr.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="K3s vs K8s" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-fr.png 800w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-fr-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-fr-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>En résumé : K3s est une distribution Kubernetes certifiée CNCF, optimisée pour les environnements contraints (edge, IoT, labs). K8s désigne le projet Kubernetes originel, conçu pour des clusters de production à grande échelle. Le choix dépend de vos ressources disponibles, de votre contexte de déploiement et de votre charge opérationnelle.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">K8s : le Kubernetes standard entreprise</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>K8s</strong> est l'abréviation de Kubernetes, le « 8 » représentant les huit lettres entre le « K » et le « s ». Il s'agit du projet open source original, maintenu par la Cloud Native Computing Foundation (CNCF) et initialement développé par Google.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Kubernetes est conçu pour des <strong>environnements de production à grande échelle</strong> : clusters multi-nœuds, haute disponibilité, intégration avec les clouds publics (AWS, GCP, Azure) ou des datacenters on-premises. Son plan de contrôle comprend plusieurs composants distincts : API server, scheduler, controller manager, etcd, déployés séparément, ce qui offre une flexibilité maximale mais requiert une expertise opérationnelle significative.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Prérequis typiques pour un nœud control plane en production</strong> : 2 vCPU et 2 Go de RAM au minimum pour les composants Kubernetes seuls, sans compter etcd ni les charges applicatives.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">K3s : une distribution Kubernetes certifiée CNCF, pas un fork</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>K3s est une distribution certifiée de Kubernetes</strong>, pas une version allégée non officielle ni un fork. Créé par Rancher Labs, il a été <a href="https://thenewstack.io/ranchers-k3s-joins-cncf-sandbox-as-first-kubernetes-distribution/" target="_blank" rel="noreferrer noopener">donné à la CNCF en juin 2020</a> et passe les mêmes tests de conformité Sonobuoy que toutes les distributions certifiées. Tout manifeste Kubernetes valide fonctionne sur K3s.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Son objectif principal : <strong>réduire drastiquement les ressources nécessaires</strong> pour faire tourner Kubernetes sur des environnements contraints (edge, IoT, CI/CD, labs)&nbsp; sans renoncer à la compatibilité API.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Ce que K3s change par rapport à K8s</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><a href="https://k3s.io/" target="_blank" rel="noreferrer noopener"><strong>Binary unique</strong> de moins de 70 Mo</a> (x86, ARM64, ARMv7 et S390X supportés), incluant le runtime containerd, le CNI Flannel, un Ingress Traefik et un load balancer Klipper.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>SQLite comme datastore par défaut</strong> en single-node, au lieu d'etcd. En configuration haute disponibilité (3 nœuds serveur minimum), K3s peut utiliser <strong>etcd embarqué</strong> ou un datastore externe (MySQL, PostgreSQL, etcd externe).</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Composants alpha/beta retirés</strong> pour réduire la surface d'attaque et l'empreinte mémoire.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p><strong>Point important</strong> : K3s ne supprime pas etcd ; il le rend optionnel. En single-node, SQLite suffit. En haute disponibilité, etcd embarqué ou externe est supporté - mais ce dernier n'est pas officiellement pris en charge par l'équipe K3s.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Empreinte ressources</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s fonctionne à partir de <strong>512 Mo de RAM</strong> sur un nœud agent. Un server node (control plane) requiert <strong>2 Go de RAM et 2 cœurs CPU</strong> selon <a href="https://docs.k3s.io/installation/requirements" target="_blank" rel="noreferrer noopener">la documentation officielle</a> (mise à jour mai 2026), hors charge applicative. Un profil mesuré à la charge est disponible dans le <a href="https://docs.k3s.io/reference/resource-profiling" target="_blank" rel="noreferrer noopener">guide de resource profiling K3s</a>. À noter : en test sur du matériel avec 1 Go de RAM total, les distributions K3s, k0s et MicroK8s ont montré des instabilités lors du déploiement de charges applicatives réelles (un seul cluster Kubernetes, même léger, consomme des ressources de contrôle non négligeables).</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Différences techniques clés</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Datastore</h3>
<!-- /wp:heading -->

<!-- wp:spacer {"height":"25px"} -->
<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:html -->
<style>
  .cc-table-wrap { overflow-x: auto; }
  .cc-table {
    width: 100%;
    border-collapse: collapse;
    table-layout: fixed;
    font-size: 17px;
    font-family: "Plus Jakarta Sans","PlusJakartaSans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;
    color: #111827;
  }
  .cc-table th,
  .cc-table td {
    text-align: left;
    padding: 12px 16px;
    vertical-align: top;
    line-height: 1.6;
  }
  .cc-table tbody tr + tr td,
  .cc-table tbody tr:first-child td {
    border-top: 1px solid #deddee;
  }
  .cc-table th + th,
  .cc-table td + td {
    border-left: 1px solid #deddee;
  }
  .cc-table thead th {
    font-weight: 700;
    text-align: center;
  }
  .cc-table th:nth-child(1),
  .cc-table td:nth-child(1) { width: 28%; }
  .cc-table th:nth-child(2),
  .cc-table td:nth-child(2) { width: 36%; }
  .cc-table th:nth-child(3),
  .cc-table td:nth-child(3) { width: 36%; }
</style>

<div class="cc-table-wrap">
  <table class="cc-table">
    <thead>
      <tr>
        <th>Scénario</th>
        <th>K8s</th>
        <th>K3s</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Single-node</td>
        <td>etcd requis</td>
        <td>SQLite par défaut</td>
      </tr>
      <tr>
        <td>Multi-node haute disponibilité</td>
        <td>etcd</td>
        <td>etcd embarqué ou externe (MySQL, PostgreSQL)</td>
      </tr>
    </tbody>
  </table>
</div>
<!-- /wp:html -->

<!-- wp:spacer {"height":"20px"} -->
<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Runtime et packaging</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K8s ne fournit pas de runtime par défaut depuis la suppression de dockershim (v1.24, 2022). À partir de Kubernetes 1.24, vous devez installer un runtime CRI-compatible (containerd ou CRI-O). K3s embarque containerd directement dans son binaire.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Architecture du plan de contrôle</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Dans K8s, les composants du plan de contrôle (API server, scheduler, controller manager) sont des processus séparés. Dans K3s, ils sont fusionnés en un seul binaire, ce qui réduit l'overhead mais limite certaines configurations avancées d'isolation.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Scalabilité</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s est adapté à des clusters de taille modérée. En configuration haute disponibilité (3 server nodes, 4 vCPU / 8 Go de RAM), <a href="https://docs.k3s.io/installation/requirements" target="_blank" rel="noreferrer noopener">la documentation officielle</a> indique une capacité d'environ 1 200 agents. Pour des clusters de très grande taille (plusieurs milliers de nœuds), K8s  reste la référence.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Tableau comparatif K3s vs K8s</h2>
<!-- /wp:heading -->

<!-- wp:spacer {"height":"35px"} -->
<div style="height:35px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:html -->
<style>
  .cc-table-wrap { overflow-x: auto; }
  .cc-table {
    width: 100%;
    border-collapse: collapse;
    table-layout: fixed;
    font-size: 17px;
    font-family: "Plus Jakarta Sans","PlusJakartaSans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;
    color: #111827;
  }
  .cc-table th,
  .cc-table td {
    text-align: left;
    padding: 12px 16px;
    vertical-align: top;
    line-height: 1.6;
  }
  .cc-table tbody tr + tr td,
  .cc-table tbody tr:first-child td {
    border-top: 1px solid #deddee;
  }
  .cc-table th + th,
  .cc-table td + td {
    border-left: 1px solid #deddee;
  }
  .cc-table thead th {
    font-weight: 700;
    text-align: center;
  }
  .cc-table tbody td:first-child {
    font-weight: 600;
  }
  .cc-table th:nth-child(1),
  .cc-table td:nth-child(1) { width: 28%; }
  .cc-table th:nth-child(2),
  .cc-table td:nth-child(2) { width: 36%; }
  .cc-table th:nth-child(3),
  .cc-table td:nth-child(3) { width: 36%; }
</style>

<div class="cc-table-wrap">
  <table class="cc-table">
    <thead>
      <tr>
        <th>Critère</th>
        <th>K3s</th>
        <th>K8s</th>
      </tr>
    </thead>
    <tbody>
      <tr><td>Certification CNCF</td><td>Oui (distribution certifiée)</td><td>Oui (projet originel)</td></tr>
      <tr><td>Taille du binaire</td><td>&lt; 100 Mo</td><td>Non applicable (composants séparés)</td></tr>
      <tr><td>Datastore par défaut</td><td>SQLite (single-node) / etcd (haute disponibilité)</td><td>etcd</td></tr>
      <tr><td>Runtime embarqué</td><td>containerd</td><td>Non (à installer séparément)</td></tr>
      <tr><td>Support ARM</td><td>Oui (ARM64, ARMv7)</td><td>Oui (dépend de la distribution)</td></tr>
      <tr><td>Ingress par défaut</td><td>Traefik (inclus)</td><td>Non (à déployer séparément)</td></tr>
      <tr><td>Compatibilité API</td><td>APIs requises certifiées CNCF</td><td>Référence (projet originel)</td></tr>
      <tr><td>Scalabilité max documentée</td><td>~1200 agents (haute disponibilité 3 serveurs)</td><td>Plusieurs milliers de nœuds</td></tr>
      <tr><td>Cas d’usage principal</td><td>Edge, IoT, lab, CI/CD</td><td>Entreprise, cloud, datacenters</td></tr>
      <tr><td>Complexité opérationnelle</td><td>Faible</td><td>Élevée</td></tr>
      <tr><td>Composants alpha/beta</td><td>Retirés</td><td>Inclus</td></tr>
    </tbody>
  </table>
</div>
<!-- /wp:html -->

<!-- wp:spacer {"height":"20px"} -->
<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Cas d'usage : lequel choisir ?</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Choisissez K3s si :</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>Vous déployez sur du <strong>matériel contraint</strong> (Raspberry Pi, appliances industrielles, serveurs edge avec peu de RAM).</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Vous gérez des <strong>clusters IoT ou edge</strong> distants, potentiellement en mode déconnecté.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Vous avez besoin d'un <strong>cluster de développement ou de CI</strong> démarrant rapidement, y compris sur matériel modeste.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Vous souhaitez un cluster opérationnel avec <strong>un minimum de configuration initiale</strong>.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Choisissez K8s (ou une distribution enterprise) si :</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>Vous orchestrez des <strong>centaines ou milliers de nœuds</strong> en production.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Vos workloads requièrent des <strong>intégrations cloud-natives avancées</strong> (stockage, load balancers, IAM) fournies par les hyperscalers.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Vous avez besoin de <strong>composants API en alpha/beta</strong> non disponibles dans K3s.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Votre organisation dispose d'une <strong>équipe SRE dédiée</strong> à l'exploitation de clusters.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:spacer {"height":"20px"} -->
<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Cas hybrides : K3s et K8s ensemble</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s et K8s ne sont pas mutuellement exclusifs. Plusieurs architectures hybrides sont documentées en production :</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Fleet management avec Rancher</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Des clusters K3s edge sont pilotés depuis un plan de contrôle central tournant sur K8s ou RKE2. The Home Depot (grande distribution américaine, plus de 2 300 magasins) <a href="https://www.datacenterknowledge.com/data-center-site-selection/home-depot-upgrades-2-300-retail-edge-locations-using-suse-rancher-k3s" target="_blank" rel="noreferrer noopener">gère ainsi ses sites avec K3s supervisé depuis Rancher</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Clusters de dev et staging K3s, prod K8s</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La compatibilité API garantit que les manifests et charts Helm testés sur K3s fonctionnent en production sur un cluster enterprise. Cette parité réduit les surprises en promotion d'environnements.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>CI/CD</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Des pipelines de test tournent sur K3s (faible coût, démarrage rapide) pendant que les environnements de production utilisent un cluster K8s managé.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"20px"} -->
<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Kubernetes managé : une troisième voie</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Ni K3s ni K8s ne résolvent la question de l'<strong>opération quotidienne</strong> : mises à jour, certificats, surveillance du plan de contrôle, gestion des défaillances. C'est précisément ce que couvrent les solutions de Kubernetes managé.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les hyperscalers (EKS, GKE, AKS) proposent cette gestion dans leurs propres clouds. Mais des solutions managées existent aussi en dehors de ces écosystèmes, notamment pour des organisations qui souhaitent conserver la maîtrise de leurs données et opter pour un Kubernetes souverain, voire un Kubernetes français.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><a href="https://www.clever.cloud/fr/product/kubernetes/">Clever Kubernetes Engine (CKE)</a> est le service Kubernetes managé de Clever Cloud, conçu pour des équipes qui utilisent déjà Kubernetes et souhaitent déléguer la gestion du plan de contrôle (updates, haute disponibilité, monitoring) sans être contraints dans un seul hyperscaler. CKE s'adresse explicitement aux équipes que le modèle <a href="https://www.clever.cloud/fr/paas/">PaaS</a> traditionnel ne couvre pas (cas multi-runtime, workloads non-twelve-factor, ou besoin de contrôle granulaire sur les ressources).</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"150px"} -->
<div style="height:150px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading {"textAlign":"center","level":1} -->
<h1 class="wp-block-heading has-text-align-center">FAQ</h1>
<!-- /wp:heading -->

<!-- wp:html -->
<div style="height: 1px; background-color: #DEDDEE; margin: 30px auto; width: 100%;"></div>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">K3s est-il un fork de Kubernetes ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Non. K3s est une distribution certifiée CNCF de Kubernetes. Il passe les tests de conformité Sonobuoy et respecte les mêmes APIs que K8s Il n'est pas maintenu en parallèle de Kubernetes : il suit les releases du projet originel.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Peut-on utiliser K3s en production ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Oui, avec des nuances. K3s est documenté pour des charges de production dans des environnements contraints (edge, IoT). Pour des clusters à grande échelle ou des workloads critiques avec des exigences de SLA élevées, le K8s&nbsp; (ou une distribution enterprise comme RKE2) est plus adapté.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">K3s supporte-t-il Helm ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Oui. K3s inclut un contrôleur Helm intégré et est compatible avec toute chart Helm valide.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Quelle est la différence entre K3s et K3d ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3d est un outil qui fait tourner K3s dans des conteneurs Docker. Il simplifie encore davantage la création de clusters K3s locaux pour le développement, mais n'est pas destiné à la production.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">K3s fonctionne-t-il sur ARM ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Oui. ARM64 et ARMv7 sont nativement supportés, ce qui explique sa popularité sur Raspberry Pi et les appliances industrielles.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Kubernetes managé vs K3s auto-hébergé : quoi choisir ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s auto-hébergé vous donne un contrôle total mais vous rend responsable des opérations (updates, sécurité, haute disponibilité). Un Kubernetes managé délègue cette responsabilité à un opérateur, au prix d'une dépendance envers ce fournisseur. Le choix dépend de vos ressources opérationnelles et de vos exigences de contrôle.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"90px"} -->
<div style="height:90px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->]]></description>
										<content:encoded><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-fr.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="K3s vs K8s" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-fr.png 800w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-fr-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-fr-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>En résumé : K3s est une distribution Kubernetes certifiée CNCF, optimisée pour les environnements contraints (edge, IoT, labs). K8s désigne le projet Kubernetes originel, conçu pour des clusters de production à grande échelle. Le choix dépend de vos ressources disponibles, de votre contexte de déploiement et de votre charge opérationnelle.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">K8s : le Kubernetes standard entreprise</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>K8s</strong> est l'abréviation de Kubernetes, le « 8 » représentant les huit lettres entre le « K » et le « s ». Il s'agit du projet open source original, maintenu par la Cloud Native Computing Foundation (CNCF) et initialement développé par Google.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Kubernetes est conçu pour des <strong>environnements de production à grande échelle</strong> : clusters multi-nœuds, haute disponibilité, intégration avec les clouds publics (AWS, GCP, Azure) ou des datacenters on-premises. Son plan de contrôle comprend plusieurs composants distincts : API server, scheduler, controller manager, etcd, déployés séparément, ce qui offre une flexibilité maximale mais requiert une expertise opérationnelle significative.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Prérequis typiques pour un nœud control plane en production</strong> : 2 vCPU et 2 Go de RAM au minimum pour les composants Kubernetes seuls, sans compter etcd ni les charges applicatives.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">K3s : une distribution Kubernetes certifiée CNCF, pas un fork</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>K3s est une distribution certifiée de Kubernetes</strong>, pas une version allégée non officielle ni un fork. Créé par Rancher Labs, il a été <a href="https://thenewstack.io/ranchers-k3s-joins-cncf-sandbox-as-first-kubernetes-distribution/" target="_blank" rel="noreferrer noopener">donné à la CNCF en juin 2020</a> et passe les mêmes tests de conformité Sonobuoy que toutes les distributions certifiées. Tout manifeste Kubernetes valide fonctionne sur K3s.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Son objectif principal : <strong>réduire drastiquement les ressources nécessaires</strong> pour faire tourner Kubernetes sur des environnements contraints (edge, IoT, CI/CD, labs)&nbsp; sans renoncer à la compatibilité API.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Ce que K3s change par rapport à K8s</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><a href="https://k3s.io/" target="_blank" rel="noreferrer noopener"><strong>Binary unique</strong> de moins de 70 Mo</a> (x86, ARM64, ARMv7 et S390X supportés), incluant le runtime containerd, le CNI Flannel, un Ingress Traefik et un load balancer Klipper.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>SQLite comme datastore par défaut</strong> en single-node, au lieu d'etcd. En configuration haute disponibilité (3 nœuds serveur minimum), K3s peut utiliser <strong>etcd embarqué</strong> ou un datastore externe (MySQL, PostgreSQL, etcd externe).</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Composants alpha/beta retirés</strong> pour réduire la surface d'attaque et l'empreinte mémoire.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p><strong>Point important</strong> : K3s ne supprime pas etcd ; il le rend optionnel. En single-node, SQLite suffit. En haute disponibilité, etcd embarqué ou externe est supporté - mais ce dernier n'est pas officiellement pris en charge par l'équipe K3s.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Empreinte ressources</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s fonctionne à partir de <strong>512 Mo de RAM</strong> sur un nœud agent. Un server node (control plane) requiert <strong>2 Go de RAM et 2 cœurs CPU</strong> selon <a href="https://docs.k3s.io/installation/requirements" target="_blank" rel="noreferrer noopener">la documentation officielle</a> (mise à jour mai 2026), hors charge applicative. Un profil mesuré à la charge est disponible dans le <a href="https://docs.k3s.io/reference/resource-profiling" target="_blank" rel="noreferrer noopener">guide de resource profiling K3s</a>. À noter : en test sur du matériel avec 1 Go de RAM total, les distributions K3s, k0s et MicroK8s ont montré des instabilités lors du déploiement de charges applicatives réelles (un seul cluster Kubernetes, même léger, consomme des ressources de contrôle non négligeables).</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Différences techniques clés</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Datastore</h3>
<!-- /wp:heading -->

<!-- wp:spacer {"height":"25px"} -->
<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:html -->
<style>
  .cc-table-wrap { overflow-x: auto; }
  .cc-table {
    width: 100%;
    border-collapse: collapse;
    table-layout: fixed;
    font-size: 17px;
    font-family: "Plus Jakarta Sans","PlusJakartaSans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;
    color: #111827;
  }
  .cc-table th,
  .cc-table td {
    text-align: left;
    padding: 12px 16px;
    vertical-align: top;
    line-height: 1.6;
  }
  .cc-table tbody tr + tr td,
  .cc-table tbody tr:first-child td {
    border-top: 1px solid #deddee;
  }
  .cc-table th + th,
  .cc-table td + td {
    border-left: 1px solid #deddee;
  }
  .cc-table thead th {
    font-weight: 700;
    text-align: center;
  }
  .cc-table th:nth-child(1),
  .cc-table td:nth-child(1) { width: 28%; }
  .cc-table th:nth-child(2),
  .cc-table td:nth-child(2) { width: 36%; }
  .cc-table th:nth-child(3),
  .cc-table td:nth-child(3) { width: 36%; }
</style>

<div class="cc-table-wrap">
  <table class="cc-table">
    <thead>
      <tr>
        <th>Scénario</th>
        <th>K8s</th>
        <th>K3s</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Single-node</td>
        <td>etcd requis</td>
        <td>SQLite par défaut</td>
      </tr>
      <tr>
        <td>Multi-node haute disponibilité</td>
        <td>etcd</td>
        <td>etcd embarqué ou externe (MySQL, PostgreSQL)</td>
      </tr>
    </tbody>
  </table>
</div>
<!-- /wp:html -->

<!-- wp:spacer {"height":"20px"} -->
<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Runtime et packaging</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K8s ne fournit pas de runtime par défaut depuis la suppression de dockershim (v1.24, 2022). À partir de Kubernetes 1.24, vous devez installer un runtime CRI-compatible (containerd ou CRI-O). K3s embarque containerd directement dans son binaire.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Architecture du plan de contrôle</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Dans K8s, les composants du plan de contrôle (API server, scheduler, controller manager) sont des processus séparés. Dans K3s, ils sont fusionnés en un seul binaire, ce qui réduit l'overhead mais limite certaines configurations avancées d'isolation.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Scalabilité</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s est adapté à des clusters de taille modérée. En configuration haute disponibilité (3 server nodes, 4 vCPU / 8 Go de RAM), <a href="https://docs.k3s.io/installation/requirements" target="_blank" rel="noreferrer noopener">la documentation officielle</a> indique une capacité d'environ 1 200 agents. Pour des clusters de très grande taille (plusieurs milliers de nœuds), K8s  reste la référence.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Tableau comparatif K3s vs K8s</h2>
<!-- /wp:heading -->

<!-- wp:spacer {"height":"35px"} -->
<div style="height:35px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:html -->
<style>
  .cc-table-wrap { overflow-x: auto; }
  .cc-table {
    width: 100%;
    border-collapse: collapse;
    table-layout: fixed;
    font-size: 17px;
    font-family: "Plus Jakarta Sans","PlusJakartaSans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;
    color: #111827;
  }
  .cc-table th,
  .cc-table td {
    text-align: left;
    padding: 12px 16px;
    vertical-align: top;
    line-height: 1.6;
  }
  .cc-table tbody tr + tr td,
  .cc-table tbody tr:first-child td {
    border-top: 1px solid #deddee;
  }
  .cc-table th + th,
  .cc-table td + td {
    border-left: 1px solid #deddee;
  }
  .cc-table thead th {
    font-weight: 700;
    text-align: center;
  }
  .cc-table tbody td:first-child {
    font-weight: 600;
  }
  .cc-table th:nth-child(1),
  .cc-table td:nth-child(1) { width: 28%; }
  .cc-table th:nth-child(2),
  .cc-table td:nth-child(2) { width: 36%; }
  .cc-table th:nth-child(3),
  .cc-table td:nth-child(3) { width: 36%; }
</style>

<div class="cc-table-wrap">
  <table class="cc-table">
    <thead>
      <tr>
        <th>Critère</th>
        <th>K3s</th>
        <th>K8s</th>
      </tr>
    </thead>
    <tbody>
      <tr><td>Certification CNCF</td><td>Oui (distribution certifiée)</td><td>Oui (projet originel)</td></tr>
      <tr><td>Taille du binaire</td><td>&lt; 100 Mo</td><td>Non applicable (composants séparés)</td></tr>
      <tr><td>Datastore par défaut</td><td>SQLite (single-node) / etcd (haute disponibilité)</td><td>etcd</td></tr>
      <tr><td>Runtime embarqué</td><td>containerd</td><td>Non (à installer séparément)</td></tr>
      <tr><td>Support ARM</td><td>Oui (ARM64, ARMv7)</td><td>Oui (dépend de la distribution)</td></tr>
      <tr><td>Ingress par défaut</td><td>Traefik (inclus)</td><td>Non (à déployer séparément)</td></tr>
      <tr><td>Compatibilité API</td><td>APIs requises certifiées CNCF</td><td>Référence (projet originel)</td></tr>
      <tr><td>Scalabilité max documentée</td><td>~1200 agents (haute disponibilité 3 serveurs)</td><td>Plusieurs milliers de nœuds</td></tr>
      <tr><td>Cas d’usage principal</td><td>Edge, IoT, lab, CI/CD</td><td>Entreprise, cloud, datacenters</td></tr>
      <tr><td>Complexité opérationnelle</td><td>Faible</td><td>Élevée</td></tr>
      <tr><td>Composants alpha/beta</td><td>Retirés</td><td>Inclus</td></tr>
    </tbody>
  </table>
</div>
<!-- /wp:html -->

<!-- wp:spacer {"height":"20px"} -->
<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Cas d'usage : lequel choisir ?</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Choisissez K3s si :</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>Vous déployez sur du <strong>matériel contraint</strong> (Raspberry Pi, appliances industrielles, serveurs edge avec peu de RAM).</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Vous gérez des <strong>clusters IoT ou edge</strong> distants, potentiellement en mode déconnecté.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Vous avez besoin d'un <strong>cluster de développement ou de CI</strong> démarrant rapidement, y compris sur matériel modeste.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Vous souhaitez un cluster opérationnel avec <strong>un minimum de configuration initiale</strong>.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Choisissez K8s (ou une distribution enterprise) si :</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>Vous orchestrez des <strong>centaines ou milliers de nœuds</strong> en production.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Vos workloads requièrent des <strong>intégrations cloud-natives avancées</strong> (stockage, load balancers, IAM) fournies par les hyperscalers.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Vous avez besoin de <strong>composants API en alpha/beta</strong> non disponibles dans K3s.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Votre organisation dispose d'une <strong>équipe SRE dédiée</strong> à l'exploitation de clusters.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:spacer {"height":"20px"} -->
<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Cas hybrides : K3s et K8s ensemble</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s et K8s ne sont pas mutuellement exclusifs. Plusieurs architectures hybrides sont documentées en production :</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Fleet management avec Rancher</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Des clusters K3s edge sont pilotés depuis un plan de contrôle central tournant sur K8s ou RKE2. The Home Depot (grande distribution américaine, plus de 2 300 magasins) <a href="https://www.datacenterknowledge.com/data-center-site-selection/home-depot-upgrades-2-300-retail-edge-locations-using-suse-rancher-k3s" target="_blank" rel="noreferrer noopener">gère ainsi ses sites avec K3s supervisé depuis Rancher</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Clusters de dev et staging K3s, prod K8s</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La compatibilité API garantit que les manifests et charts Helm testés sur K3s fonctionnent en production sur un cluster enterprise. Cette parité réduit les surprises en promotion d'environnements.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>CI/CD</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Des pipelines de test tournent sur K3s (faible coût, démarrage rapide) pendant que les environnements de production utilisent un cluster K8s managé.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"20px"} -->
<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Kubernetes managé : une troisième voie</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Ni K3s ni K8s ne résolvent la question de l'<strong>opération quotidienne</strong> : mises à jour, certificats, surveillance du plan de contrôle, gestion des défaillances. C'est précisément ce que couvrent les solutions de Kubernetes managé.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les hyperscalers (EKS, GKE, AKS) proposent cette gestion dans leurs propres clouds. Mais des solutions managées existent aussi en dehors de ces écosystèmes, notamment pour des organisations qui souhaitent conserver la maîtrise de leurs données et opter pour un Kubernetes souverain, voire un Kubernetes français.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><a href="https://www.clever.cloud/fr/product/kubernetes/">Clever Kubernetes Engine (CKE)</a> est le service Kubernetes managé de Clever Cloud, conçu pour des équipes qui utilisent déjà Kubernetes et souhaitent déléguer la gestion du plan de contrôle (updates, haute disponibilité, monitoring) sans être contraints dans un seul hyperscaler. CKE s'adresse explicitement aux équipes que le modèle <a href="https://www.clever.cloud/fr/paas/">PaaS</a> traditionnel ne couvre pas (cas multi-runtime, workloads non-twelve-factor, ou besoin de contrôle granulaire sur les ressources).</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"150px"} -->
<div style="height:150px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading {"textAlign":"center","level":1} -->
<h1 class="wp-block-heading has-text-align-center">FAQ</h1>
<!-- /wp:heading -->

<!-- wp:html -->
<div style="height: 1px; background-color: #DEDDEE; margin: 30px auto; width: 100%;"></div>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">K3s est-il un fork de Kubernetes ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Non. K3s est une distribution certifiée CNCF de Kubernetes. Il passe les tests de conformité Sonobuoy et respecte les mêmes APIs que K8s Il n'est pas maintenu en parallèle de Kubernetes : il suit les releases du projet originel.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Peut-on utiliser K3s en production ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Oui, avec des nuances. K3s est documenté pour des charges de production dans des environnements contraints (edge, IoT). Pour des clusters à grande échelle ou des workloads critiques avec des exigences de SLA élevées, le K8s&nbsp; (ou une distribution enterprise comme RKE2) est plus adapté.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">K3s supporte-t-il Helm ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Oui. K3s inclut un contrôleur Helm intégré et est compatible avec toute chart Helm valide.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Quelle est la différence entre K3s et K3d ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3d est un outil qui fait tourner K3s dans des conteneurs Docker. Il simplifie encore davantage la création de clusters K3s locaux pour le développement, mais n'est pas destiné à la production.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">K3s fonctionne-t-il sur ARM ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Oui. ARM64 et ARMv7 sont nativement supportés, ce qui explique sa popularité sur Raspberry Pi et les appliances industrielles.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Kubernetes managé vs K3s auto-hébergé : quoi choisir ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s auto-hébergé vous donne un contrôle total mais vous rend responsable des opérations (updates, sécurité, haute disponibilité). Un Kubernetes managé délègue cette responsabilité à un opérateur, au prix d'une dépendance envers ce fournisseur. Le choix dépend de vos ressources opérationnelles et de vos exigences de contrôle.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"90px"} -->
<div style="height:90px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Comment Clever Cloud répond aux vulnérabilités kernel ?</title>
		<link>https://www.clever.cloud/fr/blog/engineering-fr/2026/05/26/vulnerabilites-kernel-cloud/</link>
		
		<dc:creator><![CDATA[Leo Le Levé Dandé]]></dc:creator>
		<pubDate>Tue, 26 May 2026 13:51:09 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[CVE]]></category>
		<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=24382</guid>

					<description><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-seo-comment-clever-cloud-repond-aux-vulnerabilites-kernel--fr-1.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026.05 SEO Comment Clever Cloud répond aux vulnérabilités kernel FR" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-seo-comment-clever-cloud-repond-aux-vulnerabilites-kernel--fr-1.png 800w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-seo-comment-clever-cloud-repond-aux-vulnerabilites-kernel--fr-1-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-seo-comment-clever-cloud-repond-aux-vulnerabilites-kernel--fr-1-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>Plusieurs vulnérabilités récentes du noyau Linux ont nécessité une réponse rapide de la part des opérateurs d'infrastructure. Parmi elles, <a href="https://access.redhat.com/security/vulnerabilities/RHSB-2026-002">Copy Fail</a> et <a href="https://access.redhat.com/security/vulnerabilities/RHSB-2026-003">Dirty Frag</a> ont attiré l'attention car elles concernent des scénarios d'élévation locale de privilèges. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Copy Fail est suivie sous la <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-31431">CVE-2026-31431</a>. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dirty Frag regroupe deux vulnérabilités distinctes, la <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-43284">CVE-2026-43284</a> et la <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-43500">CVE-2026-43500</a>, liées à des composants du noyau Linux.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Chez Clever Cloud, nous avons traité ces vulnérabilités comme des sujets d'infrastructure critiques. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Notre objectif était double : réduire rapidement la fenêtre d'exposition, puis améliorer durablement notre processus de sélection et de déploiement des kernels.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cet article revient sur notre approche, les décisions prises et les changements apportés à notre chaîne d'exploitation.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Pourquoi ces vulnérabilités demandaient une réaction rapide</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Copy Fail et Dirty Frag appartiennent à la famille des vulnérabilités d'élévation locale de privilèges. Dans ce type de scénario, un attaquant doit déjà pouvoir exécuter du code localement, mais peut ensuite tenter d'obtenir des privilèges plus élevés sur la machine concernée.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dirty Frag repose sur deux failles du noyau Linux.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Elles affectent notamment des modules liés à ESP, utilisé par <a href="https://fr.wikipedia.org/wiki/Internet_Protocol_Security">IPsec</a>, et à <a href="https://docs.kernel.org/networking/rxrpc.html">RxRPC</a>. Dans une plateforme cloud, ce type de vulnérabilité impose une analyse rapide. Le risque ne se limite pas à la machine isolée. Il faut aussi évaluer les scénarios liés aux environnements mutualisés, aux workloads containerisés et aux mécanismes d'isolation.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Ce que nous avons vérifié</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Nous avons analysé l'impact potentiel de ces vulnérabilités sur nos environnements. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette étape ne consiste pas seulement à lire les avis de sécurité. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Elle consiste aussi à vérifier si un scénario théorique peut devenir pertinent dans notre contexte d'exploitation.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dans le cas de CopyFail, la faille venait sous embargo avec son correctif. Nous avons publié une nouvelle image système avec le correctif appliqué dans les jours qui ont suivi. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les applications de nos clients ont été redéployées dans la foulée.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dans le cas de Dirty Frag, nos analyses internes ont confirmé que ces vulnérabilités devaient être traitées sérieusement. En effet, les modules ESP sont activés dans nos noyaux pour répondre à certains besoins client spécifiques. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Heureusement, les modules liés à RxRPC ne sont pas présents chez nous car inutile dans notre usage. Nous ne détaillons pas ici les étapes techniques de l'exploitation, car l'objectif de cet article est d'informer nos clients, pas de publier une procédure reproductible.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette validation a confirmé la décision opérationnelle : traiter le sujet immédiatement, réduire la surface exposée, puis forcer les redéploiements nécessaires.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<table style="border-collapse:collapse;width:100%;font-family:Arial,sans-serif;">
<thead>
<tr style="background:#f5f5f5;">
<th style="border:1px solid #ddd;padding:12px 16px;text-align:left;">Période</th>
<th style="border:1px solid #ddd;padding:12px 16px;text-align:left;">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border:1px solid #ddd;padding:12px 16px;">30 Avril 2026</td>
<td style="border:1px solid #ddd;padding:12px 16px;">Déploiement rapide de premières mitigations kernel</td>
</tr>
<tr>
<td style="border:1px solid #ddd;padding:12px 16px;">7 Mai 2026</td>
<td style="border:1px solid #ddd;padding:12px 16px;">Mise à jour des kernels concernés par les nouvelles vulnérabilités</td>
</tr>
<tr>
<td style="border:1px solid #ddd;padding:12px 16px;">8 Mai 2026</td>
<td style="border:1px solid #ddd;padding:12px 16px;">Redéploiement progressif des workloads pour appliquer les correctifs</td>
</tr>
<tr>
<td style="border:1px solid #ddd;padding:12px 16px;">11 Mai 2026</td>
<td style="border:1px solid #ddd;padding:12px 16px;">Mise en production de l'intégration de la gestion des kernels dans la chaîne d'orchestration</td>
</tr>
</tbody>
</table>
<!-- /wp:html -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Notre réponse opérationnelle</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>Déployer des mesures immédiates</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous avons d'abord appliqué des mesures rapides sur les kernels concernés. Dans le cas de Dirty Frag, les mesures publiques recommandées portent notamment sur les composants kernel concernés par ESP et RxRPC.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Côté Clever Cloud, l'objectif était clair : réduire les surfaces exposées identifiées et réduire la fenêtre d'exposition avant d'attendre un cycle classique de maintenance</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Redéployer les workloads concernés</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Une mise à jour kernel n'est utile que si les systèmes concernés redémarrent effectivement sur un environnement corrigé. Nous avons donc lancé un redéploiement progressif des applications, puis traité les cas qui bloquaient ce redéploiement.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette phase est importante. Dans une plateforme managée, la correction ne se limite pas à produire une image ou à compiler un kernel. Il faut aussi s'assurer que la chaîne d'exécution utilise réellement la version attendue.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Améliorer le processus au passage</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous avons aussi profité de cette séquence pour remplacer un mécanisme temporaire par une intégration plus propre dans notre chaîne d'orchestration.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Concrètement, le choix du kernel est désormais transmis plus explicitement dans notre chaîne interne, jusqu'à Supernova, notre agent d'hyperviseur. Cette évolution remplace le contournement plus rigide mis en place dans l'urgence.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est le point central de cette intervention : corriger vite, puis rendre la correction plus fiable pour les prochaines opérations.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Ce que cela change pour les clients de Clever Cloud</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Pour les clients, l'effet attendu est simple : réduire l'exposition sans action manuelle de leur part lorsque la plateforme peut prendre en charge le redéploiement.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Clever Cloud exploite une architecture qui repose notamment sur l'isolation par virtualisation. Cette approche est documentée dans <a href="https://www.clever-cloud.com/fr/security/">nos pages sécurité</a> et dans nos contenus techniques sur l'exécution de conteneurs dans des machines virtuelles. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Elle ne supprime pas tous les risques, mais elle limite certains scénarios de mouvement latéral par rapport à des modèles où plusieurs workloads partagent directement le même environnement d'exécution.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous évitons toutefois de présenter cette isolation comme une garantie absolue. Une vulnérabilité kernel doit toujours être traitée sérieusement. C'est pourquoi nous avons combiné mitigation, redéploiement et amélioration de notre chaîne d'exploitation.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Ce que nous retenons</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Cette séquence confirme trois principes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>D'abord, une vulnérabilité kernel doit être analysée dans son contexte réel d'exploitation. Une alerte publique ne suffit pas. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Il faut comprendre si les conditions nécessaires à l'exploitation peuvent exister sur la plateforme.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ensuite, la vitesse de réaction compte. Les vulnérabilités Copy Fail et Dirty Frag ont été divulguées publiquement à quelques jours d'intervalle, avec des analyses publiées par plusieurs acteurs de l'écosystème Linux et cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Enfin, une réponse sécurité utile ne doit pas seulement corriger le problème du moment. Elle doit aussi améliorer le système qui permettra de répondre au prochain incident.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est ce que nous avons fait ici : traiter les vulnérabilités, réduire la fenêtre d'exposition et renforcer notre processus de gestion des kernels.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:spacer -->
<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading {"textAlign":"center","level":1} -->
<h1 class="wp-block-heading has-text-align-center">FAQ</h1>
<!-- /wp:heading -->

<!-- wp:html -->
<div style="height: 1px; background-color: #DEDDEE; margin: 30px auto; width: 100%;"></div>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Qu'est-ce qu'une vulnérabilité kernel locale ?</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Une vulnérabilité kernel locale est une faille qui nécessite déjà une capacité d'exécution sur la machine concernée. Elle peut ensuite permettre d'obtenir des privilèges plus élevés, par exemple root, si le noyau est vulnérable.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Pourquoi ces failles concernent-elles les plateformes cloud ?</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Les plateformes cloud exécutent de nombreux workloads avec des mécanismes d'isolation. Une faille kernel peut devenir critique si elle permet de franchir certaines barrières entre processus, conteneurs ou environnements d'exécution.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Dirty Frag et Copy Fail sont-elles la même vulnérabilité ?</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Non. Copy Fail est suivie sous la CVE-2026-31431. Dirty Frag regroupe la CVE-2026-43284 et la CVE-2026-43500. Ces vulnérabilités sont proches par leur impact, mais elles sont distinctes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Quelle action est demandée aux clients Clever Cloud ?</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Aucune action générale n'est demandée aux clients pour les environnements pris en charge par la plateforme. L'automatisation apportée par Clever Cloud a permis de tout mettre à jour sans action nécessaire. Les cas spécifiques font l'objet d'un suivi dédié.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-seo-comment-clever-cloud-repond-aux-vulnerabilites-kernel--fr-1.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026.05 SEO Comment Clever Cloud répond aux vulnérabilités kernel FR" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-seo-comment-clever-cloud-repond-aux-vulnerabilites-kernel--fr-1.png 800w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-seo-comment-clever-cloud-repond-aux-vulnerabilites-kernel--fr-1-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-seo-comment-clever-cloud-repond-aux-vulnerabilites-kernel--fr-1-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>Plusieurs vulnérabilités récentes du noyau Linux ont nécessité une réponse rapide de la part des opérateurs d'infrastructure. Parmi elles, <a href="https://access.redhat.com/security/vulnerabilities/RHSB-2026-002">Copy Fail</a> et <a href="https://access.redhat.com/security/vulnerabilities/RHSB-2026-003">Dirty Frag</a> ont attiré l'attention car elles concernent des scénarios d'élévation locale de privilèges. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Copy Fail est suivie sous la <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-31431">CVE-2026-31431</a>. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dirty Frag regroupe deux vulnérabilités distinctes, la <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-43284">CVE-2026-43284</a> et la <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-43500">CVE-2026-43500</a>, liées à des composants du noyau Linux.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Chez Clever Cloud, nous avons traité ces vulnérabilités comme des sujets d'infrastructure critiques. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Notre objectif était double : réduire rapidement la fenêtre d'exposition, puis améliorer durablement notre processus de sélection et de déploiement des kernels.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cet article revient sur notre approche, les décisions prises et les changements apportés à notre chaîne d'exploitation.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Pourquoi ces vulnérabilités demandaient une réaction rapide</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Copy Fail et Dirty Frag appartiennent à la famille des vulnérabilités d'élévation locale de privilèges. Dans ce type de scénario, un attaquant doit déjà pouvoir exécuter du code localement, mais peut ensuite tenter d'obtenir des privilèges plus élevés sur la machine concernée.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dirty Frag repose sur deux failles du noyau Linux.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Elles affectent notamment des modules liés à ESP, utilisé par <a href="https://fr.wikipedia.org/wiki/Internet_Protocol_Security">IPsec</a>, et à <a href="https://docs.kernel.org/networking/rxrpc.html">RxRPC</a>. Dans une plateforme cloud, ce type de vulnérabilité impose une analyse rapide. Le risque ne se limite pas à la machine isolée. Il faut aussi évaluer les scénarios liés aux environnements mutualisés, aux workloads containerisés et aux mécanismes d'isolation.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Ce que nous avons vérifié</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Nous avons analysé l'impact potentiel de ces vulnérabilités sur nos environnements. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette étape ne consiste pas seulement à lire les avis de sécurité. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Elle consiste aussi à vérifier si un scénario théorique peut devenir pertinent dans notre contexte d'exploitation.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dans le cas de CopyFail, la faille venait sous embargo avec son correctif. Nous avons publié une nouvelle image système avec le correctif appliqué dans les jours qui ont suivi. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les applications de nos clients ont été redéployées dans la foulée.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dans le cas de Dirty Frag, nos analyses internes ont confirmé que ces vulnérabilités devaient être traitées sérieusement. En effet, les modules ESP sont activés dans nos noyaux pour répondre à certains besoins client spécifiques. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Heureusement, les modules liés à RxRPC ne sont pas présents chez nous car inutile dans notre usage. Nous ne détaillons pas ici les étapes techniques de l'exploitation, car l'objectif de cet article est d'informer nos clients, pas de publier une procédure reproductible.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette validation a confirmé la décision opérationnelle : traiter le sujet immédiatement, réduire la surface exposée, puis forcer les redéploiements nécessaires.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<table style="border-collapse:collapse;width:100%;font-family:Arial,sans-serif;">
<thead>
<tr style="background:#f5f5f5;">
<th style="border:1px solid #ddd;padding:12px 16px;text-align:left;">Période</th>
<th style="border:1px solid #ddd;padding:12px 16px;text-align:left;">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border:1px solid #ddd;padding:12px 16px;">30 Avril 2026</td>
<td style="border:1px solid #ddd;padding:12px 16px;">Déploiement rapide de premières mitigations kernel</td>
</tr>
<tr>
<td style="border:1px solid #ddd;padding:12px 16px;">7 Mai 2026</td>
<td style="border:1px solid #ddd;padding:12px 16px;">Mise à jour des kernels concernés par les nouvelles vulnérabilités</td>
</tr>
<tr>
<td style="border:1px solid #ddd;padding:12px 16px;">8 Mai 2026</td>
<td style="border:1px solid #ddd;padding:12px 16px;">Redéploiement progressif des workloads pour appliquer les correctifs</td>
</tr>
<tr>
<td style="border:1px solid #ddd;padding:12px 16px;">11 Mai 2026</td>
<td style="border:1px solid #ddd;padding:12px 16px;">Mise en production de l'intégration de la gestion des kernels dans la chaîne d'orchestration</td>
</tr>
</tbody>
</table>
<!-- /wp:html -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Notre réponse opérationnelle</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>Déployer des mesures immédiates</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous avons d'abord appliqué des mesures rapides sur les kernels concernés. Dans le cas de Dirty Frag, les mesures publiques recommandées portent notamment sur les composants kernel concernés par ESP et RxRPC.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Côté Clever Cloud, l'objectif était clair : réduire les surfaces exposées identifiées et réduire la fenêtre d'exposition avant d'attendre un cycle classique de maintenance</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Redéployer les workloads concernés</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Une mise à jour kernel n'est utile que si les systèmes concernés redémarrent effectivement sur un environnement corrigé. Nous avons donc lancé un redéploiement progressif des applications, puis traité les cas qui bloquaient ce redéploiement.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette phase est importante. Dans une plateforme managée, la correction ne se limite pas à produire une image ou à compiler un kernel. Il faut aussi s'assurer que la chaîne d'exécution utilise réellement la version attendue.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Améliorer le processus au passage</strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous avons aussi profité de cette séquence pour remplacer un mécanisme temporaire par une intégration plus propre dans notre chaîne d'orchestration.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Concrètement, le choix du kernel est désormais transmis plus explicitement dans notre chaîne interne, jusqu'à Supernova, notre agent d'hyperviseur. Cette évolution remplace le contournement plus rigide mis en place dans l'urgence.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est le point central de cette intervention : corriger vite, puis rendre la correction plus fiable pour les prochaines opérations.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Ce que cela change pour les clients de Clever Cloud</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Pour les clients, l'effet attendu est simple : réduire l'exposition sans action manuelle de leur part lorsque la plateforme peut prendre en charge le redéploiement.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Clever Cloud exploite une architecture qui repose notamment sur l'isolation par virtualisation. Cette approche est documentée dans <a href="https://www.clever-cloud.com/fr/security/">nos pages sécurité</a> et dans nos contenus techniques sur l'exécution de conteneurs dans des machines virtuelles. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Elle ne supprime pas tous les risques, mais elle limite certains scénarios de mouvement latéral par rapport à des modèles où plusieurs workloads partagent directement le même environnement d'exécution.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous évitons toutefois de présenter cette isolation comme une garantie absolue. Une vulnérabilité kernel doit toujours être traitée sérieusement. C'est pourquoi nous avons combiné mitigation, redéploiement et amélioration de notre chaîne d'exploitation.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Ce que nous retenons</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Cette séquence confirme trois principes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>D'abord, une vulnérabilité kernel doit être analysée dans son contexte réel d'exploitation. Une alerte publique ne suffit pas. </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Il faut comprendre si les conditions nécessaires à l'exploitation peuvent exister sur la plateforme.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ensuite, la vitesse de réaction compte. Les vulnérabilités Copy Fail et Dirty Frag ont été divulguées publiquement à quelques jours d'intervalle, avec des analyses publiées par plusieurs acteurs de l'écosystème Linux et cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Enfin, une réponse sécurité utile ne doit pas seulement corriger le problème du moment. Elle doit aussi améliorer le système qui permettra de répondre au prochain incident.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est ce que nous avons fait ici : traiter les vulnérabilités, réduire la fenêtre d'exposition et renforcer notre processus de gestion des kernels.</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"15px"} -->
<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:spacer -->
<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:heading {"textAlign":"center","level":1} -->
<h1 class="wp-block-heading has-text-align-center">FAQ</h1>
<!-- /wp:heading -->

<!-- wp:html -->
<div style="height: 1px; background-color: #DEDDEE; margin: 30px auto; width: 100%;"></div>
<!-- /wp:html -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Qu'est-ce qu'une vulnérabilité kernel locale ?</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Une vulnérabilité kernel locale est une faille qui nécessite déjà une capacité d'exécution sur la machine concernée. Elle peut ensuite permettre d'obtenir des privilèges plus élevés, par exemple root, si le noyau est vulnérable.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Pourquoi ces failles concernent-elles les plateformes cloud ?</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Les plateformes cloud exécutent de nombreux workloads avec des mécanismes d'isolation. Une faille kernel peut devenir critique si elle permet de franchir certaines barrières entre processus, conteneurs ou environnements d'exécution.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Dirty Frag et Copy Fail sont-elles la même vulnérabilité ?</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Non. Copy Fail est suivie sous la CVE-2026-31431. Dirty Frag regroupe la CVE-2026-43284 et la CVE-2026-43500. Ces vulnérabilités sont proches par leur impact, mais elles sont distinctes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Quelle action est demandée aux clients Clever Cloud ?</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Aucune action générale n'est demandée aux clients pour les environnements pris en charge par la plateforme. L'automatisation apportée par Clever Cloud a permis de tout mettre à jour sans action nécessaire. Les cas spécifiques font l'objet d'un suivi dédié.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>K8S : qu&#8217;est-ce que Kubernetes, comment il fonctionne et pourquoi il s&#8217;est imposé</title>
		<link>https://www.clever.cloud/fr/blog/engineering-fr/2026/05/19/k8s-kubernetes-definition-standard/</link>
		
		<dc:creator><![CDATA[Leo Le Levé Dandé]]></dc:creator>
		<pubDate>Tue, 19 May 2026 10:54:27 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[kubernetes]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=24292</guid>

					<description><![CDATA[<p><img width="2499" height="1109" src="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-fr.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026.05.19 Clever Cloud Bannière Blog K8S FR" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-fr.png 2499w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-fr-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-fr-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-fr-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-fr-1536x682.png 1536w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-fr-2048x909.png 2048w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-fr-1368x607.png 1368w" sizes="auto, (max-width: 2499px) 100vw, 2499px" /></p><!-- wp:paragraph -->
<p>En une décennie, K8S s'est imposé comme la base technique sur laquelle s'exécute une part majoritaire des applications cloud modernes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Comment fonctionne Kubernetes : un orchestrateur déclaratif</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La plupart des descriptions de Kubernetes énumèrent ses composants, pods, deployments, services, sans expliquer le mécanisme central. Or le concept fondamental est ailleurs : Kubernetes est avant tout un <strong>orchestrateur</strong>, et son moteur central repose sur des boucles de réconciliation.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Vous ne dites pas à Kubernetes <em>quoi faire</em>. Vous lui dites <em>à quoi vous voulez que votre système ressemble</em>. Cette distinction, déclaratif contre impératif, change tout.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Concrètement, vous décrivez l'état désiré dans des fichiers manifestes, généralement au format YAML : « je veux 3 répliques de cette image, exposées sur le port 80, avec ces variables d'environnement ». Vous envoyez ce manifeste à l'API Kubernetes via kubectl. À partir de là, Kubernetes compare en permanence l'état réel du cluster (ce qui tourne effectivement) à l'état désiré (ce que vous avez déclaré), et agit pour les rapprocher. Si un nœud meurt, ses pods sont reprogrammés ailleurs. Si vous passez de 3 à 10 répliques dans le manifeste, Kubernetes en démarre 7 de plus. Si un conteneur plante, il est redémarré.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette boucle de réconciliation est le cœur de tout ce que fait Kubernetes : auto-réparation, scaling, déploiements progressifs (<em>rolling updates</em>), retours arrière. Pour creuser ce mécanisme et les autres fonctions qu'il rend possibles,<a href="https://claude.ai/fr/blog/kubernetes-orchestration/"> </a>découvrez en détail à quoi sert l'orchestration de conteneurs.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Architecture en bref : control plane, nodes, pods</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Un cluster Kubernetes se divise en deux ensembles. Le <strong>control plane</strong> est le cerveau : il prend les décisions globales, accepte les requêtes API, planifie les charges de travail, et surveille l'état du cluster. Il s'appuie sur quelques composants clés comme le serveur API (kube-apiserver), le planificateur (kube-scheduler) et le gestionnaire de contrôleurs (kube-controller-manager), ainsi que sur un magasin de données distribué qui mémorise tout l'état du cluster, traditionnellement etcd.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les <strong>nodes</strong> sont les machines qui exécutent réellement les charges de travail. Sur chacune, un agent appelé kubelet reçoit ses instructions du control plane et lance les conteneurs via un moteur d'exécution (containerd, CRI-O, etc.). La plus petite unité déployable n'est pas un conteneur isolé mais un <strong>pod</strong> : un ou plusieurs conteneurs qui partagent un réseau et un stockage. Au-dessus, des objets de plus haut niveau (Deployment, Service, Ingress, ConfigMap, Secret) décrivent comment les pods doivent être gérés, exposés et configurés.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette architecture est aussi la source d'une confusion fréquente avec<a href="https://claude.ai/fr/blog/kubernetes-vs-docker/"> </a>Docker, dont les rôles sont en réalité complémentaires de ceux de Kubernetes plutôt que concurrents.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Pourquoi K8S est devenu le standard de l'orchestration</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Selon le<a href="https://www.cncf.io/reports/"> CNCF Annual Cloud Native Survey 2025</a>, publié en janvier 2026, 98 % des organisations interrogées ont adopté des techniques <a href="https://www.clever.cloud/fr/blog/entreprise/2025/05/29/quest-ce-que-le-cloud-natif/">cloud native</a>, et 82 % des utilisateurs de conteneurs déploient Kubernetes en production, contre 66 % en 2023. La domination est massive. Mais l'expliquer uniquement par des qualités techniques serait incomplet, c'est aussi une histoire d'écosystème et d'alignement d'intérêts.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Sur le plan technique</strong>, trois propriétés expliquent l'adoption. D'abord, le modèle déclaratif décrit plus haut : il rend les déploiements reproductibles, versionnables dans Git, et résistants aux pannes. Ensuite, la portabilité : un même manifeste fonctionne sur une machine de développement (Minikube, kind, k3d), sur un cluster on-premise et sur n'importe quel cloud. Enfin, l'extensibilité : l'API de Kubernetes accepte des objets personnalisés (<em>Custom Resource Definitions</em>) et des contrôleurs personnalisés (<em>Operators</em>), ce qui en a fait une plateforme pour étendre la plateforme. Cet effet a déclenché une dynamique d'écosystème massive.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Sur le plan stratégique</strong>, l'histoire est moins racontée. En 2014, Google avait plus d'une décennie d'expérience dans la gestion de conteneurs à grande échelle avec ses systèmes internes Borg et Omega, dont les principes ont été partagés publiquement via des papiers de recherche académiques (Omega en 2013, Borg en 2015). Plutôt que d'open-sourcer Borg lui-même, qui restait étroitement couplé à l'infrastructure Google, l'équipe a créé Kubernetes comme un nouveau projet inspiré de cette expérience, avec une implémentation distincte conçue dès le départ pour une adoption externe. Le projet a été publié en open source en juin 2014 puis donné à la Cloud Native Computing Foundation en 2015. Cette neutralité, un projet hébergé par une fondation Linux et non par un cloud, a été déterminante. Aucun concurrent ne pouvait se permettre de ne <em>pas</em> l'adopter sous peine d'être marginalisé hors de l'écosystème cloud-native naissant. AWS, qui poussait initialement sa propre solution propriétaire (ECS), a annoncé EKS fin 2017 et l'a lancé en disponibilité générale en juin 2018. À ce moment-là, le standard était scellé.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Sur le plan de l'écosystème</strong>, l'effet réseau a fait le reste : Helm pour empaqueter les applications, Prometheus pour la supervision, Istio et Linkerd pour le service mesh, ArgoCD et Flux pour le GitOps, Trivy et Falco pour la sécurité. Chaque outil supplémentaire renforce la valeur du standard. Côté ressources humaines, les compétences Kubernetes sont devenues massivement demandées sur les offres DevOps et SRE, ce qui crée un cercle vertueux : plus d'ingénieurs formés, plus d'entreprises qui adoptent, plus d'ingénieurs qui se forment.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dans le rapport CNCF 2025, la communauté qualifie aujourd'hui Kubernetes de « boring », au sens noble du terme : un outil mature, prévisible, dont les API ne se cassent plus à chaque release. C'est précisément ce qu'on attend d'une infrastructure standard.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Quand utiliser Kubernetes, et quand privilégier le PaaS ?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le fait que K8S soit le standard ne signifie pas qu'il soit la bonne réponse à tous les problèmes. Choisir Kubernetes, un <a href="https://www.clever.cloud/fr/paas/">PaaS</a>, ou une combinaison des deux dépend du contexte technique et organisationnel ; chez Clever Cloud, beaucoup d'équipes utilisent les deux en parallèle pour des workloads différents.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Kubernetes apporte une vraie valeur dans plusieurs contextes :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>portabilité forte attendue : multi-cloud, hybride, on-premise associé à du cloud, où le manifeste Kubernetes devient un dénominateur commun ;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>architectures distribuées qui appliquent les principes du 12-factor app et l'approche « cattle » (instances interchangeables, sans état) avec des besoins d'orchestration sophistiqués ;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>alignement stratégique sur l'écosystème CNCF (Helm, Operators, ArgoCD, Istio…) ou prérequis client / partenaire qui imposent ce standard ;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>besoin d'une plateforme commune pour des équipes nombreuses, avec une équipe plateforme dédiée ou la volonté d'externaliser cette responsabilité à un service managé.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>À l'inverse, dans d'autres contextes, un PaaS comme Clever Cloud répond directement aux mêmes besoins que Kubernetes (déploiements industrialisés, autoscaling, résilience) sans la complexité opérationnelle de l'orchestrateur. C'est notamment vrai pour les architectures applicatives classiques (web + backend + base de données) où l'effort de configuration et d'opération de Kubernetes ne se traduit pas en valeur ajoutée concrète.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Et pour les charges intermédiaires (IoT, edge, environnements de développement, petits clusters), les différences entre K3S et K8S méritent d'être pesées avant de trancher : la distribution allégée est souvent plus adaptée. Le standard de facto n'est pas une obligation morale. C'est un outil puissant et coûteux à opérer, dont l'usage doit être choisi en fonction des problèmes qu'il résout, souvent en complément des autres approches plutôt qu'en remplacement.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Les limites du standard : la dette opérationnelle</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Faire tourner Kubernetes en production n'est pas trivial. C'est l'une des raisons pour lesquelles beaucoup d'entreprises qui adoptent K8S optent pour un service managé plutôt qu'une installation auto-gérée.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les sources de complexité sont multiples : configurer correctement le contrôle d'accès (RBAC), choisir et opérer un plugin réseau (CNI), brancher du stockage persistant (CSI), mettre en place une observabilité, gérer les certificats, faire les mises à jour mineures et majeures sans interruption, durcir la sécurité, gérer les sauvegardes du control plane. Chacun de ces sujets est un métier en soi. Le rapport CNCF 2025 montre d'ailleurs que les défis se sont déplacés du purement technique vers l'organisationnel : 47 % des organisations citent désormais les « changements culturels avec l'équipe de développement » comme principal obstacle, devant la complexité technique brute.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Au cœur de cette dette se trouve un composant moins discuté : <strong>etcd</strong>. C'est la base de données clé-valeur distribuée qui stocke l'état complet du cluster. etcd est solide pour les clusters de taille modérée, mais devient un goulot d'étranglement à l'échelle. Ce n'est pas un hasard si Google a annoncé fin 2024 le remplacement d'etcd par Spanner pour son offre GKE, en conservant uniquement la compatibilité API. AWS, de son côté, a réécrit une « nouvelle génération » de son architecture etcd pour soutenir l'échelle. K3S, conçu pour les environnements légers, a poussé la logique plus loin en proposant plusieurs alternatives à etcd, dont SQLite par défaut. Quand un composant central doit être reconçu pour soutenir l'usage en production, c'est un indice révélateur.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est ce constat qui nous a poussés, chez Clever Cloud, à reconsidérer cette pièce. Notre<a href="https://www.clever.cloud/fr/clever-kubernetes-engine/"> Clever Kubernetes Engine</a> remplace l'etcd standard par <strong>Materia etcd</strong>, notre réimplémentation du protocole etcd construite sur <a href="https://www.clever.cloud/fr/materia-serverless/materia-kv/">&nbsp;Materia KV</a>, et FoundationDB, répliquée&nbsp; sur trois datacenters parisiens. Cette approche, c'est aussi<a href="https://www.clever.cloud/fr/blog/entreprise/2026/04/08/ce-qui-rend-clever-cloud-unique/"> ce qui rend Clever Cloud unique</a> : un control plane multi-tenant qui scale horizontalement sans dégrader les performances, hérite de la simulation continue de pannes de FoundationDB, et libère les équipes de la gestion de milliers d'instances etcd fragiles.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Mais que vous choisissiez CKE ou un autre service, le principe vaut : si vous voulez Kubernetes en production sans bâtir une équipe plateforme dédiée,<a href="https://www.clever.cloud/fr/blog/entreprise/2026/04/27/cke-en-beta-publique-kubernetes-manage-souverain-et-vraiment-integre/"> un Kubernetes managé</a> est presque toujours la bonne décision.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">En résumé</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Kubernetes s'est imposé comme standard pour de bonnes raisons techniques, mais aussi grâce à un alignement d'intérêts qui a fait converger l'industrie autour d'un projet neutre porté par la CNCF. Le mécanisme central, la boucle de réconciliation et le modèle déclaratif, explique sa robustesse. L'écosystème qui s'est construit autour explique sa pérennité.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cela ne signifie pas qu'il faut l'adopter pour tout. Pour beaucoup de contextes, un PaaS ou une autre approche est mieux adaptée, et bien souvent, les deux cohabitent dans une même architecture, chacun là où il apporte le plus de valeur. Pour des architectures distribuées sérieuses, il reste l'outil de référence, à condition de mesurer la dette opérationnelle qu'il introduit, et de choisir entre l'opérer soi-même ou s'appuyer sur un service managé.C'est précisément la promesse que<a href="https://www.clever.cloud/fr/clever-kubernetes-engine/"> Clever Kubernetes Engine</a>, notre Kubernetes managé, cherche à tenir : Kubernetes standard, opéré en France sur une infrastructure souveraine, avec un control plane reconçu pour éliminer la friction d'etcd à l'échelle. Et pour les équipes qui n'ont pas besoin de Kubernetes, notre PaaS reste la voie la plus directe vers la mise en production.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">FAQ</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">K8S et Kubernetes, c'est la même chose ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Oui. K8S est une abréviation : la lettre K, les huit lettres d'« ubernete » condensées en 8, et la lettre S finale. Les deux désignent le même système d'orchestration de conteneurs.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Quelle est la différence entre Docker et Kubernetes ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Docker est un moteur de conteneurisation : il empaquette une application avec ses dépendances dans une image qui s'exécute comme un conteneur. Kubernetes est un orchestrateur : il déploie, supervise et fait évoluer ces conteneurs sur un parc de serveurs. Cette distinction est l'une des plus mal comprises de l'écosystème, alors que<a href="https://claude.ai/fr/blog/kubernetes-vs-docker/"></a>les deux outils répondent en réalité à des besoins différents et complémentaires.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Kubernetes est-il gratuit ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le logiciel est open source et gratuit, sous licence Apache 2.0. Mais l'infrastructure sur laquelle il tourne, le temps d'ingénierie pour le maintenir et les outils complémentaires (supervision, sauvegardes, sécurité) ont un coût réel. C'est pourquoi de nombreuses entreprises optent pour un Kubernetes managé.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Faut-il toujours Kubernetes pour déployer en production ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Non. Kubernetes apporte une orchestration sophistiquée, particulièrement adaptée aux architectures distribuées exigeant portabilité, écosystème CNCF, ou orchestration avancée. Pour beaucoup d'autres contextes, un PaaS répond aux mêmes objectifs (déploiement industrialisé, autoscaling, résilience) sans la complexité opérationnelle. Et dans la pratique, les deux approches cohabitent souvent dans une même architecture.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Quelle différence entre K3S et K8S ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3S est une distribution Kubernetes certifiée par la CNCF (donc pas un fork), allégée et conçue pour les environnements aux ressources limitées : edge, IoT, machines de développement, petits clusters. Elle remplace certains composants par des alternatives plus légères et tient dans un binaire unique. Les différences entre K3S et K8S tiennent à plusieurs choix d'architecture précis qu'il faut peser avant de choisir.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Comment commencer avec Kubernetes ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le plus rapide est de monter un cluster local avec Minikube, kind ou k3d, puis de déployer une application simple via un manifeste YAML. Pour passer en production, le choix raisonnable pour la majorité des équipes est un Kubernetes managé.</p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="2499" height="1109" src="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-fr.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026.05.19 Clever Cloud Bannière Blog K8S FR" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-fr.png 2499w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-fr-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-fr-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-fr-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-fr-1536x682.png 1536w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-fr-2048x909.png 2048w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-19-clever-cloud-banniere-blog-k8s-fr-1368x607.png 1368w" sizes="auto, (max-width: 2499px) 100vw, 2499px" /></p><!-- wp:paragraph -->
<p>En une décennie, K8S s'est imposé comme la base technique sur laquelle s'exécute une part majoritaire des applications cloud modernes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Comment fonctionne Kubernetes : un orchestrateur déclaratif</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La plupart des descriptions de Kubernetes énumèrent ses composants, pods, deployments, services, sans expliquer le mécanisme central. Or le concept fondamental est ailleurs : Kubernetes est avant tout un <strong>orchestrateur</strong>, et son moteur central repose sur des boucles de réconciliation.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Vous ne dites pas à Kubernetes <em>quoi faire</em>. Vous lui dites <em>à quoi vous voulez que votre système ressemble</em>. Cette distinction, déclaratif contre impératif, change tout.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Concrètement, vous décrivez l'état désiré dans des fichiers manifestes, généralement au format YAML : « je veux 3 répliques de cette image, exposées sur le port 80, avec ces variables d'environnement ». Vous envoyez ce manifeste à l'API Kubernetes via kubectl. À partir de là, Kubernetes compare en permanence l'état réel du cluster (ce qui tourne effectivement) à l'état désiré (ce que vous avez déclaré), et agit pour les rapprocher. Si un nœud meurt, ses pods sont reprogrammés ailleurs. Si vous passez de 3 à 10 répliques dans le manifeste, Kubernetes en démarre 7 de plus. Si un conteneur plante, il est redémarré.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette boucle de réconciliation est le cœur de tout ce que fait Kubernetes : auto-réparation, scaling, déploiements progressifs (<em>rolling updates</em>), retours arrière. Pour creuser ce mécanisme et les autres fonctions qu'il rend possibles,<a href="https://claude.ai/fr/blog/kubernetes-orchestration/"> </a>découvrez en détail à quoi sert l'orchestration de conteneurs.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Architecture en bref : control plane, nodes, pods</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Un cluster Kubernetes se divise en deux ensembles. Le <strong>control plane</strong> est le cerveau : il prend les décisions globales, accepte les requêtes API, planifie les charges de travail, et surveille l'état du cluster. Il s'appuie sur quelques composants clés comme le serveur API (kube-apiserver), le planificateur (kube-scheduler) et le gestionnaire de contrôleurs (kube-controller-manager), ainsi que sur un magasin de données distribué qui mémorise tout l'état du cluster, traditionnellement etcd.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les <strong>nodes</strong> sont les machines qui exécutent réellement les charges de travail. Sur chacune, un agent appelé kubelet reçoit ses instructions du control plane et lance les conteneurs via un moteur d'exécution (containerd, CRI-O, etc.). La plus petite unité déployable n'est pas un conteneur isolé mais un <strong>pod</strong> : un ou plusieurs conteneurs qui partagent un réseau et un stockage. Au-dessus, des objets de plus haut niveau (Deployment, Service, Ingress, ConfigMap, Secret) décrivent comment les pods doivent être gérés, exposés et configurés.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette architecture est aussi la source d'une confusion fréquente avec<a href="https://claude.ai/fr/blog/kubernetes-vs-docker/"> </a>Docker, dont les rôles sont en réalité complémentaires de ceux de Kubernetes plutôt que concurrents.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Pourquoi K8S est devenu le standard de l'orchestration</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Selon le<a href="https://www.cncf.io/reports/"> CNCF Annual Cloud Native Survey 2025</a>, publié en janvier 2026, 98 % des organisations interrogées ont adopté des techniques <a href="https://www.clever.cloud/fr/blog/entreprise/2025/05/29/quest-ce-que-le-cloud-natif/">cloud native</a>, et 82 % des utilisateurs de conteneurs déploient Kubernetes en production, contre 66 % en 2023. La domination est massive. Mais l'expliquer uniquement par des qualités techniques serait incomplet, c'est aussi une histoire d'écosystème et d'alignement d'intérêts.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Sur le plan technique</strong>, trois propriétés expliquent l'adoption. D'abord, le modèle déclaratif décrit plus haut : il rend les déploiements reproductibles, versionnables dans Git, et résistants aux pannes. Ensuite, la portabilité : un même manifeste fonctionne sur une machine de développement (Minikube, kind, k3d), sur un cluster on-premise et sur n'importe quel cloud. Enfin, l'extensibilité : l'API de Kubernetes accepte des objets personnalisés (<em>Custom Resource Definitions</em>) et des contrôleurs personnalisés (<em>Operators</em>), ce qui en a fait une plateforme pour étendre la plateforme. Cet effet a déclenché une dynamique d'écosystème massive.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Sur le plan stratégique</strong>, l'histoire est moins racontée. En 2014, Google avait plus d'une décennie d'expérience dans la gestion de conteneurs à grande échelle avec ses systèmes internes Borg et Omega, dont les principes ont été partagés publiquement via des papiers de recherche académiques (Omega en 2013, Borg en 2015). Plutôt que d'open-sourcer Borg lui-même, qui restait étroitement couplé à l'infrastructure Google, l'équipe a créé Kubernetes comme un nouveau projet inspiré de cette expérience, avec une implémentation distincte conçue dès le départ pour une adoption externe. Le projet a été publié en open source en juin 2014 puis donné à la Cloud Native Computing Foundation en 2015. Cette neutralité, un projet hébergé par une fondation Linux et non par un cloud, a été déterminante. Aucun concurrent ne pouvait se permettre de ne <em>pas</em> l'adopter sous peine d'être marginalisé hors de l'écosystème cloud-native naissant. AWS, qui poussait initialement sa propre solution propriétaire (ECS), a annoncé EKS fin 2017 et l'a lancé en disponibilité générale en juin 2018. À ce moment-là, le standard était scellé.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Sur le plan de l'écosystème</strong>, l'effet réseau a fait le reste : Helm pour empaqueter les applications, Prometheus pour la supervision, Istio et Linkerd pour le service mesh, ArgoCD et Flux pour le GitOps, Trivy et Falco pour la sécurité. Chaque outil supplémentaire renforce la valeur du standard. Côté ressources humaines, les compétences Kubernetes sont devenues massivement demandées sur les offres DevOps et SRE, ce qui crée un cercle vertueux : plus d'ingénieurs formés, plus d'entreprises qui adoptent, plus d'ingénieurs qui se forment.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dans le rapport CNCF 2025, la communauté qualifie aujourd'hui Kubernetes de « boring », au sens noble du terme : un outil mature, prévisible, dont les API ne se cassent plus à chaque release. C'est précisément ce qu'on attend d'une infrastructure standard.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Quand utiliser Kubernetes, et quand privilégier le PaaS ?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le fait que K8S soit le standard ne signifie pas qu'il soit la bonne réponse à tous les problèmes. Choisir Kubernetes, un <a href="https://www.clever.cloud/fr/paas/">PaaS</a>, ou une combinaison des deux dépend du contexte technique et organisationnel ; chez Clever Cloud, beaucoup d'équipes utilisent les deux en parallèle pour des workloads différents.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Kubernetes apporte une vraie valeur dans plusieurs contextes :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>portabilité forte attendue : multi-cloud, hybride, on-premise associé à du cloud, où le manifeste Kubernetes devient un dénominateur commun ;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>architectures distribuées qui appliquent les principes du 12-factor app et l'approche « cattle » (instances interchangeables, sans état) avec des besoins d'orchestration sophistiqués ;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>alignement stratégique sur l'écosystème CNCF (Helm, Operators, ArgoCD, Istio…) ou prérequis client / partenaire qui imposent ce standard ;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>besoin d'une plateforme commune pour des équipes nombreuses, avec une équipe plateforme dédiée ou la volonté d'externaliser cette responsabilité à un service managé.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>À l'inverse, dans d'autres contextes, un PaaS comme Clever Cloud répond directement aux mêmes besoins que Kubernetes (déploiements industrialisés, autoscaling, résilience) sans la complexité opérationnelle de l'orchestrateur. C'est notamment vrai pour les architectures applicatives classiques (web + backend + base de données) où l'effort de configuration et d'opération de Kubernetes ne se traduit pas en valeur ajoutée concrète.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Et pour les charges intermédiaires (IoT, edge, environnements de développement, petits clusters), les différences entre K3S et K8S méritent d'être pesées avant de trancher : la distribution allégée est souvent plus adaptée. Le standard de facto n'est pas une obligation morale. C'est un outil puissant et coûteux à opérer, dont l'usage doit être choisi en fonction des problèmes qu'il résout, souvent en complément des autres approches plutôt qu'en remplacement.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Les limites du standard : la dette opérationnelle</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Faire tourner Kubernetes en production n'est pas trivial. C'est l'une des raisons pour lesquelles beaucoup d'entreprises qui adoptent K8S optent pour un service managé plutôt qu'une installation auto-gérée.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les sources de complexité sont multiples : configurer correctement le contrôle d'accès (RBAC), choisir et opérer un plugin réseau (CNI), brancher du stockage persistant (CSI), mettre en place une observabilité, gérer les certificats, faire les mises à jour mineures et majeures sans interruption, durcir la sécurité, gérer les sauvegardes du control plane. Chacun de ces sujets est un métier en soi. Le rapport CNCF 2025 montre d'ailleurs que les défis se sont déplacés du purement technique vers l'organisationnel : 47 % des organisations citent désormais les « changements culturels avec l'équipe de développement » comme principal obstacle, devant la complexité technique brute.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Au cœur de cette dette se trouve un composant moins discuté : <strong>etcd</strong>. C'est la base de données clé-valeur distribuée qui stocke l'état complet du cluster. etcd est solide pour les clusters de taille modérée, mais devient un goulot d'étranglement à l'échelle. Ce n'est pas un hasard si Google a annoncé fin 2024 le remplacement d'etcd par Spanner pour son offre GKE, en conservant uniquement la compatibilité API. AWS, de son côté, a réécrit une « nouvelle génération » de son architecture etcd pour soutenir l'échelle. K3S, conçu pour les environnements légers, a poussé la logique plus loin en proposant plusieurs alternatives à etcd, dont SQLite par défaut. Quand un composant central doit être reconçu pour soutenir l'usage en production, c'est un indice révélateur.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est ce constat qui nous a poussés, chez Clever Cloud, à reconsidérer cette pièce. Notre<a href="https://www.clever.cloud/fr/clever-kubernetes-engine/"> Clever Kubernetes Engine</a> remplace l'etcd standard par <strong>Materia etcd</strong>, notre réimplémentation du protocole etcd construite sur <a href="https://www.clever.cloud/fr/materia-serverless/materia-kv/">&nbsp;Materia KV</a>, et FoundationDB, répliquée&nbsp; sur trois datacenters parisiens. Cette approche, c'est aussi<a href="https://www.clever.cloud/fr/blog/entreprise/2026/04/08/ce-qui-rend-clever-cloud-unique/"> ce qui rend Clever Cloud unique</a> : un control plane multi-tenant qui scale horizontalement sans dégrader les performances, hérite de la simulation continue de pannes de FoundationDB, et libère les équipes de la gestion de milliers d'instances etcd fragiles.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Mais que vous choisissiez CKE ou un autre service, le principe vaut : si vous voulez Kubernetes en production sans bâtir une équipe plateforme dédiée,<a href="https://www.clever.cloud/fr/blog/entreprise/2026/04/27/cke-en-beta-publique-kubernetes-manage-souverain-et-vraiment-integre/"> un Kubernetes managé</a> est presque toujours la bonne décision.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">En résumé</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Kubernetes s'est imposé comme standard pour de bonnes raisons techniques, mais aussi grâce à un alignement d'intérêts qui a fait converger l'industrie autour d'un projet neutre porté par la CNCF. Le mécanisme central, la boucle de réconciliation et le modèle déclaratif, explique sa robustesse. L'écosystème qui s'est construit autour explique sa pérennité.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cela ne signifie pas qu'il faut l'adopter pour tout. Pour beaucoup de contextes, un PaaS ou une autre approche est mieux adaptée, et bien souvent, les deux cohabitent dans une même architecture, chacun là où il apporte le plus de valeur. Pour des architectures distribuées sérieuses, il reste l'outil de référence, à condition de mesurer la dette opérationnelle qu'il introduit, et de choisir entre l'opérer soi-même ou s'appuyer sur un service managé.C'est précisément la promesse que<a href="https://www.clever.cloud/fr/clever-kubernetes-engine/"> Clever Kubernetes Engine</a>, notre Kubernetes managé, cherche à tenir : Kubernetes standard, opéré en France sur une infrastructure souveraine, avec un control plane reconçu pour éliminer la friction d'etcd à l'échelle. Et pour les équipes qui n'ont pas besoin de Kubernetes, notre PaaS reste la voie la plus directe vers la mise en production.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">FAQ</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">K8S et Kubernetes, c'est la même chose ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Oui. K8S est une abréviation : la lettre K, les huit lettres d'« ubernete » condensées en 8, et la lettre S finale. Les deux désignent le même système d'orchestration de conteneurs.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Quelle est la différence entre Docker et Kubernetes ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Docker est un moteur de conteneurisation : il empaquette une application avec ses dépendances dans une image qui s'exécute comme un conteneur. Kubernetes est un orchestrateur : il déploie, supervise et fait évoluer ces conteneurs sur un parc de serveurs. Cette distinction est l'une des plus mal comprises de l'écosystème, alors que<a href="https://claude.ai/fr/blog/kubernetes-vs-docker/"></a>les deux outils répondent en réalité à des besoins différents et complémentaires.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Kubernetes est-il gratuit ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le logiciel est open source et gratuit, sous licence Apache 2.0. Mais l'infrastructure sur laquelle il tourne, le temps d'ingénierie pour le maintenir et les outils complémentaires (supervision, sauvegardes, sécurité) ont un coût réel. C'est pourquoi de nombreuses entreprises optent pour un Kubernetes managé.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Faut-il toujours Kubernetes pour déployer en production ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Non. Kubernetes apporte une orchestration sophistiquée, particulièrement adaptée aux architectures distribuées exigeant portabilité, écosystème CNCF, ou orchestration avancée. Pour beaucoup d'autres contextes, un PaaS répond aux mêmes objectifs (déploiement industrialisé, autoscaling, résilience) sans la complexité opérationnelle. Et dans la pratique, les deux approches cohabitent souvent dans une même architecture.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Quelle différence entre K3S et K8S ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3S est une distribution Kubernetes certifiée par la CNCF (donc pas un fork), allégée et conçue pour les environnements aux ressources limitées : edge, IoT, machines de développement, petits clusters. Elle remplace certains composants par des alternatives plus légères et tient dans un binaire unique. Les différences entre K3S et K8S tiennent à plusieurs choix d'architecture précis qu'il faut peser avant de choisir.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Comment commencer avec Kubernetes ?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le plus rapide est de monter un cluster local avec Minikube, kind ou k3d, puis de déployer une application simple via un manifeste YAML. Pour passer en production, le choix raisonnable pour la majorité des équipes est un Kubernetes managé.</p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Clever Cloud contrôle l’annonce de ses préfixes IP</title>
		<link>https://www.clever.cloud/fr/blog/engineering-fr/2026/05/04/clever-cloud-controle-lannonce-de-ses-prefixes-ip/</link>
		
		<dc:creator><![CDATA[Arnaud Lefebvre]]></dc:creator>
		<pubDate>Mon, 04 May 2026 15:00:33 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=23872</guid>

					<description><![CDATA[<p><img width="2499" height="1109" src="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-fr-1.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026 03 17 clever cloud banniere blog clever cloud controle lannonce de ses prefixes ip fr 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-fr-1.png 2499w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-fr-1-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-fr-1-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-fr-1-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-fr-1-1536x682.png 1536w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-fr-1-2048x909.png 2048w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-fr-1-1368x607.png 1368w" sizes="auto, (max-width: 2499px) 100vw, 2499px" /></p><!-- wp:paragraph -->
<p>Cela représente une étape importante, issue de trois années de préparation, et s’inscrit dans une stratégie plus large visant à conserver un contrôle complet sur l’infrastructure réseau de notre région Paris.<br></p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Pourquoi ce changement</h2>
<!-- /wp:heading -->

<!-- wp:html -->
<div style="max-width:780px;margin:1.5rem auto;background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:15px;line-height:1.7;box-shadow:0 1px 2px rgba(0,0,0,0.08);border:1px solid rgba(255,255,255,0.08);">
  <strong style="color:#e5eefc;">Note :</strong> Clever Cloud opère plusieurs régions dans le monde. Paris est notre région principale — la plus importante — où nous contrôlons l’ensemble de la stack : notre propre matériel, notre propre réseau, et désormais l’annonce de nos préfixes IP. Les autres régions (hébergées chez OVH, Scaleway, Cloud Temple, Ionos, Oracle) reposent sur l’infrastructure du fournisseur sous-jacent, y compris son réseau. Les changements décrits dans cet article concernent spécifiquement notre région Paris.
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Aux débuts de Clever Cloud, nous avons délégué la gestion du réseau à des partenaires. Ce choix était logique : il nous permettait d’accélérer le développement, de nous concentrer sur les services cloud, et d’éviter d’investir immédiatement dans une expertise que nous ne maîtrisions pas encore.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Mais à mesure que notre infrastructure a grandi, les limites de cette dépendance sont devenues évidentes. Nous n’avions aucun contrôle sur des décisions stratégiques : la manière dont le trafic était routé sur Internet, les chemins empruntés par nos paquets, ou la rapidité avec laquelle nous pouvions réagir aux incidents. Chaque modification, chaque incident nécessitait l’intervention d’un tiers.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous avons donc décidé de reprendre cette responsabilité. Cela nous a permis d’obtenir plusieurs avantages concrets. Nous optimisons les coûts grâce à la gestion directe de nos relations de transit et de peering. Nous définissons notre propre politique de routage au lieu de subir les contraintes d’un intermédiaire. Nous résolvons les incidents nous-mêmes, sans dépendre de fournisseurs externes. Et nous obtenons un contrôle complet de notre stack réseau — dans la continuité du contrôle que nous avons progressivement acquis sur nos serveurs et nos datacenters au cours des dernières années.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Mais cette transition ne concerne pas uniquement notre indépendance opérationnelle. Elle apporte des bénéfices immédiats et concrets pour nos utilisateurs. Le plus important est la résilience. Auparavant, l’ensemble du trafic passait par un seul fournisseur. Tout incident de leur côté impactait l’ensemble des services. Nous disposons désormais de quatre fournisseurs upstream répartis sur trois datacenters en région parisienne. Lorsqu’un lien tombe — ce qui s’est produit au cours de l’année passée — le trafic bascule automatiquement vers les alternatives disponibles, sans interruption pour les utilisateurs. Nous pouvons même absorber la perte simultanée de plusieurs liens de transit.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Au-delà de la redondance, nous gagnons le contrôle du routage lui-même. Nous décidons désormais comment le trafic atteint sa destination. Cela nous permet d’optimiser les chemins pour réduire la latence et améliorer les performances, et d’ajuster ces décisions en fonction des besoins spécifiques et de la topologie réseau. Nous réagissons en temps réel à la congestion, aux variations du réseau et aux contraintes opérationnelles.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Enfin, la responsabilité opérationnelle change. Les incidents réseau ne nécessitent plus d’attendre qu’un fournisseur externe les prenne en charge. Les défaillances du réseau public relèvent directement de notre responsabilité : nous les détectons, les analysons et les corrigeons. Cela réduit directement le temps entre l’apparition d’un problème et sa résolution, ce qui améliore la disponibilité et la fiabilité pour nos utilisateurs.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Exploiter son propre réseau sur Internet</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Pour opérer un réseau indépendant sur Internet, une organisation doit travailler avec un registre Internet régional (RIR). Les RIR sont responsables de l’attribution et de la gestion des adresses IP et des numéros d’AS dans des zones géographiques spécifiques.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Il existe cinq RIR dans le monde :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>RIPE NCC</strong> — Europe, Asie centrale et Moyen-Orient</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>ARIN</strong> — Amérique du Nord (États-Unis, Canada, Caraïbes)</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>LACNIC</strong> — Amérique latine et Caraïbes</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>APNIC</strong> — région Asie-Pacifique</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>AFRINIC</strong> — Afrique</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Pour Clever Cloud, dont l’infrastructure est principalement en Europe, nous travaillons avec le RIPE NCC (Réseaux IP Européens).</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Espace d’adressage alloué</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>En tant que membre d’un RIR, une organisation reçoit des allocations d’adresses IPv4 et IPv6. Pour les membres du RIPE NCC, cela correspond généralement à un bloc IPv4 en /24 (<a href="https://www.ripe.net/manage-ips-and-asns/ipv4/ipv4-waiting-list/">selon disponibilité</a>) et un bloc IPv6 en /29. Ces ressources sont associées à l’organisation et peuvent être utilisées pour opérer un réseau à l’échelle globale.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Création de notre système autonome</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Les bases de cette transition ont été posées plusieurs années auparavant. En 2019, nous avons créé notre compte RIPE NCC afin de devenir LIR (Local Internet Registry). Cela nous a permis d’obtenir un bloc IPv4 /24 (91.208.207.0/24) et un bloc IPv6 /29 (2a0f:d0c0::/29).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Puis, en 2022, nous avons enregistré notre numéro de système autonome (ASN) auprès du registre régional. Notre numéro d’AS est <a href="https://apps.db.ripe.net/db-web-ui/lookup?source=ripe&amp;key=AS213394&amp;type=aut-num">AS213394</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);max-width:900px;width:100%;"><code style="background:transparent;color:inherit;padding:0;font-size:inherit;font-family:inherit;">&gt; whois AS213394

aut-num:        AS213394
as-name:        CleverCloud
org:            ORG-CCS42-RIPE
import:         from AS29075 accept ANY
import:         from AS3257 accept ANY
import:         from AS3356 accept ANY
import:         from AS43424 accept ANY
export:         to AS29075 announce AS213394:AS-CLVRCLD
export:         to AS3257 announce AS213394:AS-CLVRCLD
export:         to AS3356 announce AS213394:AS-CLVRCLD
export:         to AS43424 announce AS213394:AS-CLVRCLD
admin-c:        QA171-RIPE
tech-c:         QA171-RIPE
status:         ASSIGNED
mnt-by:         RIPE-NCC-END-MNT
mnt-by:         mnt-fr-clvrcldnet-1
created:        2022-11-28T08:24:23Z
last-modified:  2025-02-25T16:36:15Z
source:         RIPE</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Un ASN (Autonomous System Number) est un identifiant unique attribué à un réseau sur Internet. Il est nécessaire pour annoncer des routes via BGP, le protocole qui permet le routage entre réseaux.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Maintenant que nous disposons d’un ASN, nous pouvons annoncer nos préfixes aux autres réseaux via le protocole BGP.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Le rôle de la base de données RIPE</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le RIPE NCC maintient une base de données publique d’objets de routage (comme l’objet <em>aut-num</em> présenté précédemment). Parmi ces objets figurent les objets de type <em>route</em>, qui indiquent quel système autonome (AS) est autorisé à annoncer un préfixe IP donné.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>En pratique, ces entrées sont principalement utilisées par les opérateurs réseau et les fournisseurs de transit pour construire leurs politiques de routage et leurs mécanismes de filtrage (filtrage basé sur l’IRR). Ces filtres permettent d’accepter ou de rejeter les annonces reçues de leurs pairs. Il s’agit d’un des mécanismes utilisés pour tenter de prévenir les détournements BGP (<em>BGP hijacks</em>).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>En appliquant ces filtres aux routes reçues de leurs pairs, les opérateurs peuvent limiter la propagation d’un préfixe annoncé par un ASN non autorisé.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Prenons un exemple : imaginons que l’organisation A possède le préfixe 192.0.2.0/24 et l’annonce à un fournisseur de transit X. Le fournisseur X applique un filtre sur les routes reçues de l’organisation A afin de n’accepter que les préfixes IP enregistrés dans la base RIR de cette organisation.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dans ce cas, si l’organisation A commence à annoncer un préfixe qui ne lui appartient pas (par exemple notre préfixe public 91.208.207.0/24), le fournisseur X est censé rejeter cette annonce. Cela permet d’éviter qu’une route incorrecte soit propagée sur Internet et que le trafic soit redirigé vers une entité non légitime.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Le protocole BGP : comment Internet route le trafic</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Pour comprendre comment nous annonçons nos préfixes sur Internet, il est essentiel de comprendre BGP — le <em>Border Gateway Protocol</em>. BGP est le protocole de routage de référence sur Internet. Il permet aux réseaux (systèmes autonomes) d’échanger des informations sur les préfixes IP qu’ils possèdent et sur la manière de les atteindre.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>BGP fonctionne dans les deux sens. Lorsque nous annonçons à nos pairs et à nos fournisseurs de transit « nous possédons 91.208.207.0/24 », cette annonce se propage sur Internet de réseau en réseau. Chaque réseau qui relaie cette annonce ajoute son propre numéro d’AS dans le <em>AS_PATH</em> — une liste qui représente la séquence de réseaux qu’un paquet doit traverser pour nous atteindre.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Par exemple, OVHcloud (AS16276) voit le chemin [AS29075, AS213394] : le trafic passe par l’un de nos fournisseurs de transit (AS29075), puis arrive jusqu’à nous (AS213394). Chaque réseau qui relaie l’annonce la met à jour de cette manière, construisant progressivement un chemin complet.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Voici un exemple obtenu via le <a href="https://lg.ovh.net/prefix_detail/lil1/ipv4?q=91.208.207.0/24">service Looking Glass d’OVHcloud</a> :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);max-width:900px;width:100%;"><code style="background:transparent;color:inherit;padding:0;font-size:inherit;font-family:inherit;">&gt; show route for 91.208.207.0/24 all

91.208.207.0/24    via 172.18.16.0 on eno1 [lil1_rbx1_bagg1_8k 2025-12-25] * (100/0) [AS213394i]
    Type: BGP unicast univ
    BGP.origin: IGP
    BGP.as_path: 29075 213394
    BGP.next_hop: 172.18.16.0
    BGP.med: 161
    BGP.local_pref: 40
    BGP.community: (0,0) (29075,18000) (65535,65281)
    BGP.23 [t]: 00 00 b8 6e
                   via 172.18.16.64 on eno1 [lil1_rbx8_bagg1_8k 2025-12-25] (100/0) [AS213394i]</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Dans le même temps, nous recevons des annonces provenant d’autres réseaux concernant leurs propres préfixes et les chemins permettant de les atteindre. Cela construit la vue inverse : lorsque nous devons envoyer du trafic sortant, nous savons quel chemin emprunter pour atteindre une destination donnée.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Voici un exemple avec un préfixe d’OVHcloud :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);max-width:900px;width:100%;"><code style="background:transparent;color:inherit;padding:0;font-size:inherit;font-family:inherit;">&gt; /routing/route/print detail where dst-address=5.39.0.0/17 and active

Ab   afi=ip4 contribution=active dst-address=5.39.0.0/17 routing-table=main pref-src=185.133.116.2 gateway=213.242.111.201 immediate-gw=213.242.111.201%sfp28-6 distance=20 scope=40 target-scope=10 belongs-to="bgp-IP-213.242.111.201"

      bgp.as-path="3356,16276" bgp.communities=3356:2,3356:2066,3356:22,16276:40001,3356:100,65002:7018,3356:123,3356:901,65002:701,65000:64990,65000:64995,65000:64996,3356:502 .med=0 .atomic-aggregate=no .origin=igp</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Dans cet exemple, le chemin réseau utilisé par OVHcloud pour nous atteindre est différent de celui que nous utilisons pour les atteindre.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Le processus de migration</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>os préfixes IP étaient entièrement gérés par notre fournisseur historique. Bien que nous en soyons propriétaires, nous lui avions délégué leur annonce sur Internet.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cela impliquait que son ASN (AS43424) apparaissait comme origine dans les tables de routage, et que l’ensemble du trafic transitait par son infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);border-left:4px solid #3b82f6;max-width:900px;width:100%;">Clever Cloud Services
   |
   | all inbound/outbound traffic
   v
Historical Provider (AS43424)
   |
   | originates: 91.208.207.0/24 (origin AS43424)
   v
Internet</pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Nous voulions que notre ASN devienne l’origine des annonces. Pour cela, nous avons planifié une migration en trois étapes, sans interruption pour les utilisateurs.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Migration d’un préfixe entre AS</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Pour migrer un préfixe d’un AS vers un autre, nous devions modifier son objet <em>route</em> dans la base de données RIPE. La procédure était relativement simple, mais nécessitait un timing précis.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous avons d’abord créé un second objet <em>route</em> dans la base RIPE pour notre préfixe 91.208.207.0/24. Désormais, les deux ASN étaient enregistrés comme autorisés à annoncer ce même préfixe — à la fois l’AS de notre fournisseur historique et notre propre AS (213394).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ces objets de routage sont interrogeables publiquement via la commande <em>whois</em> ou via l’interface web du RIPE. Par exemple, la commande suivante permet d’obtenir les deux objets enregistrés :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);max-width:900px;width:100%;"><code style="background:transparent;color:inherit;padding:0;font-size:inherit;font-family:inherit;">❯ whois -h whois.ripe.net -T route 91.208.207.0/24
% Information related to '91.208.207.0/24AS213394'

route:          91.208.207.0/24
mnt-by:         mnt-fr-clvrcldnet-1
descr:          CleverCloud subnet
origin:         AS213394
created:        2025-01-15T10:29:14Z
last-modified:  2025-01-15T10:29:14Z
source:         RIPE

% Information related to '91.208.207.0/24AS43424'

route:          91.208.207.0/24
mnt-by:         mnt-fr-clvrcldnet-1
mnt-by:         MAGICRETAIL-MNT
descr:          CleverCloud subnet
origin:         AS43424
created:        2020-02-13T09:06:33Z
last-modified:  2020-02-13T09:06:48Z
source:         RIPE</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Une fois ce second objet <em>route</em> enregistré et propagé sur Internet (c’est-à-dire une fois que les opérateurs réseau ont récupéré une version à jour de la base RIPE pour construire leurs filtres de routage), nos nouveaux fournisseurs de transit pouvaient constater que notre ASN était autorisé à annoncer ce préfixe. À partir de ce moment-là, nous pouvions commencer à annoncer ce préfixe via notre propre infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Si nous n’avions pas créé cet objet <em>route</em>, nos annonces auraient pu être rejetées et nous aurions pu être considérés comme des acteurs malveillants réalisant un détournement BGP (<em>BGP hijack</em>).</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Annonce via notre fournisseur historique</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Une fois le second objet <em>route</em> propagé, nous avons réalisé la première étape dans la nuit du 16 janvier 2025 : nous avons commencé à annoncer nous-mêmes le préfixe via BGP à notre fournisseur historique.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le trafic continuait d’emprunter le même chemin de transit, mais cette fois avec Clever Cloud (AS213394) comme origine des annonces, au lieu de notre fournisseur historique. Ce dernier continuait à relayer le préfixe, mais le recevait désormais de notre part au lieu de l’annoncer directement.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);border-left:4px solid #3b82f6;max-width:900px;width:100%;">Clever Cloud Services (AS213394)
   |
   | originates: 91.208.207.0/24 (origin AS213394)
   v
Historical Provider (AS43424)
   |
   | re-announces: 91.208.207.0/24 (origin AS213394)
   v
Internet</pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Cette première phase a servi de validation : en cas de problème, nous pouvions revenir rapidement en arrière sans impacter les autres chemins de transit.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Annonce via nos propres transits</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Quelques jours plus tard, dans la nuit du 21 janvier 2025, nous avons franchi l’étape finale : nous avons commencé à annoncer le préfixe via nos propres connexions de transit dédiées.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);border-left:4px solid #3b82f6;max-width:900px;width:100%;">Clever Cloud Services (AS213394)
   |
   | originates: 91.208.207.0/24 (origin AS213394)
   |
   +---+---+---+
   |   |   |   |
   v   v   v   v
  T1  T2  T3  HP
(Transit providers + historical provider)
   |   |   |   |
   +---+---+---+
   |
   v
Internet</pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Nous annonçons désormais nos préfixes directement à quatre fournisseurs upstream (trois fournisseurs de transit, T1/T2/T3, ainsi que notre fournisseur historique HP). Le trafic circule à travers l’ensemble de ces chemins, et nous disposons d’un contrôle complet sur les décisions de routage ainsi que sur la redondance.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Tout au long de ces deux phases, nous n’avons observé aucune interruption ayant un impact pour les utilisateurs. La redondance intrinsèque du protocole BGP, combinée à la nature progressive de la transition, a permis d’assurer un écoulement du trafic sans interruption, quel que soit le chemin privilégié à un instant donné.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Visibilité complète du routage Internet</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Dans le cadre de la phase 2, nos trois principaux fournisseurs de transit ont commencé à nous fournir une « full view » de la table de routage Internet. Il s’agit de l’ensemble complet des préfixes IPv4 et IPv6 publiquement annoncés — soit environ 1 million de routes IPv4 et 220 000 routes IPv6.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Disposer d’une full view nous offre une visibilité inédite sur la structure d’Internet et nous permet de prendre des décisions de routage avancées. Au lieu de dépendre de la vision d’un seul fournisseur, nous avons désormais accès à l’ensemble des chemins disponibles pour atteindre n’importe quelle destination.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Avec ces informations, nous sommes en mesure de choisir les chemins optimaux pour notre trafic sortant en fonction de notre topologie réseau et de nos préférences, de mettre en œuvre du <em>traffic engineering</em> pour diriger les flux via des fournisseurs de transit spécifiques, de réagir dynamiquement aux conditions réseau et à la congestion, et d’équilibrer la charge entre nos quatre connexions de transit en nous appuyant sur des données de routage en temps réel.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ce niveau de contrôle fin sur notre politique de routage est une conséquence directe de l’exploitation de notre propre système autonome et de la gestion de nos propres annonces — exactement le niveau d’indépendance opérationnelle que nous recherchions au début de cette transition.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Un an plus tard</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Près d’un an après le début de l’exploitation de nos propres annonces réseau, la transition s’est révélée concluante. Nous n’avons rencontré aucun incident majeur et notre infrastructure a démontré sa résilience. Lorsque des incidents mineurs se sont produits — comme des pertes de paquets sur un fournisseur de transit spécifique ou la perte temporaire d’un lien — le trafic s’est automatiquement rééquilibré sur les connexions restantes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous avons pu détecter et corriger ces problèmes directement, sans dépendre d’un fournisseur tiers. Nos utilisateurs n’ont subi aucune interruption ayant un impact. Cette capacité à assumer la responsabilité de notre réseau et à résoudre rapidement les problèmes est sans doute le principal bénéfice de cette transition.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Et ensuite</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Cette transition est loin d’être terminée. Plusieurs évolutions sont prévues :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>augmentation de la capacité réseau</strong> pour absorber la croissance du trafic</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>mise en place de <strong>peering BGP</strong> avec d’autres réseaux pour optimiser le trafic local sans recourir au transit</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>déploiement de <strong>ROA (Route Origin Authorization)</strong> pour signer cryptographiquement nos annonces et prévenir les détournements de préfixes</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>validation <strong>RPKI (Resource Public Key Infrastructure)</strong> pour vérifier la légitimité des annonces reçues et renforcer la sécurité du routage</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>extension d’IPv6</strong>, en entrée (réception de trafic IPv6) comme en sortie (émission de trafic IPv6), déployée progressivement</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Conclusion</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Début 2025, Clever Cloud a finalisé sa transition vers une exploitation entièrement autonome de son réseau. Nous annonçons désormais nos propres préfixes IP via quatre fournisseurs upstream, ce qui nous donne un contrôle complet sur la manière dont le trafic entre et sort de notre infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour nos utilisateurs, cela se traduit par une meilleure fiabilité et des temps de résolution plus courts dans notre région Paris. Lorsqu’un incident réseau survient, nous le traitons directement, et notre redondance multi-fournisseurs garantit la continuité du trafic.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette étape marque le début d’une nouvelle phase. Nous travaillons déjà sur le peering BGP pour optimiser le trafic local, sur le déploiement de ROA et la validation RPKI pour renforcer la sécurité du routage, ainsi que sur l’extension d’IPv6 pour généraliser le dual-stack. Nous construisons un réseau aussi robuste et autonome que le reste de notre infrastructure.</p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="2499" height="1109" src="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-fr-1.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="2026 03 17 clever cloud banniere blog clever cloud controle lannonce de ses prefixes ip fr 1" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-fr-1.png 2499w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-fr-1-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-fr-1-1024x454.png 1024w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-fr-1-768x341.png 768w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-fr-1-1536x682.png 1536w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-fr-1-2048x909.png 2048w, https://cdn.clever-cloud.com/uploads/2026/03/2026-03-17-clever-cloud-banniere-blog-clever-cloud-controle-lannonce-de-ses-prefixes-ip-fr-1-1368x607.png 1368w" sizes="auto, (max-width: 2499px) 100vw, 2499px" /></p><!-- wp:paragraph -->
<p>Cela représente une étape importante, issue de trois années de préparation, et s’inscrit dans une stratégie plus large visant à conserver un contrôle complet sur l’infrastructure réseau de notre région Paris.<br></p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Pourquoi ce changement</h2>
<!-- /wp:heading -->

<!-- wp:html -->
<div style="max-width:780px;margin:1.5rem auto;background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:15px;line-height:1.7;box-shadow:0 1px 2px rgba(0,0,0,0.08);border:1px solid rgba(255,255,255,0.08);">
  <strong style="color:#e5eefc;">Note :</strong> Clever Cloud opère plusieurs régions dans le monde. Paris est notre région principale — la plus importante — où nous contrôlons l’ensemble de la stack : notre propre matériel, notre propre réseau, et désormais l’annonce de nos préfixes IP. Les autres régions (hébergées chez OVH, Scaleway, Cloud Temple, Ionos, Oracle) reposent sur l’infrastructure du fournisseur sous-jacent, y compris son réseau. Les changements décrits dans cet article concernent spécifiquement notre région Paris.
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Aux débuts de Clever Cloud, nous avons délégué la gestion du réseau à des partenaires. Ce choix était logique : il nous permettait d’accélérer le développement, de nous concentrer sur les services cloud, et d’éviter d’investir immédiatement dans une expertise que nous ne maîtrisions pas encore.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Mais à mesure que notre infrastructure a grandi, les limites de cette dépendance sont devenues évidentes. Nous n’avions aucun contrôle sur des décisions stratégiques : la manière dont le trafic était routé sur Internet, les chemins empruntés par nos paquets, ou la rapidité avec laquelle nous pouvions réagir aux incidents. Chaque modification, chaque incident nécessitait l’intervention d’un tiers.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous avons donc décidé de reprendre cette responsabilité. Cela nous a permis d’obtenir plusieurs avantages concrets. Nous optimisons les coûts grâce à la gestion directe de nos relations de transit et de peering. Nous définissons notre propre politique de routage au lieu de subir les contraintes d’un intermédiaire. Nous résolvons les incidents nous-mêmes, sans dépendre de fournisseurs externes. Et nous obtenons un contrôle complet de notre stack réseau — dans la continuité du contrôle que nous avons progressivement acquis sur nos serveurs et nos datacenters au cours des dernières années.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Mais cette transition ne concerne pas uniquement notre indépendance opérationnelle. Elle apporte des bénéfices immédiats et concrets pour nos utilisateurs. Le plus important est la résilience. Auparavant, l’ensemble du trafic passait par un seul fournisseur. Tout incident de leur côté impactait l’ensemble des services. Nous disposons désormais de quatre fournisseurs upstream répartis sur trois datacenters en région parisienne. Lorsqu’un lien tombe — ce qui s’est produit au cours de l’année passée — le trafic bascule automatiquement vers les alternatives disponibles, sans interruption pour les utilisateurs. Nous pouvons même absorber la perte simultanée de plusieurs liens de transit.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Au-delà de la redondance, nous gagnons le contrôle du routage lui-même. Nous décidons désormais comment le trafic atteint sa destination. Cela nous permet d’optimiser les chemins pour réduire la latence et améliorer les performances, et d’ajuster ces décisions en fonction des besoins spécifiques et de la topologie réseau. Nous réagissons en temps réel à la congestion, aux variations du réseau et aux contraintes opérationnelles.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Enfin, la responsabilité opérationnelle change. Les incidents réseau ne nécessitent plus d’attendre qu’un fournisseur externe les prenne en charge. Les défaillances du réseau public relèvent directement de notre responsabilité : nous les détectons, les analysons et les corrigeons. Cela réduit directement le temps entre l’apparition d’un problème et sa résolution, ce qui améliore la disponibilité et la fiabilité pour nos utilisateurs.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Exploiter son propre réseau sur Internet</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Pour opérer un réseau indépendant sur Internet, une organisation doit travailler avec un registre Internet régional (RIR). Les RIR sont responsables de l’attribution et de la gestion des adresses IP et des numéros d’AS dans des zones géographiques spécifiques.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Il existe cinq RIR dans le monde :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>RIPE NCC</strong> — Europe, Asie centrale et Moyen-Orient</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>ARIN</strong> — Amérique du Nord (États-Unis, Canada, Caraïbes)</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>LACNIC</strong> — Amérique latine et Caraïbes</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>APNIC</strong> — région Asie-Pacifique</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>AFRINIC</strong> — Afrique</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Pour Clever Cloud, dont l’infrastructure est principalement en Europe, nous travaillons avec le RIPE NCC (Réseaux IP Européens).</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Espace d’adressage alloué</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>En tant que membre d’un RIR, une organisation reçoit des allocations d’adresses IPv4 et IPv6. Pour les membres du RIPE NCC, cela correspond généralement à un bloc IPv4 en /24 (<a href="https://www.ripe.net/manage-ips-and-asns/ipv4/ipv4-waiting-list/">selon disponibilité</a>) et un bloc IPv6 en /29. Ces ressources sont associées à l’organisation et peuvent être utilisées pour opérer un réseau à l’échelle globale.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Création de notre système autonome</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Les bases de cette transition ont été posées plusieurs années auparavant. En 2019, nous avons créé notre compte RIPE NCC afin de devenir LIR (Local Internet Registry). Cela nous a permis d’obtenir un bloc IPv4 /24 (91.208.207.0/24) et un bloc IPv6 /29 (2a0f:d0c0::/29).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Puis, en 2022, nous avons enregistré notre numéro de système autonome (ASN) auprès du registre régional. Notre numéro d’AS est <a href="https://apps.db.ripe.net/db-web-ui/lookup?source=ripe&amp;key=AS213394&amp;type=aut-num">AS213394</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);max-width:900px;width:100%;"><code style="background:transparent;color:inherit;padding:0;font-size:inherit;font-family:inherit;">&gt; whois AS213394

aut-num:        AS213394
as-name:        CleverCloud
org:            ORG-CCS42-RIPE
import:         from AS29075 accept ANY
import:         from AS3257 accept ANY
import:         from AS3356 accept ANY
import:         from AS43424 accept ANY
export:         to AS29075 announce AS213394:AS-CLVRCLD
export:         to AS3257 announce AS213394:AS-CLVRCLD
export:         to AS3356 announce AS213394:AS-CLVRCLD
export:         to AS43424 announce AS213394:AS-CLVRCLD
admin-c:        QA171-RIPE
tech-c:         QA171-RIPE
status:         ASSIGNED
mnt-by:         RIPE-NCC-END-MNT
mnt-by:         mnt-fr-clvrcldnet-1
created:        2022-11-28T08:24:23Z
last-modified:  2025-02-25T16:36:15Z
source:         RIPE</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Un ASN (Autonomous System Number) est un identifiant unique attribué à un réseau sur Internet. Il est nécessaire pour annoncer des routes via BGP, le protocole qui permet le routage entre réseaux.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Maintenant que nous disposons d’un ASN, nous pouvons annoncer nos préfixes aux autres réseaux via le protocole BGP.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Le rôle de la base de données RIPE</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le RIPE NCC maintient une base de données publique d’objets de routage (comme l’objet <em>aut-num</em> présenté précédemment). Parmi ces objets figurent les objets de type <em>route</em>, qui indiquent quel système autonome (AS) est autorisé à annoncer un préfixe IP donné.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>En pratique, ces entrées sont principalement utilisées par les opérateurs réseau et les fournisseurs de transit pour construire leurs politiques de routage et leurs mécanismes de filtrage (filtrage basé sur l’IRR). Ces filtres permettent d’accepter ou de rejeter les annonces reçues de leurs pairs. Il s’agit d’un des mécanismes utilisés pour tenter de prévenir les détournements BGP (<em>BGP hijacks</em>).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>En appliquant ces filtres aux routes reçues de leurs pairs, les opérateurs peuvent limiter la propagation d’un préfixe annoncé par un ASN non autorisé.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Prenons un exemple : imaginons que l’organisation A possède le préfixe 192.0.2.0/24 et l’annonce à un fournisseur de transit X. Le fournisseur X applique un filtre sur les routes reçues de l’organisation A afin de n’accepter que les préfixes IP enregistrés dans la base RIR de cette organisation.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Dans ce cas, si l’organisation A commence à annoncer un préfixe qui ne lui appartient pas (par exemple notre préfixe public 91.208.207.0/24), le fournisseur X est censé rejeter cette annonce. Cela permet d’éviter qu’une route incorrecte soit propagée sur Internet et que le trafic soit redirigé vers une entité non légitime.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Le protocole BGP : comment Internet route le trafic</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Pour comprendre comment nous annonçons nos préfixes sur Internet, il est essentiel de comprendre BGP — le <em>Border Gateway Protocol</em>. BGP est le protocole de routage de référence sur Internet. Il permet aux réseaux (systèmes autonomes) d’échanger des informations sur les préfixes IP qu’ils possèdent et sur la manière de les atteindre.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>BGP fonctionne dans les deux sens. Lorsque nous annonçons à nos pairs et à nos fournisseurs de transit « nous possédons 91.208.207.0/24 », cette annonce se propage sur Internet de réseau en réseau. Chaque réseau qui relaie cette annonce ajoute son propre numéro d’AS dans le <em>AS_PATH</em> — une liste qui représente la séquence de réseaux qu’un paquet doit traverser pour nous atteindre.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Par exemple, OVHcloud (AS16276) voit le chemin [AS29075, AS213394] : le trafic passe par l’un de nos fournisseurs de transit (AS29075), puis arrive jusqu’à nous (AS213394). Chaque réseau qui relaie l’annonce la met à jour de cette manière, construisant progressivement un chemin complet.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Voici un exemple obtenu via le <a href="https://lg.ovh.net/prefix_detail/lil1/ipv4?q=91.208.207.0/24">service Looking Glass d’OVHcloud</a> :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);max-width:900px;width:100%;"><code style="background:transparent;color:inherit;padding:0;font-size:inherit;font-family:inherit;">&gt; show route for 91.208.207.0/24 all

91.208.207.0/24    via 172.18.16.0 on eno1 [lil1_rbx1_bagg1_8k 2025-12-25] * (100/0) [AS213394i]
    Type: BGP unicast univ
    BGP.origin: IGP
    BGP.as_path: 29075 213394
    BGP.next_hop: 172.18.16.0
    BGP.med: 161
    BGP.local_pref: 40
    BGP.community: (0,0) (29075,18000) (65535,65281)
    BGP.23 [t]: 00 00 b8 6e
                   via 172.18.16.64 on eno1 [lil1_rbx8_bagg1_8k 2025-12-25] (100/0) [AS213394i]</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Dans le même temps, nous recevons des annonces provenant d’autres réseaux concernant leurs propres préfixes et les chemins permettant de les atteindre. Cela construit la vue inverse : lorsque nous devons envoyer du trafic sortant, nous savons quel chemin emprunter pour atteindre une destination donnée.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Voici un exemple avec un préfixe d’OVHcloud :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);max-width:900px;width:100%;"><code style="background:transparent;color:inherit;padding:0;font-size:inherit;font-family:inherit;">&gt; /routing/route/print detail where dst-address=5.39.0.0/17 and active

Ab   afi=ip4 contribution=active dst-address=5.39.0.0/17 routing-table=main pref-src=185.133.116.2 gateway=213.242.111.201 immediate-gw=213.242.111.201%sfp28-6 distance=20 scope=40 target-scope=10 belongs-to="bgp-IP-213.242.111.201"

      bgp.as-path="3356,16276" bgp.communities=3356:2,3356:2066,3356:22,16276:40001,3356:100,65002:7018,3356:123,3356:901,65002:701,65000:64990,65000:64995,65000:64996,3356:502 .med=0 .atomic-aggregate=no .origin=igp</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Dans cet exemple, le chemin réseau utilisé par OVHcloud pour nous atteindre est différent de celui que nous utilisons pour les atteindre.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Le processus de migration</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>os préfixes IP étaient entièrement gérés par notre fournisseur historique. Bien que nous en soyons propriétaires, nous lui avions délégué leur annonce sur Internet.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cela impliquait que son ASN (AS43424) apparaissait comme origine dans les tables de routage, et que l’ensemble du trafic transitait par son infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);border-left:4px solid #3b82f6;max-width:900px;width:100%;">Clever Cloud Services
   |
   | all inbound/outbound traffic
   v
Historical Provider (AS43424)
   |
   | originates: 91.208.207.0/24 (origin AS43424)
   v
Internet</pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Nous voulions que notre ASN devienne l’origine des annonces. Pour cela, nous avons planifié une migration en trois étapes, sans interruption pour les utilisateurs.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Migration d’un préfixe entre AS</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Pour migrer un préfixe d’un AS vers un autre, nous devions modifier son objet <em>route</em> dans la base de données RIPE. La procédure était relativement simple, mais nécessitait un timing précis.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous avons d’abord créé un second objet <em>route</em> dans la base RIPE pour notre préfixe 91.208.207.0/24. Désormais, les deux ASN étaient enregistrés comme autorisés à annoncer ce même préfixe — à la fois l’AS de notre fournisseur historique et notre propre AS (213394).</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ces objets de routage sont interrogeables publiquement via la commande <em>whois</em> ou via l’interface web du RIPE. Par exemple, la commande suivante permet d’obtenir les deux objets enregistrés :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);max-width:900px;width:100%;"><code style="background:transparent;color:inherit;padding:0;font-size:inherit;font-family:inherit;">❯ whois -h whois.ripe.net -T route 91.208.207.0/24
% Information related to '91.208.207.0/24AS213394'

route:          91.208.207.0/24
mnt-by:         mnt-fr-clvrcldnet-1
descr:          CleverCloud subnet
origin:         AS213394
created:        2025-01-15T10:29:14Z
last-modified:  2025-01-15T10:29:14Z
source:         RIPE

% Information related to '91.208.207.0/24AS43424'

route:          91.208.207.0/24
mnt-by:         mnt-fr-clvrcldnet-1
mnt-by:         MAGICRETAIL-MNT
descr:          CleverCloud subnet
origin:         AS43424
created:        2020-02-13T09:06:33Z
last-modified:  2020-02-13T09:06:48Z
source:         RIPE</code></pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Une fois ce second objet <em>route</em> enregistré et propagé sur Internet (c’est-à-dire une fois que les opérateurs réseau ont récupéré une version à jour de la base RIPE pour construire leurs filtres de routage), nos nouveaux fournisseurs de transit pouvaient constater que notre ASN était autorisé à annoncer ce préfixe. À partir de ce moment-là, nous pouvions commencer à annoncer ce préfixe via notre propre infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Si nous n’avions pas créé cet objet <em>route</em>, nos annonces auraient pu être rejetées et nous aurions pu être considérés comme des acteurs malveillants réalisant un détournement BGP (<em>BGP hijack</em>).</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Annonce via notre fournisseur historique</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Une fois le second objet <em>route</em> propagé, nous avons réalisé la première étape dans la nuit du 16 janvier 2025 : nous avons commencé à annoncer nous-mêmes le préfixe via BGP à notre fournisseur historique.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le trafic continuait d’emprunter le même chemin de transit, mais cette fois avec Clever Cloud (AS213394) comme origine des annonces, au lieu de notre fournisseur historique. Ce dernier continuait à relayer le préfixe, mais le recevait désormais de notre part au lieu de l’annoncer directement.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);border-left:4px solid #3b82f6;max-width:900px;width:100%;">Clever Cloud Services (AS213394)
   |
   | originates: 91.208.207.0/24 (origin AS213394)
   v
Historical Provider (AS43424)
   |
   | re-announces: 91.208.207.0/24 (origin AS213394)
   v
Internet</pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Cette première phase a servi de validation : en cas de problème, nous pouvions revenir rapidement en arrière sans impacter les autres chemins de transit.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Annonce via nos propres transits</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Quelques jours plus tard, dans la nuit du 21 janvier 2025, nous avons franchi l’étape finale : nous avons commencé à annoncer le préfixe via nos propres connexions de transit dédiées.</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<div style="display:flex;justify-content:center;">
<pre style="background:#0f172a;color:#e5eefc;border-radius:12px;padding:16px 20px;overflow-x:auto;white-space:pre;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,'Liberation Mono','Courier New',monospace;font-size:14px;line-height:1.6;margin:1.5rem 0;box-shadow:0 1px 2px rgba(0,0,0,0.08);border-left:4px solid #3b82f6;max-width:900px;width:100%;">Clever Cloud Services (AS213394)
   |
   | originates: 91.208.207.0/24 (origin AS213394)
   |
   +---+---+---+
   |   |   |   |
   v   v   v   v
  T1  T2  T3  HP
(Transit providers + historical provider)
   |   |   |   |
   +---+---+---+
   |
   v
Internet</pre>
</div>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Nous annonçons désormais nos préfixes directement à quatre fournisseurs upstream (trois fournisseurs de transit, T1/T2/T3, ainsi que notre fournisseur historique HP). Le trafic circule à travers l’ensemble de ces chemins, et nous disposons d’un contrôle complet sur les décisions de routage ainsi que sur la redondance.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Tout au long de ces deux phases, nous n’avons observé aucune interruption ayant un impact pour les utilisateurs. La redondance intrinsèque du protocole BGP, combinée à la nature progressive de la transition, a permis d’assurer un écoulement du trafic sans interruption, quel que soit le chemin privilégié à un instant donné.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Visibilité complète du routage Internet</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Dans le cadre de la phase 2, nos trois principaux fournisseurs de transit ont commencé à nous fournir une « full view » de la table de routage Internet. Il s’agit de l’ensemble complet des préfixes IPv4 et IPv6 publiquement annoncés — soit environ 1 million de routes IPv4 et 220 000 routes IPv6.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Disposer d’une full view nous offre une visibilité inédite sur la structure d’Internet et nous permet de prendre des décisions de routage avancées. Au lieu de dépendre de la vision d’un seul fournisseur, nous avons désormais accès à l’ensemble des chemins disponibles pour atteindre n’importe quelle destination.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Avec ces informations, nous sommes en mesure de choisir les chemins optimaux pour notre trafic sortant en fonction de notre topologie réseau et de nos préférences, de mettre en œuvre du <em>traffic engineering</em> pour diriger les flux via des fournisseurs de transit spécifiques, de réagir dynamiquement aux conditions réseau et à la congestion, et d’équilibrer la charge entre nos quatre connexions de transit en nous appuyant sur des données de routage en temps réel.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ce niveau de contrôle fin sur notre politique de routage est une conséquence directe de l’exploitation de notre propre système autonome et de la gestion de nos propres annonces — exactement le niveau d’indépendance opérationnelle que nous recherchions au début de cette transition.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Un an plus tard</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Près d’un an après le début de l’exploitation de nos propres annonces réseau, la transition s’est révélée concluante. Nous n’avons rencontré aucun incident majeur et notre infrastructure a démontré sa résilience. Lorsque des incidents mineurs se sont produits — comme des pertes de paquets sur un fournisseur de transit spécifique ou la perte temporaire d’un lien — le trafic s’est automatiquement rééquilibré sur les connexions restantes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous avons pu détecter et corriger ces problèmes directement, sans dépendre d’un fournisseur tiers. Nos utilisateurs n’ont subi aucune interruption ayant un impact. Cette capacité à assumer la responsabilité de notre réseau et à résoudre rapidement les problèmes est sans doute le principal bénéfice de cette transition.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Et ensuite</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Cette transition est loin d’être terminée. Plusieurs évolutions sont prévues :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>augmentation de la capacité réseau</strong> pour absorber la croissance du trafic</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>mise en place de <strong>peering BGP</strong> avec d’autres réseaux pour optimiser le trafic local sans recourir au transit</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>déploiement de <strong>ROA (Route Origin Authorization)</strong> pour signer cryptographiquement nos annonces et prévenir les détournements de préfixes</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>validation <strong>RPKI (Resource Public Key Infrastructure)</strong> pour vérifier la légitimité des annonces reçues et renforcer la sécurité du routage</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>extension d’IPv6</strong>, en entrée (réception de trafic IPv6) comme en sortie (émission de trafic IPv6), déployée progressivement</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading -->
<h2 class="wp-block-heading">Conclusion</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Début 2025, Clever Cloud a finalisé sa transition vers une exploitation entièrement autonome de son réseau. Nous annonçons désormais nos propres préfixes IP via quatre fournisseurs upstream, ce qui nous donne un contrôle complet sur la manière dont le trafic entre et sort de notre infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour nos utilisateurs, cela se traduit par une meilleure fiabilité et des temps de résolution plus courts dans notre région Paris. Lorsqu’un incident réseau survient, nous le traitons directement, et notre redondance multi-fournisseurs garantit la continuité du trafic.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cette étape marque le début d’une nouvelle phase. Nous travaillons déjà sur le peering BGP pour optimiser le trafic local, sur le déploiement de ROA et la validation RPKI pour renforcer la sécurité du routage, ainsi que sur l’extension d’IPv6 pour généraliser le dual-stack. Nous construisons un réseau aussi robuste et autonome que le reste de notre infrastructure.</p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CKE en bêta publique : Kubernetes managé, souverain, et vraiment intégré</title>
		<link>https://www.clever.cloud/fr/blog/entreprise/2026/04/27/cke-en-beta-publique-kubernetes-manage-souverain-et-vraiment-integre/</link>
		
		<dc:creator><![CDATA[Horacio Gonzalez]]></dc:creator>
		<pubDate>Mon, 27 Apr 2026 15:10:56 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Entreprise]]></category>
		<category><![CDATA[Fonctionnalités]]></category>
		<category><![CDATA[cke]]></category>
		<category><![CDATA[K8S]]></category>
		<category><![CDATA[kubernetes]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=24224</guid>

					<description><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-fr.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Clever Cloud Bannière CKE" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-fr.png 800w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-fr-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-fr-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>Nous avons donc construit notre propre orchestrateur. Il repose sur des micro-VMs et nous donne une frontière kernel propre entre les workloads, sans partage de noyau entre tenants. C'est ce qui fait tourner aujourd'hui des dizaines de milliers d'applications en production sur notre <a href="https://www.clever.cloud/fr/paas/">PaaS</a>, et c'est encore, pour la plupart des projets, le chemin le plus court entre un commit et de la production.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Quand Docker est arrivé, certains workloads se prêtaient mieux à une image conteneurisée qu'à nos runtimes natifs. Nous avons donc ajouté un runtime Docker à la plateforme, là où ça avait du sens. Pas pour remplacer notre approche, mais pour l'élargir.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Puis Kubernetes s'est imposé comme le standard de fait de l'orchestration de conteneurs. Son écosystème (Helm, opérateurs, GitOps…) est devenu incontournable pour de nombreuses équipes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous aurions pu continuer à répondre que, dans beaucoup de cas, Kubernetes n'est pas le meilleur chemin vers la production. C'est toujours vrai.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Mais ça ne suffisait plus.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est pour ça que nous lançons <a href="https://www.clever.cloud/fr/clever-kubernetes-engine/">CKE, notre Clever Kubernetes Engine</a>, aujourd'hui disponible en bêta publique.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Comme beaucoup le savent, pendant des années, nous avons résisté à l'idée de proposer Kubernetes comme une case à cocher de plus dans la Console. Non pas parce que Kubernetes ne sert à rien, mais parce qu'il est trop souvent devenu une réponse par défaut à des problèmes que le PaaS résout plus simplement : déployer une application, la scaler, la superviser, l'isoler, lui connecter une base de données, gérer ses variables d'environnement, ses logs et son cycle de vie. Et nous le pensons toujours.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Mais Kubernetes est devenu le langage commun d'une grande partie de l'écosystème cloud-native. Helm, les opérateurs, GitOps, les workloads déjà conteneurisés, les plateformes internes et les chaînes d'outillage existantes font partie de la réalité quotidienne de nombreuses équipes. Et notre raison d'être est de faciliter la vie des équipes techniques.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La question n'était donc plus "faut-il faire du Kubernetes ?", mais "peut-on faire du Kubernetes sans renier ce qui fait Clever Cloud ?"</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="pas-un-kubernetes-empaqueté-à-la-va-vite">Pas un Kubernetes empaqueté à la va-vite</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le chemin le plus rapide pour proposer du Kubernetes managé, c'est d'empaqueter une distribution upstream derrière une console d’administration, d'ajouter une API de provisioning, et de facturer le cluster à l'heure.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est une stratégie valide pour sortir vite.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ce n'est pas celle que nous voulions.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour CKE, nous avions trois exigences qui ne se résolvent pas en ajoutant simplement Kubernetes à côté du reste de la plateforme.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La première, c'est la souveraineté. CKE est opéré en Europe, sur notre infrastructure et celle de nos partenaires, et peut aussi être déployé sur les infrastructures on-premises de nos clients qui en ont besoin. Pas de dépendance aux hyperscalers américains, pas de zones grises sur la juridiction des données, pas de promesse floue sur la localisation réelle de l'infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La deuxième, c'est l'intégration avec le reste de Clever Cloud. Nous ne voulions pas créer un silo Kubernetes à côté du PaaS, des bases de données managées, du stockage objet et du réseau privé. Nous voulions un Kubernetes qui s'inscrive dans la même plateforme, avec la même Console, le même outillage, la même facturation, les mêmes règles de gouvernance et les mêmes <a href="https://www.clever.cloud/fr/blog/entreprise/2025/03/19/services-manages-de-quoi-sagit-il/">services managés</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La troisième, c'est la prévisibilité opérationnelle. Kubernetes est un système distribué complexe, et son comportement sous charge dépend beaucoup de ses fondations. Nous ne voulions pas opérer un produit dont la couche basse resterait une boîte noire ou une limite acceptée par défaut.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est ce qui nous a amenés à travailler à un endroit que peu de fournisseurs touchent : la couche de cohérence interne de Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="sous-le-capot--materia-etcd-sur-foundationdb">Sous le capot : Materia etcd sur FoundationDB</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Dans Kubernetes, etcd est le composant qui stocke l'état du cluster : les manifests, les ressources, les secrets, l'état des nœuds. C'est la source de vérité de tout l'orchestrateur.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est aussi l'un des composants les plus sensibles du système.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>etcd fonctionne très bien dans le cadre pour lequel il a été conçu. Mais ses limites à grande échelle sont connues : taille du store, latences sous forte charge en écriture, comportement en cas de partition réseau, opérations de sauvegarde et restauration, besoin de compaction et de surveillance fine. Quand Kubernetes devient une fondation critique, etcd devient un sujet d'exploitation à part entière.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous ne voulions pas construire CKE sur une brique que nous considérerions ensuite comme une boîte noire fragile.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous avons donc repris le problème à sa racine : conserver le contrat attendu par Kubernetes, mais remplacer la couche de cohérence interne par une implémentation adossée à FoundationDB. C'est ce que nous appelons Materia etcd.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>FoundationDB nous apporte des transactions ACID distribuées, un modèle de cohérence robuste, et une approche de&nbsp;<a href="https://apple.github.io/foundationdb/testing.html">testing par simulation déterministe</a>&nbsp;qui correspond très bien à notre manière de construire de l'infrastructure critique.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour l'utilisateur final, ce travail est invisible. C'est précisément le but. Sous le capot, cette fondation nous permet de construire CKE avec l'auto-scaling, l'auto-healing et la prévisibilité opérationnelle que nous attendons d'un service Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous reviendrons bientôt plus en détail sur Materia etcd, parce que le sujet mérite un article dédié.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="du-kubernetes-standard-côté-développeur">Du Kubernetes standard côté développeur</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Tout ce travail sur la couche basse a un objectif simple : côté utilisateur, CKE doit être du Kubernetes standard.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Vos manifests fonctionnent sans modification. Vos charts Helm s'installent normalement. Votre Argo CD ou votre Flux se branche comme sur n'importe quel cluster. Vos opérateurs Kubernetes tournent sans surprise.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CKE ne cherche pas à réinventer l'interface développeur de Kubernetes. Ce serait contre-productif. Si vous avez déjà une chaîne de déploiement Kubernetes, l'objectif est qu'elle puisse fonctionner sur CKE avec le moins de friction possible.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La différence se joue ailleurs : dans la manière dont ce Kubernetes s'intègre au reste de la plateforme Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="kubernetes-quand-vous-en-avez-besoin-le-paas-quand-il-suffit">Kubernetes quand vous en avez besoin, le PaaS quand il suffit</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>CKE ne remplace pas notre PaaS. Il le complète.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour beaucoup d'applications, le PaaS reste le meilleur choix : moins d'exploitation, moins de configuration, moins de YAML, moins de surface de maintenance. Si votre application rentre naturellement dans un runtime Clever Cloud, le PaaS reste souvent le chemin le plus simple et le plus robuste.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Mais il y a des cas où Kubernetes est le bon outil.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Vous avez peut-être besoin :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>D'installer un opérateur ;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>De reprendre des manifests existants ; </li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>De standardiser une chaîne GitOps ;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>De déployer un workload déjà distribué sous forme de chart Helm ;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>De faire tourner une plateforme interne construite autour de l'API Kubernetes ;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Ou simplement de répondre aux habitudes d'une équipe qui travaille déjà avec Kubernetes au quotidien.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Dans ces cas-là, le problème n'est pas Kubernetes en soi. Le problème, c'est Kubernetes isolé du reste de votre système.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est là que CKE change les choses. Vous pouvez garder une API Node.js sur le PaaS, un frontend statique sur Cellar, une base PostgreSQL managée, et faire tourner sur CKE uniquement le composant, l'opérateur ou le workload qui a réellement besoin de Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le tout dans le même environnement Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="une-intégration-native-avec-lécosystème-clever-cloud">Une intégration native avec l'écosystème Clever Cloud</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>CKE a été conçu pour s'intégrer avec les services que vous utilisez déjà sur Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>Cellar</strong>, notre stockage objet compatible S3, peut être utilisé depuis vos workloads Kubernetes.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Les bases de données managées</strong>&nbsp;(PostgreSQL, MySQL, MongoDB, Redis, Materia) s'attachent à votre cluster comme aux autres applications Clever Cloud.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>IAM as a Service</strong>&nbsp;permet de gérer l'authentification et les permissions sur le cluster et sur les équipes qui y accèdent.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Network Groups</strong>&nbsp;permet de relier votre cluster CKE à vos applications PaaS Clever Cloud existantes, dans le même réseau privé.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>L’intégration avec Network Groups est probablement celle qui change le plus le quotidien.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Kubernetes est souvent introduit dans les organisations comme une nouvelle île : nouvelle console, nouveau réseau, nouveaux secrets, nouvelles règles d'accès, nouvelle facturation, nouvelle façon de connecter les services entre eux.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Avec CKE, l'objectif est inverse. Kubernetes devient une brique de plus dans l'architecture Clever Cloud, pas un monde parallèle.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Vous pouvez donc construire une architecture hybride sans bricolage : une partie sur le PaaS, une partie sur CKE, des bases de données managées, du stockage objet, du réseau privé, et une gouvernance commune.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="activer-cke-et-déployer-une-première-application">Activer CKE et déployer une première application</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Pour cette démo, on va rester sur le minimum vital : activer la fonctionnalité, créer un cluster, récupérer un kubeconfig, ajouter un node group et déployer une première application avec un service de type&nbsp;<code>LoadBalancer</code>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Côté prérequis, il faut avoir&nbsp;<a href="https://www.clever.cloud/developers/doc/cli/">Clever Tools</a>&nbsp;en version 4.3 ou supérieure, et&nbsp;<code>kubectl</code>&nbsp;installé sur votre poste.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Depuis l'ouverture de la bêta publique le 27 avril, la fonctionnalité Kubernetes peut être activée par tous les clients Clever Cloud, en une commande :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">clever features enable k8s</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>On peut alors créer un cluster. Donnez-lui un nom, précisez votre organisation, et l'option&nbsp;<code>--watch</code>&nbsp;permet de suivre l'avancement du déploiement :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">clever k8s create my-cluster --org &lt;your-org-id&gt; --watch</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>La création prend environ une minute. À tout moment, on peut lister les clusters de l'organisation avec&nbsp;<code>clever k8s list</code>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Une fois le cluster prêt, on récupère son kubeconfig et on l'écrit directement comme configuration locale par défaut :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">clever k8s get-kubeconfig my-cluster --org &lt;your-org-id&gt; &gt; ~/.kube/config</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>À partir de là, c'est du Kubernetes standard.&nbsp;<code>kubectl</code>&nbsp;parle au cluster, et tout votre outillage habituel suit. On peut commencer par vérifier que tout est en place :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl get nodes</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>À ce stade, la liste est vide : le cluster est créé mais sans capacité de calcul. C'est l'occasion d'introduire la première spécificité de CKE côté API : le&nbsp;<code>NodeGroup</code>. Un node group est un ensemble de nœuds Kubernetes de même profil (même flavor, même région), gérés comme un tout. Vous le décrivez comme n'importe quelle ressource Kubernetes, dans un fichier YAML :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-yaml">apiVersion: api.clever-cloud.com/v1
kind: NodeGroup
metadata:
  name: example-nodegroup
spec:
  flavor: M
  nodeCount: 2</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Et vous l'appliquez avec&nbsp;<code>kubectl</code>&nbsp;:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl create -f example-nodegroup.yaml</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Soixante à quatre-vingt-dix secondes plus tard, les nœuds rejoignent le cluster :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl get nodegroups
NAME                DESIREDNODECOUNT   CURRENTNODECOUNT   FLAVOR   STATUS   AGE
example-nodegroup   2                  2                  M        Synced   2m

kubectl get nodes
NAME                      STATUS   ROLES    AGE   VERSION
example-nodegroup-node0   Ready    <none>   2m    v1.35.0
example-nodegroup-node1   Ready    <none>   2m    v1.35.0</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Pour ajuster la taille du node group, on reste dans l'API Kubernetes :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl scale nodegroup example-nodegroup --replicas=4</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Avec un cluster qui dispose maintenant de capacité de calcul, on peut déployer une première application. Pour faire simple, un nginx exposé via un service de type&nbsp;<code>LoadBalancer</code>, ce qui provisionnera automatiquement un load balancer côté Clever Cloud :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl create deployment nginx --image=nginx:alpine --replicas=2 
kubectl expose deployment/nginx --type=LoadBalancer --port 80 
kubectl get service nginx</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Quelques secondes plus tard, le service expose une adresse publique. C'est exactement le comportement réactif évoqué plus haut sur la phase de test privé : provisionner un node group, le scaler ou exposer un service ne demande ni attente ni configuration manuelle.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>À partir d'ici, c'est du Kubernetes comme partout ailleurs. Vous pouvez ajouter du persistent storage via le CSI Clever Cloud, installer le&nbsp;<a href="https://github.com/CleverCloud/clever-kubernetes-operator">Clever Kubernetes Operator</a>&nbsp;pour provisionner depuis vos manifests une base de données managée, ou brancher votre chaîne GitOps habituelle. Le cluster supporte les versions Kubernetes 1.34, 1.35 et 1.36, avec 1.35 par défaut. Tout est détaillé dans la&nbsp;<a href="https://www.clever.cloud/developers/doc/kubernetes/">documentation CKE</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="ce-quon-a-vu-en-test-privé-et-à-devoxx-et-la-suite">Ce qu'on a vu en test privé et à Devoxx, et la suite</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>CKE est désormais en bêta publique, mais certains de nos clients y ont accès en test privé depuis plusieurs mois. Cette phase a été très utile pour confronter le produit à des usages réels avant de l'ouvrir plus largement.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les retours sont très positifs. Le cluster se comporte comme attendu, et les opérations qui touchent souvent au quotidien d'une équipe Kubernetes, comme l'ajout d'un nœud ou la mise en place d'un load balancer, sont rapides et prévisibles. C'est précisément le comportement que nous visions en investissant autant de temps sur la couche de cohérence interne.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>À Devoxx France, nous avons présenté CKE sur le stand Clever Cloud pendant trois jours. Les discussions ont confirmé deux choses que nous observions déjà.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>D'abord, les équipes ne cherchent pas seulement un cluster Kubernetes. Elles cherchent un Kubernetes qui s'intègre proprement à leur plateforme, à leur réseau, à leurs bases de données, à leurs contraintes de sécurité et à leurs pratiques existantes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ensuite, et c'est sans doute le retour le plus marquant, les développeurs ne cherchent pas à tout mettre sur Kubernetes. Beaucoup veulent garder leurs applications classiques sur notre PaaS, là où il est le plus efficace, et déployer sur Kubernetes uniquement les composants qui le méritent vraiment, par leur complexité, par leur architecture distribuée ou par les contraintes de l'écosystème dans lequel ils s'inscrivent.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C’est exactement le genre d’architecture hybride que CKE est conçu pour permettre.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C’est aussi pour ça que nous avions construit, en amont du lancement, le&nbsp;<a href="https://github.com/CleverCloud/clever-kubernetes-operator">Clever Kubernetes Operator</a>. Il permet à un workload qui tourne dans un cluster Kubernetes, qu’il soit hébergé chez nous ou ailleurs, de provisionner et de consommer nos services managés directement depuis l’API Kubernetes : PostgreSQL, MySQL, MongoDB, Redis, Cellar ou Materia.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour vos équipes, c’est du&nbsp;<code>kubectl apply</code>&nbsp;qui crée une base de données managée. Pour CKE, c’est l’outil naturel pour faire le pont entre les workloads Kubernetes et le reste de la plateforme Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La bêta est ouverte à tous les clients Clever Cloud. Vous pouvez l'activer dès maintenant, déployer vos premiers workloads, et nous faire remonter ce qui vous manque, ce qui vous surprend ou ce que vous aimeriez voir arriver ensuite.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La discussion est ouverte sur&nbsp;<a href="https://github.com/CleverCloud/Community/discussions/categories/kubernetes" target="_blank" rel="noreferrer noopener">notre communauté GitHub</a>, et la documentation est disponible&nbsp;<a href="https://www.clever.cloud/developers">ici</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CKE ne remplace pas notre PaaS. Il le complète.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour beaucoup d'applications, le PaaS reste le chemin le plus simple entre un commit et de la production. Mais quand vous avez besoin de Kubernetes, pour un opérateur, un chart Helm, une chaîne GitOps, un workload déjà standardisé ou une plateforme interne, vous pouvez maintenant le faire dans l'environnement Clever Cloud, avec nos choix d'infrastructure, notre réseau, nos services managés et nos exigences de souveraineté.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est ce Kubernetes-là que nous voulions construire.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-fr.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Clever Cloud Bannière CKE" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-fr.png 800w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-fr-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-fr-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>Nous avons donc construit notre propre orchestrateur. Il repose sur des micro-VMs et nous donne une frontière kernel propre entre les workloads, sans partage de noyau entre tenants. C'est ce qui fait tourner aujourd'hui des dizaines de milliers d'applications en production sur notre <a href="https://www.clever.cloud/fr/paas/">PaaS</a>, et c'est encore, pour la plupart des projets, le chemin le plus court entre un commit et de la production.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Quand Docker est arrivé, certains workloads se prêtaient mieux à une image conteneurisée qu'à nos runtimes natifs. Nous avons donc ajouté un runtime Docker à la plateforme, là où ça avait du sens. Pas pour remplacer notre approche, mais pour l'élargir.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Puis Kubernetes s'est imposé comme le standard de fait de l'orchestration de conteneurs. Son écosystème (Helm, opérateurs, GitOps…) est devenu incontournable pour de nombreuses équipes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous aurions pu continuer à répondre que, dans beaucoup de cas, Kubernetes n'est pas le meilleur chemin vers la production. C'est toujours vrai.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Mais ça ne suffisait plus.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est pour ça que nous lançons <a href="https://www.clever.cloud/fr/clever-kubernetes-engine/">CKE, notre Clever Kubernetes Engine</a>, aujourd'hui disponible en bêta publique.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Comme beaucoup le savent, pendant des années, nous avons résisté à l'idée de proposer Kubernetes comme une case à cocher de plus dans la Console. Non pas parce que Kubernetes ne sert à rien, mais parce qu'il est trop souvent devenu une réponse par défaut à des problèmes que le PaaS résout plus simplement : déployer une application, la scaler, la superviser, l'isoler, lui connecter une base de données, gérer ses variables d'environnement, ses logs et son cycle de vie. Et nous le pensons toujours.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Mais Kubernetes est devenu le langage commun d'une grande partie de l'écosystème cloud-native. Helm, les opérateurs, GitOps, les workloads déjà conteneurisés, les plateformes internes et les chaînes d'outillage existantes font partie de la réalité quotidienne de nombreuses équipes. Et notre raison d'être est de faciliter la vie des équipes techniques.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La question n'était donc plus "faut-il faire du Kubernetes ?", mais "peut-on faire du Kubernetes sans renier ce qui fait Clever Cloud ?"</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="pas-un-kubernetes-empaqueté-à-la-va-vite">Pas un Kubernetes empaqueté à la va-vite</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Le chemin le plus rapide pour proposer du Kubernetes managé, c'est d'empaqueter une distribution upstream derrière une console d’administration, d'ajouter une API de provisioning, et de facturer le cluster à l'heure.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est une stratégie valide pour sortir vite.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ce n'est pas celle que nous voulions.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour CKE, nous avions trois exigences qui ne se résolvent pas en ajoutant simplement Kubernetes à côté du reste de la plateforme.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La première, c'est la souveraineté. CKE est opéré en Europe, sur notre infrastructure et celle de nos partenaires, et peut aussi être déployé sur les infrastructures on-premises de nos clients qui en ont besoin. Pas de dépendance aux hyperscalers américains, pas de zones grises sur la juridiction des données, pas de promesse floue sur la localisation réelle de l'infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La deuxième, c'est l'intégration avec le reste de Clever Cloud. Nous ne voulions pas créer un silo Kubernetes à côté du PaaS, des bases de données managées, du stockage objet et du réseau privé. Nous voulions un Kubernetes qui s'inscrive dans la même plateforme, avec la même Console, le même outillage, la même facturation, les mêmes règles de gouvernance et les mêmes <a href="https://www.clever.cloud/fr/blog/entreprise/2025/03/19/services-manages-de-quoi-sagit-il/">services managés</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La troisième, c'est la prévisibilité opérationnelle. Kubernetes est un système distribué complexe, et son comportement sous charge dépend beaucoup de ses fondations. Nous ne voulions pas opérer un produit dont la couche basse resterait une boîte noire ou une limite acceptée par défaut.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est ce qui nous a amenés à travailler à un endroit que peu de fournisseurs touchent : la couche de cohérence interne de Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="sous-le-capot--materia-etcd-sur-foundationdb">Sous le capot : Materia etcd sur FoundationDB</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Dans Kubernetes, etcd est le composant qui stocke l'état du cluster : les manifests, les ressources, les secrets, l'état des nœuds. C'est la source de vérité de tout l'orchestrateur.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est aussi l'un des composants les plus sensibles du système.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>etcd fonctionne très bien dans le cadre pour lequel il a été conçu. Mais ses limites à grande échelle sont connues : taille du store, latences sous forte charge en écriture, comportement en cas de partition réseau, opérations de sauvegarde et restauration, besoin de compaction et de surveillance fine. Quand Kubernetes devient une fondation critique, etcd devient un sujet d'exploitation à part entière.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous ne voulions pas construire CKE sur une brique que nous considérerions ensuite comme une boîte noire fragile.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous avons donc repris le problème à sa racine : conserver le contrat attendu par Kubernetes, mais remplacer la couche de cohérence interne par une implémentation adossée à FoundationDB. C'est ce que nous appelons Materia etcd.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>FoundationDB nous apporte des transactions ACID distribuées, un modèle de cohérence robuste, et une approche de&nbsp;<a href="https://apple.github.io/foundationdb/testing.html">testing par simulation déterministe</a>&nbsp;qui correspond très bien à notre manière de construire de l'infrastructure critique.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour l'utilisateur final, ce travail est invisible. C'est précisément le but. Sous le capot, cette fondation nous permet de construire CKE avec l'auto-scaling, l'auto-healing et la prévisibilité opérationnelle que nous attendons d'un service Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Nous reviendrons bientôt plus en détail sur Materia etcd, parce que le sujet mérite un article dédié.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="du-kubernetes-standard-côté-développeur">Du Kubernetes standard côté développeur</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Tout ce travail sur la couche basse a un objectif simple : côté utilisateur, CKE doit être du Kubernetes standard.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Vos manifests fonctionnent sans modification. Vos charts Helm s'installent normalement. Votre Argo CD ou votre Flux se branche comme sur n'importe quel cluster. Vos opérateurs Kubernetes tournent sans surprise.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CKE ne cherche pas à réinventer l'interface développeur de Kubernetes. Ce serait contre-productif. Si vous avez déjà une chaîne de déploiement Kubernetes, l'objectif est qu'elle puisse fonctionner sur CKE avec le moins de friction possible.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La différence se joue ailleurs : dans la manière dont ce Kubernetes s'intègre au reste de la plateforme Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="kubernetes-quand-vous-en-avez-besoin-le-paas-quand-il-suffit">Kubernetes quand vous en avez besoin, le PaaS quand il suffit</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>CKE ne remplace pas notre PaaS. Il le complète.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour beaucoup d'applications, le PaaS reste le meilleur choix : moins d'exploitation, moins de configuration, moins de YAML, moins de surface de maintenance. Si votre application rentre naturellement dans un runtime Clever Cloud, le PaaS reste souvent le chemin le plus simple et le plus robuste.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Mais il y a des cas où Kubernetes est le bon outil.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Vous avez peut-être besoin :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>D'installer un opérateur ;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>De reprendre des manifests existants ; </li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>De standardiser une chaîne GitOps ;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>De déployer un workload déjà distribué sous forme de chart Helm ;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>De faire tourner une plateforme interne construite autour de l'API Kubernetes ;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Ou simplement de répondre aux habitudes d'une équipe qui travaille déjà avec Kubernetes au quotidien.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Dans ces cas-là, le problème n'est pas Kubernetes en soi. Le problème, c'est Kubernetes isolé du reste de votre système.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est là que CKE change les choses. Vous pouvez garder une API Node.js sur le PaaS, un frontend statique sur Cellar, une base PostgreSQL managée, et faire tourner sur CKE uniquement le composant, l'opérateur ou le workload qui a réellement besoin de Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le tout dans le même environnement Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="une-intégration-native-avec-lécosystème-clever-cloud">Une intégration native avec l'écosystème Clever Cloud</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>CKE a été conçu pour s'intégrer avec les services que vous utilisez déjà sur Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>Cellar</strong>, notre stockage objet compatible S3, peut être utilisé depuis vos workloads Kubernetes.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Les bases de données managées</strong>&nbsp;(PostgreSQL, MySQL, MongoDB, Redis, Materia) s'attachent à votre cluster comme aux autres applications Clever Cloud.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>IAM as a Service</strong>&nbsp;permet de gérer l'authentification et les permissions sur le cluster et sur les équipes qui y accèdent.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Network Groups</strong>&nbsp;permet de relier votre cluster CKE à vos applications PaaS Clever Cloud existantes, dans le même réseau privé.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>L’intégration avec Network Groups est probablement celle qui change le plus le quotidien.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Kubernetes est souvent introduit dans les organisations comme une nouvelle île : nouvelle console, nouveau réseau, nouveaux secrets, nouvelles règles d'accès, nouvelle facturation, nouvelle façon de connecter les services entre eux.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Avec CKE, l'objectif est inverse. Kubernetes devient une brique de plus dans l'architecture Clever Cloud, pas un monde parallèle.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Vous pouvez donc construire une architecture hybride sans bricolage : une partie sur le PaaS, une partie sur CKE, des bases de données managées, du stockage objet, du réseau privé, et une gouvernance commune.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="activer-cke-et-déployer-une-première-application">Activer CKE et déployer une première application</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Pour cette démo, on va rester sur le minimum vital : activer la fonctionnalité, créer un cluster, récupérer un kubeconfig, ajouter un node group et déployer une première application avec un service de type&nbsp;<code>LoadBalancer</code>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Côté prérequis, il faut avoir&nbsp;<a href="https://www.clever.cloud/developers/doc/cli/">Clever Tools</a>&nbsp;en version 4.3 ou supérieure, et&nbsp;<code>kubectl</code>&nbsp;installé sur votre poste.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Depuis l'ouverture de la bêta publique le 27 avril, la fonctionnalité Kubernetes peut être activée par tous les clients Clever Cloud, en une commande :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">clever features enable k8s</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>On peut alors créer un cluster. Donnez-lui un nom, précisez votre organisation, et l'option&nbsp;<code>--watch</code>&nbsp;permet de suivre l'avancement du déploiement :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">clever k8s create my-cluster --org &lt;your-org-id&gt; --watch</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>La création prend environ une minute. À tout moment, on peut lister les clusters de l'organisation avec&nbsp;<code>clever k8s list</code>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Une fois le cluster prêt, on récupère son kubeconfig et on l'écrit directement comme configuration locale par défaut :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">clever k8s get-kubeconfig my-cluster --org &lt;your-org-id&gt; &gt; ~/.kube/config</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>À partir de là, c'est du Kubernetes standard.&nbsp;<code>kubectl</code>&nbsp;parle au cluster, et tout votre outillage habituel suit. On peut commencer par vérifier que tout est en place :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl get nodes</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>À ce stade, la liste est vide : le cluster est créé mais sans capacité de calcul. C'est l'occasion d'introduire la première spécificité de CKE côté API : le&nbsp;<code>NodeGroup</code>. Un node group est un ensemble de nœuds Kubernetes de même profil (même flavor, même région), gérés comme un tout. Vous le décrivez comme n'importe quelle ressource Kubernetes, dans un fichier YAML :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-yaml">apiVersion: api.clever-cloud.com/v1
kind: NodeGroup
metadata:
  name: example-nodegroup
spec:
  flavor: M
  nodeCount: 2</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Et vous l'appliquez avec&nbsp;<code>kubectl</code>&nbsp;:</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl create -f example-nodegroup.yaml</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Soixante à quatre-vingt-dix secondes plus tard, les nœuds rejoignent le cluster :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl get nodegroups
NAME                DESIREDNODECOUNT   CURRENTNODECOUNT   FLAVOR   STATUS   AGE
example-nodegroup   2                  2                  M        Synced   2m

kubectl get nodes
NAME                      STATUS   ROLES    AGE   VERSION
example-nodegroup-node0   Ready    <none>   2m    v1.35.0
example-nodegroup-node1   Ready    <none>   2m    v1.35.0</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Pour ajuster la taille du node group, on reste dans l'API Kubernetes :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl scale nodegroup example-nodegroup --replicas=4</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Avec un cluster qui dispose maintenant de capacité de calcul, on peut déployer une première application. Pour faire simple, un nginx exposé via un service de type&nbsp;<code>LoadBalancer</code>, ce qui provisionnera automatiquement un load balancer côté Clever Cloud :</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<pre class="wp-block-code"><code class="language-bash">kubectl create deployment nginx --image=nginx:alpine --replicas=2 
kubectl expose deployment/nginx --type=LoadBalancer --port 80 
kubectl get service nginx</code></pre>
<!-- /wp:html -->

<!-- wp:paragraph -->
<p>Quelques secondes plus tard, le service expose une adresse publique. C'est exactement le comportement réactif évoqué plus haut sur la phase de test privé : provisionner un node group, le scaler ou exposer un service ne demande ni attente ni configuration manuelle.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>À partir d'ici, c'est du Kubernetes comme partout ailleurs. Vous pouvez ajouter du persistent storage via le CSI Clever Cloud, installer le&nbsp;<a href="https://github.com/CleverCloud/clever-kubernetes-operator">Clever Kubernetes Operator</a>&nbsp;pour provisionner depuis vos manifests une base de données managée, ou brancher votre chaîne GitOps habituelle. Le cluster supporte les versions Kubernetes 1.34, 1.35 et 1.36, avec 1.35 par défaut. Tout est détaillé dans la&nbsp;<a href="https://www.clever.cloud/developers/doc/kubernetes/">documentation CKE</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="ce-quon-a-vu-en-test-privé-et-à-devoxx-et-la-suite">Ce qu'on a vu en test privé et à Devoxx, et la suite</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>CKE est désormais en bêta publique, mais certains de nos clients y ont accès en test privé depuis plusieurs mois. Cette phase a été très utile pour confronter le produit à des usages réels avant de l'ouvrir plus largement.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Les retours sont très positifs. Le cluster se comporte comme attendu, et les opérations qui touchent souvent au quotidien d'une équipe Kubernetes, comme l'ajout d'un nœud ou la mise en place d'un load balancer, sont rapides et prévisibles. C'est précisément le comportement que nous visions en investissant autant de temps sur la couche de cohérence interne.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>À Devoxx France, nous avons présenté CKE sur le stand Clever Cloud pendant trois jours. Les discussions ont confirmé deux choses que nous observions déjà.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>D'abord, les équipes ne cherchent pas seulement un cluster Kubernetes. Elles cherchent un Kubernetes qui s'intègre proprement à leur plateforme, à leur réseau, à leurs bases de données, à leurs contraintes de sécurité et à leurs pratiques existantes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Ensuite, et c'est sans doute le retour le plus marquant, les développeurs ne cherchent pas à tout mettre sur Kubernetes. Beaucoup veulent garder leurs applications classiques sur notre PaaS, là où il est le plus efficace, et déployer sur Kubernetes uniquement les composants qui le méritent vraiment, par leur complexité, par leur architecture distribuée ou par les contraintes de l'écosystème dans lequel ils s'inscrivent.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C’est exactement le genre d’architecture hybride que CKE est conçu pour permettre.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C’est aussi pour ça que nous avions construit, en amont du lancement, le&nbsp;<a href="https://github.com/CleverCloud/clever-kubernetes-operator">Clever Kubernetes Operator</a>. Il permet à un workload qui tourne dans un cluster Kubernetes, qu’il soit hébergé chez nous ou ailleurs, de provisionner et de consommer nos services managés directement depuis l’API Kubernetes : PostgreSQL, MySQL, MongoDB, Redis, Cellar ou Materia.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour vos équipes, c’est du&nbsp;<code>kubectl apply</code>&nbsp;qui crée une base de données managée. Pour CKE, c’est l’outil naturel pour faire le pont entre les workloads Kubernetes et le reste de la plateforme Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La bêta est ouverte à tous les clients Clever Cloud. Vous pouvez l'activer dès maintenant, déployer vos premiers workloads, et nous faire remonter ce qui vous manque, ce qui vous surprend ou ce que vous aimeriez voir arriver ensuite.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>La discussion est ouverte sur&nbsp;<a href="https://github.com/CleverCloud/Community/discussions/categories/kubernetes" target="_blank" rel="noreferrer noopener">notre communauté GitHub</a>, et la documentation est disponible&nbsp;<a href="https://www.clever.cloud/developers">ici</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CKE ne remplace pas notre PaaS. Il le complète.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour beaucoup d'applications, le PaaS reste le chemin le plus simple entre un commit et de la production. Mais quand vous avez besoin de Kubernetes, pour un opérateur, un chart Helm, une chaîne GitOps, un workload déjà standardisé ou une plateforme interne, vous pouvez maintenant le faire dans l'environnement Clever Cloud, avec nos choix d'infrastructure, notre réseau, nos services managés et nos exigences de souveraineté.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>C'est ce Kubernetes-là que nous voulions construire.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p></p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Modernisation cloud : comment articuler gouvernance et exploitation sans complexifier</title>
		<link>https://www.clever.cloud/fr/blog/evenements/2026/04/21/modernisation-cloud-comment-articuler-gouvernance-et-exploitation-sans-complexifier/</link>
		
		<dc:creator><![CDATA[Marjorie Darrigade]]></dc:creator>
		<pubDate>Tue, 21 Apr 2026 15:18:32 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Événements]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Invité]]></category>
		<category><![CDATA[webinaire]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=24178</guid>

					<description><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-20-webinaire-ccxcycloid-fr.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Webinaire CCxCycloid" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-20-webinaire-ccxcycloid-fr.png 800w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-20-webinaire-ccxcycloid-fr-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-20-webinaire-ccxcycloid-fr-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>Dans ce contexte, la question n'est plus de savoir s'il faut migrer, mais comment structurer ce qui existe, maîtriser les opérations au quotidien et conserver le contrôle sur ses environnements et ses données.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le <strong>mardi 28 avril à 11 h 30</strong>, Clever Cloud et <a href="https://www.cycloid.io/">Cycloid</a> organisent un webinaire pour aborder ces enjeux.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"lightbox":{"enabled":false},"id":24147,"sizeSlug":"large","linkDestination":"custom"} -->
<figure class="wp-block-image size-large"><img src="https://cdn.clever-cloud.com/uploads/2026/04/2026-03-25-webinaire-ccxcycloid-1024x427.png" alt="Webinaire Clever Cloud x Cycloid" class="wp-image-24147"/></figure>
<!-- /wp:image -->

<!-- wp:buttons {"layout":{"type":"flex","justifyContent":"center"}} -->
<div class="wp-block-buttons"><!-- wp:button -->
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://app.livestorm.co/clevercloud/clever-cloud-et-cycloid-modernisation-cloud-en-europe">Inscrivez-vous dès maintenant !</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong><strong>Deux regards croisés sur un problème commun</strong></strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Nous vous proposons un échange croisé pour apporter un éclairage concret sur ces sujets.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cycloid traite la structuration et la gouvernance des environnements au travers d'un portail et d'une plateforme de développement interne unifiés. Clever Cloud aborde l’exploitation managée, le maintien en condition opérationnelle (MCO) et la souveraineté opérationnelle.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Rejoignez Florent Perreux (Chief Sales Officer @ Clever Cloud), Steven Le Roux (CTO @ Clever Cloud), Alexandre Blin (Business Director SEMEA @ Cycloid) et Olivier de Turckheim (Solution Architect @ Cycloid) pour comprendre comment articuler gouvernance et exploitation sans ajouter de complexité.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Au programme</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>🔹 Pourquoi la modernisation cloud ne se limite plus à une migration ;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>🔹 Les enjeux de structuration et de gouvernance dans des environnements multi-cloud ;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>🔹 Les défis opérationnels liés à l’exploitation et au MCO ;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>🔹 Comment articuler gouvernance et exploitation sans multiplier la complexité ;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>🔹 Une session Q&amp;A pour poser vos questions en direct.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Pourquoi participer ?</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>✅ Comprendre les causes réelles de la complexité dans les projets cloud ;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>✅ Identifier les leviers pour structurer vos usages et limiter la dépendance fournisseur ;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>✅ Mieux appréhender les enjeux d’exploitation et de souveraineté ;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>✅ Bénéficier de retours d’expérience concrets ;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>✅ Échanger directement avec des experts.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Inscrivez-vous dès maintenant</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>🗓️ Mardi 28 avril 2026</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>⏰ 11h30 - 12h00</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>💻 Webinaire en ligne sur Livestorm</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"21px"} -->
<div style="height:21px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:paragraph -->
<p>Vous êtes confronté à ces enjeux, rejoignez-nous le 28 avril prochain !</p>
<!-- /wp:paragraph -->

<!-- wp:buttons {"layout":{"type":"flex","justifyContent":"center"}} -->
<div class="wp-block-buttons"><!-- wp:button -->
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://app.livestorm.co/clevercloud/clever-cloud-et-cycloid-modernisation-cloud-en-europe">Inscrivez-vous dès maintenant !</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->]]></description>
										<content:encoded><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-20-webinaire-ccxcycloid-fr.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Webinaire CCxCycloid" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-20-webinaire-ccxcycloid-fr.png 800w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-20-webinaire-ccxcycloid-fr-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-20-webinaire-ccxcycloid-fr-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>Dans ce contexte, la question n'est plus de savoir s'il faut migrer, mais comment structurer ce qui existe, maîtriser les opérations au quotidien et conserver le contrôle sur ses environnements et ses données.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Le <strong>mardi 28 avril à 11 h 30</strong>, Clever Cloud et <a href="https://www.cycloid.io/">Cycloid</a> organisent un webinaire pour aborder ces enjeux.</p>
<!-- /wp:paragraph -->

<!-- wp:image {"lightbox":{"enabled":false},"id":24147,"sizeSlug":"large","linkDestination":"custom"} -->
<figure class="wp-block-image size-large"><img src="https://cdn.clever-cloud.com/uploads/2026/04/2026-03-25-webinaire-ccxcycloid-1024x427.png" alt="Webinaire Clever Cloud x Cycloid" class="wp-image-24147"/></figure>
<!-- /wp:image -->

<!-- wp:buttons {"layout":{"type":"flex","justifyContent":"center"}} -->
<div class="wp-block-buttons"><!-- wp:button -->
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://app.livestorm.co/clevercloud/clever-cloud-et-cycloid-modernisation-cloud-en-europe">Inscrivez-vous dès maintenant !</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong><strong>Deux regards croisés sur un problème commun</strong></strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Nous vous proposons un échange croisé pour apporter un éclairage concret sur ces sujets.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Cycloid traite la structuration et la gouvernance des environnements au travers d'un portail et d'une plateforme de développement interne unifiés. Clever Cloud aborde l’exploitation managée, le maintien en condition opérationnelle (MCO) et la souveraineté opérationnelle.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Rejoignez Florent Perreux (Chief Sales Officer @ Clever Cloud), Steven Le Roux (CTO @ Clever Cloud), Alexandre Blin (Business Director SEMEA @ Cycloid) et Olivier de Turckheim (Solution Architect @ Cycloid) pour comprendre comment articuler gouvernance et exploitation sans ajouter de complexité.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Au programme</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>🔹 Pourquoi la modernisation cloud ne se limite plus à une migration ;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>🔹 Les enjeux de structuration et de gouvernance dans des environnements multi-cloud ;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>🔹 Les défis opérationnels liés à l’exploitation et au MCO ;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>🔹 Comment articuler gouvernance et exploitation sans multiplier la complexité ;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>🔹 Une session Q&amp;A pour poser vos questions en direct.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Pourquoi participer ?</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>✅ Comprendre les causes réelles de la complexité dans les projets cloud ;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>✅ Identifier les leviers pour structurer vos usages et limiter la dépendance fournisseur ;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>✅ Mieux appréhender les enjeux d’exploitation et de souveraineté ;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>✅ Bénéficier de retours d’expérience concrets ;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>✅ Échanger directement avec des experts.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading"><strong>Inscrivez-vous dès maintenant</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>🗓️ Mardi 28 avril 2026</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>⏰ 11h30 - 12h00</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>💻 Webinaire en ligne sur Livestorm</p>
<!-- /wp:paragraph -->

<!-- wp:spacer {"height":"21px"} -->
<div style="height:21px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->

<!-- wp:paragraph -->
<p>Vous êtes confronté à ces enjeux, rejoignez-nous le 28 avril prochain !</p>
<!-- /wp:paragraph -->

<!-- wp:buttons {"layout":{"type":"flex","justifyContent":"center"}} -->
<div class="wp-block-buttons"><!-- wp:button -->
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://app.livestorm.co/clevercloud/clever-cloud-et-cycloid-modernisation-cloud-en-europe">Inscrivez-vous dès maintenant !</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Clever Cloud lance Clever Kubernetes Engine (CKE) en bêta publique le 27 avril 2026</title>
		<link>https://www.clever.cloud/fr/blog/entreprise/2026/04/21/clever-kubernetes-engine-cke-en-beta-publique/</link>
		
		<dc:creator><![CDATA[Carine Guillemet]]></dc:creator>
		<pubDate>Tue, 21 Apr 2026 14:26:48 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Entreprise]]></category>
		<category><![CDATA[Fonctionnalités]]></category>
		<category><![CDATA[Presse]]></category>
		<category><![CDATA[cke]]></category>
		<category><![CDATA[kubernetes]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=24171</guid>

					<description><![CDATA[<p><img width="1600" height="900" src="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Clever Cloud CKE Devoxx" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx.png 1600w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-300x169.png 300w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-1024x576.png 1024w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-768x432.png 768w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-1536x864.png 1536w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-1368x770.png 1368w" sizes="auto, (max-width: 1600px) 100vw, 1600px" /></p><!-- wp:paragraph -->
<p><em><strong>Nantes, France — Clever Cloud</strong>, fournisseur européen de solutions cloud, annonce l'ouverture en bêta publique de <strong>Clever Kubernetes Engine (CKE)</strong> le <strong>27 avril 2026 dans l’après-midi</strong>. Le produit sera présenté en avant-première au <strong><a href="https://www.devoxx.fr" type="link" id="https://www.devoxx.fr">Devoxx</a> à partir du 22 avril</strong>, où les participants pourront le tester directement sur le stand Clever Cloud.</em></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Conçu pour la production et la scalabilité</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Kubernetes est devenu le standard de l'orchestration de conteneurs. Clever Cloud a travaillé pendant deux ans pour proposer une version managée et souveraine, conçue pour s'intégrer naturellement dans l'écosystème Clever Cloud et s'opérer avec la même simplicité que les autres services de la plateforme. CKE est pensé pour accompagner des charges de production réelles, avec une scalabilité élevée et un comportement prévisible à grande échelle.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour y parvenir, Clever Cloud a notamment développé Materia etcd, une réimplémentation de la couche de cohérence interne de Kubernetes construite sur FoundationDB. C'est ce travail de fond, invisible pour l'utilisateur final, qui garantit à CKE sa robustesse et sa stabilité en production, notamment grâce à de l’auto-scalabilité et de “l'auto-healingde façon native.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CKE s'intègre nativement aux services Clever Cloud existants — stockage objet Cellar (compatible S3), bases de données managées, IAM as a Service, Network Groups — et reste accessible via les outils standard du marché : kubectl, Helm ou GitOps.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Souverain par conception</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Hébergé et opéré en Europe par Clever Cloud sur son cloud public, CKE offre aux organisations une alternative concrète aux offres Kubernetes des grandes plateformes américaines, sans compromis sur les performances ni sur la maîtrise juridique des données. CKE peut aussi être déployé sur les infrastructures on-premises du client.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Modalités d'accès</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La bêta publique est ouverte à tous les clients de Clever Cloud à partir du <strong>27 avril 2026</strong>, via l'activation de fonctionnalités à réaliser par l’utilisateur. À noter : certains clients bénéficient d'un accès en test privé depuis plus de six mois déjà, ce qui a permis d'affiner le produit avant cette ouverture générale.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><em>"Clever Cloud a longtemps développé des alternatives à Kubernetes. Nos clients nous ont exprimé un besoin clair pour cette technologie, et nous avons décidé de la construire à leurs côtés, avec le niveau d'exigence technique et de souveraineté qui définit notre plateforme."</em> Quentin Adam, CEO de Clever Cloud</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><a href="https://www.clever.cloud/fr/clever-kubernetes-engine/" type="link" id="https://www.clever.cloud/fr/clever-kubernetes-engine/">En savoir plus </a></p>
<!-- /wp:paragraph -->

<!-- wp:acf/video {"name":"acf/video","data":{"overtitle":"Vidéo","_overtitle":"field_638dfc12af44d","title":"\u003cb\u003eDécouvrir CKE\u003c/b\u003e en 1 minute","_title":"field_638dfc39af44e","description":"Kubernetes standard compatible avec tout l'écosystème, opéré avec Clever Cloud.","_description":"field_638dfc45af44f","description_secondary":"","_description_secondary":"field_63c81679fd784","poster":24094,"_poster":"field_638dfc50af450","type":"iframe","_type":"field_63edfc74597df","iframe":"\u003ciframe width=\u0022560\u0022 height=\u0022315\u0022 src=\u0022https://www.youtube.com/embed/hw630p3kGfE?si=hQ9vkNQnMDDpWSii\u0022 title=\u0022YouTube video player\u0022 frameborder=\u00220\u0022 allow=\u0022accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\u0022 referrerpolicy=\u0022strict-origin-when-cross-origin\u0022 allowfullscreen\u003e\u003c/iframe\u003e","_iframe":"field_638dfcb8af451"},"mode":"auto"} /-->]]></description>
										<content:encoded><![CDATA[<p><img width="1600" height="900" src="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Clever Cloud CKE Devoxx" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx.png 1600w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-300x169.png 300w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-1024x576.png 1024w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-768x432.png 768w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-1536x864.png 1536w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-21-clever-cloud-reseaux-sociaux-cke-devoxx-1368x770.png 1368w" sizes="auto, (max-width: 1600px) 100vw, 1600px" /></p><!-- wp:paragraph -->
<p><em><strong>Nantes, France — Clever Cloud</strong>, fournisseur européen de solutions cloud, annonce l'ouverture en bêta publique de <strong>Clever Kubernetes Engine (CKE)</strong> le <strong>27 avril 2026 dans l’après-midi</strong>. Le produit sera présenté en avant-première au <strong><a href="https://www.devoxx.fr" type="link" id="https://www.devoxx.fr">Devoxx</a> à partir du 22 avril</strong>, où les participants pourront le tester directement sur le stand Clever Cloud.</em></p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Conçu pour la production et la scalabilité</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Kubernetes est devenu le standard de l'orchestration de conteneurs. Clever Cloud a travaillé pendant deux ans pour proposer une version managée et souveraine, conçue pour s'intégrer naturellement dans l'écosystème Clever Cloud et s'opérer avec la même simplicité que les autres services de la plateforme. CKE est pensé pour accompagner des charges de production réelles, avec une scalabilité élevée et un comportement prévisible à grande échelle.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Pour y parvenir, Clever Cloud a notamment développé Materia etcd, une réimplémentation de la couche de cohérence interne de Kubernetes construite sur FoundationDB. C'est ce travail de fond, invisible pour l'utilisateur final, qui garantit à CKE sa robustesse et sa stabilité en production, notamment grâce à de l’auto-scalabilité et de “l'auto-healingde façon native.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CKE s'intègre nativement aux services Clever Cloud existants — stockage objet Cellar (compatible S3), bases de données managées, IAM as a Service, Network Groups — et reste accessible via les outils standard du marché : kubectl, Helm ou GitOps.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Souverain par conception</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Hébergé et opéré en Europe par Clever Cloud sur son cloud public, CKE offre aux organisations une alternative concrète aux offres Kubernetes des grandes plateformes américaines, sans compromis sur les performances ni sur la maîtrise juridique des données. CKE peut aussi être déployé sur les infrastructures on-premises du client.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Modalités d'accès</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>La bêta publique est ouverte à tous les clients de Clever Cloud à partir du <strong>27 avril 2026</strong>, via l'activation de fonctionnalités à réaliser par l’utilisateur. À noter : certains clients bénéficient d'un accès en test privé depuis plus de six mois déjà, ce qui a permis d'affiner le produit avant cette ouverture générale.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><em>"Clever Cloud a longtemps développé des alternatives à Kubernetes. Nos clients nous ont exprimé un besoin clair pour cette technologie, et nous avons décidé de la construire à leurs côtés, avec le niveau d'exigence technique et de souveraineté qui définit notre plateforme."</em> Quentin Adam, CEO de Clever Cloud</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><a href="https://www.clever.cloud/fr/clever-kubernetes-engine/" type="link" id="https://www.clever.cloud/fr/clever-kubernetes-engine/">En savoir plus </a></p>
<!-- /wp:paragraph -->

<!-- wp:acf/video {"name":"acf/video","data":{"overtitle":"Vidéo","_overtitle":"field_638dfc12af44d","title":"\u003cb\u003eDécouvrir CKE\u003c/b\u003e en 1 minute","_title":"field_638dfc39af44e","description":"Kubernetes standard compatible avec tout l'écosystème, opéré avec Clever Cloud.","_description":"field_638dfc45af44f","description_secondary":"","_description_secondary":"field_63c81679fd784","poster":24094,"_poster":"field_638dfc50af450","type":"iframe","_type":"field_63edfc74597df","iframe":"\u003ciframe width=\u0022560\u0022 height=\u0022315\u0022 src=\u0022https://www.youtube.com/embed/hw630p3kGfE?si=hQ9vkNQnMDDpWSii\u0022 title=\u0022YouTube video player\u0022 frameborder=\u00220\u0022 allow=\u0022accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\u0022 referrerpolicy=\u0022strict-origin-when-cross-origin\u0022 allowfullscreen\u003e\u003c/iframe\u003e","_iframe":"field_638dfcb8af451"},"mode":"auto"} /-->]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
