<?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>K8S Archives | Clever Cloud</title>
	<atom:link href="https://www.clever.cloud/blog/tag/k8s/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.clever.cloud/blog/tag/k8s/</link>
	<description>From Code to Product</description>
	<lastBuildDate>Fri, 24 Jul 2026 09:29:29 +0000</lastBuildDate>
	<language>en-GB</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>K8S Archives | Clever Cloud</title>
	<link>https://www.clever.cloud/blog/tag/k8s/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>K3s vs K8s: What Are the Differences and Which One Should You Choose in 2026?</title>
		<link>https://www.clever.cloud/blog/features/2026/05/28/k3s-vs-k8s-what-are-the-differences-and-which-one-should-you-choose-in-2026/</link>
		
		<dc:creator><![CDATA[Marjorie Darrigade]]></dc:creator>
		<pubDate>Thu, 28 May 2026 07:19:05 +0000</pubDate>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Features]]></category>
		<category><![CDATA[K3s]]></category>
		<category><![CDATA[K8S]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=24419</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-en.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="K3s vs K8s EN" decoding="async" fetchpriority="high" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-en.png 800w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-en-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-en-768x341.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>In short: K3s is a CNCF-certified Kubernetes distribution optimized for constrained environments (edge, IoT, labs). K8s refers to the original Kubernetes project, designed for large-scale production clusters. The choice depends on your available resources, deployment context, and operational workload.</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: Standard Kubernetes for Enterprise Environments</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K8s is the abbreviation of Kubernetes, with the “8” representing the eight letters between the “K” and the “s”. It is the original open-source project maintained by the Cloud Native Computing Foundation (CNCF) and initially developed by Google.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Kubernetes is designed for <strong>large-scale production environments</strong>: multi-node clusters, high availability, integration with public clouds (AWS, GCP, Azure), or on-premises datacenters. Its control plane includes several separate components: API server, scheduler, controller manager, etcd, deployed independently, which provides maximum flexibility but requires significant operational expertise.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Typical requirements for a production control plane node</strong>: at least 2 vCPUs and 2 GB of RAM for Kubernetes components alone, excluding etcd and application workloads.</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: A CNCF-Certified Kubernetes Distribution, Not a Fork</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s is a certified Kubernetes distribution, not an unofficial lightweight version or a fork. Created by Rancher Labs, it was <a href="https://thenewstack.io/ranchers-k3s-joins-cncf-sandbox-as-first-kubernetes-distribution/" target="_blank" rel="noreferrer noopener">donated to the CNCF in June 2020</a> and passes the same Sonobuoy conformance tests as all certified distributions. Any valid Kubernetes manifest works on K3s.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Its main goal is to <strong>drastically reduce the resources required </strong>to run Kubernetes in constrained environments (edge, IoT, CI/CD, labs) without giving up API compatibility.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What K3s Changes Compared to K8s</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><a href="https://k3s.io/" target="_blank" rel="noreferrer noopener">A single binary under 70 MB</a>  (supporting x86, ARM64, ARMv7, and S390X), including the containerd runtime, Flannel CNI, a Traefik ingress controller, and a Klipper load balancer.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>SQLite as the default datastore</strong> in single-node mode instead of etcd. In high-availability configurations (minimum three server nodes), K3s can use <strong>embedded etcd </strong>or an external datastore (MySQL, PostgreSQL, external etcd).</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Alpha and beta components removed </strong>to reduce the attack surface and memory footprint.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p><strong>Important point</strong>: K3s does not remove etcd; it makes it optional. In single-node mode, SQLite is sufficient. In high availability, embedded or external etcd is supported - although the latter is not officially supported by the K3s team.</p>
<!-- /wp:paragraph -->

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

<!-- wp:paragraph -->
<p>K3s can run with as little as <strong>512 MB of RAM</strong> on an agent node. According to <a href="https://docs.k3s.io/installation/requirements" target="_blank" rel="noreferrer noopener">the official documentation</a> (updated May 2026), a server node (control plane) requires 2 GB of RAM and 2 CPU cores, excluding application workloads. A load-tested profile is available in the <a href="https://docs.k3s.io/reference/resource-profiling" target="_blank" rel="noreferrer noopener">K3s resource profiling guide</a>. It is worth noting that tests on hardware with 1 GB of total RAM showed instability across K3s, k0s, and MicroK8s when deploying real application workloads (even a lightweight Kubernetes cluster still consumes non-negligible control-plane resources).</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">Key Technical Differences</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>Scenario</th>
        <th>K8s</th>
        <th>K3s</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Single-node</td>
        <td>etcd required</td>
        <td>SQLite by default</td>
      </tr>
      <tr>
        <td>Multi-node High Availability</td>
        <td>etcd</td>
        <td>Embedded or external etcd (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 and packaging</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K8s no longer provides a default runtime since the removal of dockershim (v1.24, 2022). Starting with Kubernetes 1.24, you must install a CRI-compatible runtime (containerd or CRI-O). K3s embeds containerd directly into its binary.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Control Plane Architecture</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>In K8s, control plane components (API server, scheduler, controller manager) are separate processes. In K3s, they are merged into a single binary, which reduces overhead but limits some advanced isolation configurations.</p>
<!-- /wp:paragraph -->

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

<!-- wp:paragraph -->
<p>K3s is suitable for moderately sized clusters. In high-availability configurations (3 server nodes, 4 vCPU / 8 GB RAM), <a href="https://docs.k3s.io/installation/requirements" target="_blank" rel="noreferrer noopener">the official documentation</a> indicates a capacity of around 1,200 agents. For very large clusters (several thousand nodes), K8s remains the reference.</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 vs K8s Comparison Table</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>Criterion</th>
        <th>K3s</th>
        <th>K8s</th>
      </tr>
    </thead>
    <tbody>
      <tr><td>CNCF certification</td><td>Yes (certified distribution)</td><td>Yes (original project)</td></tr>
      <tr><td>Binary size</td><td>&lt; 100 MB</td><td>Not applicable (separate components)</td></tr>
      <tr><td>Default datastore</td><td>SQLite (single-node) / etcd (high availability)</td><td>etcd</td></tr>
      <tr><td>Embedded runtime</td><td>containerd</td><td>No (to be installed separately)</td></tr>
      <tr><td>ARM support</td><td>Yes (ARM64, ARMv7)</td><td>Yes (depends on the distribution)</td></tr>
      <tr><td>Default ingress</td><td>Traefik (included)</td><td>No (to be deployed separately)</td></tr>
      <tr><td>API compatibility</td><td>Required APIs certified by the CNCF</td><td>Reference implementation (original project)</td></tr>
      <tr><td>Documented max scalability</td><td>~1200 agents (High Availability 3 servers)</td><td>Several thousand nodes</td></tr>
      <tr><td>Main use case</td><td>Edge, IoT, lab, CI/CD</td><td>Enterprise, cloud, datacenters</td></tr>
      <tr><td>Operational complexity</td><td>Low</td><td>High</td></tr>
      <tr><td>Alpha/beta components</td><td>Removed</td><td>Included</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">Use Cases: Which One Should You Choose?</h2>
<!-- /wp:heading -->

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

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>You deploy on <strong>constrained hardware</strong> (Raspberry Pi, industrial appliances, edge servers with limited RAM).</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>You manage remote <strong>IoT or edge clusters</strong>, potentially in disconnected environments.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>You need a <strong>development or CI cluster</strong> that starts quickly, including on modest hardware.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>You want an operational cluster with <strong>minimal initial configuration</strong>.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Choose K8s (or an enterprise distribution) if:</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>You orchestrate <strong>hundreds or thousands of production nodes</strong>.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Your workloads require <strong>advanced cloud-native integrations</strong> (storage, load balancers, IAM) provided by hyperscalers.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>You need <strong>alpha or beta API components</strong> unavailable in K3s.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Your organization has a <strong>dedicated SRE team</strong> operating 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">Hybrid Use Cases: K3s and K8s Together</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s and K8s are not mutually exclusive. Several hybrid architectures are documented in production:</p>
<!-- /wp:paragraph -->

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

<!-- wp:paragraph -->
<p>Edge K3s clusters are managed from a central control plane running on K8s or RKE2. The Home Depot (large American retailer with more than 2,300 stores) <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">manages its sites using K3s supervised through Rancher</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">K3s for Dev and Staging, K8s for Production</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>API compatibility guarantees that manifests and Helm charts tested on K3s work in production on an enterprise cluster. This parity reduces surprises when promoting environments.</p>
<!-- /wp:paragraph -->

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

<!-- wp:paragraph -->
<p>Test pipelines run on K3s (low cost, fast startup) while production environments use managed K8s clusters.</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">Managed Kubernetes: A Third Path</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Neither K3s nor K8s solves the question of <strong>daily operations</strong>: updates, certificates, control plane monitoring, or failure management. This is precisely what managed Kubernetes solutions cover.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Hyperscalers (EKS, GKE, AKS) provide this management within their own clouds. But managed solutions also exist outside these ecosystems, especially for organizations that want to retain control over their data and choose sovereign Kubernetes, or even French-operated Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><a href="https://www.clever.cloud/product/kubernetes/">Clever Kubernetes Engine (CKE)</a> is Clever Cloud’s managed Kubernetes service, designed for teams already using Kubernetes and wanting to delegate control plane management (updates, high availability, monitoring) without being constrained to a single hyperscaler. CKE explicitly targets teams that are not fully covered by the traditional&nbsp; <a href="https://www.clever.cloud/clever-cloud-paas/">PaaS</a> model (multi-runtime use cases, non-twelve-factor workloads, or the need for granular resource control).</p>
<!-- /wp:paragraph -->

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

<!-- wp:heading {"level":1,"style":{"typography":{"textAlign":"center"}}} -->
<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">Is K3s a Kubernetes fork?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>No. K3s is a CNCF-certified Kubernetes distribution. It passes Sonobuoy conformance tests and supports the same APIs as K8s. It is not maintained separately from Kubernetes: it follows upstream Kubernetes releases.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Can K3s Be Used in Production?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Yes, with some nuances. K3s is documented for production workloads in constrained environments (edge, IoT). For large-scale clusters or critical workloads with high SLA requirements, K8s (or an enterprise distribution such as RKE2) is more appropriate.</p>
<!-- /wp:paragraph -->

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

<!-- wp:paragraph -->
<p>Yes. K3s includes an integrated Helm controller and is compatible with any valid Helm chart.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What Is the Difference Between K3s and K3d?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3d is a tool that runs K3s inside Docker containers. It further simplifies the creation of local K3s clusters for development, but it is not intended for production use.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Does K3s Run on ARM?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Yes. ARM64 and ARMv7 are natively supported, which explains its popularity on Raspberry Pi devices and industrial appliances.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Managed Kubernetes vs Self-Hosted K3s: Which One Should You Choose?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Self-hosted K3s gives you full control but makes you responsible for operations (updates, security, high availability). Managed Kubernetes delegates this responsibility to an operator, at the cost of dependency on that provider. The choice depends on your operational resources and control requirements.</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-en.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="K3s vs K8s EN" decoding="async" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-en.png 800w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-en-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-27-clever-cloud-banniere-blog-k3s-vs-k8s-en-768x341.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>In short: K3s is a CNCF-certified Kubernetes distribution optimized for constrained environments (edge, IoT, labs). K8s refers to the original Kubernetes project, designed for large-scale production clusters. The choice depends on your available resources, deployment context, and operational workload.</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: Standard Kubernetes for Enterprise Environments</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K8s is the abbreviation of Kubernetes, with the “8” representing the eight letters between the “K” and the “s”. It is the original open-source project maintained by the Cloud Native Computing Foundation (CNCF) and initially developed by Google.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Kubernetes is designed for <strong>large-scale production environments</strong>: multi-node clusters, high availability, integration with public clouds (AWS, GCP, Azure), or on-premises datacenters. Its control plane includes several separate components: API server, scheduler, controller manager, etcd, deployed independently, which provides maximum flexibility but requires significant operational expertise.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>Typical requirements for a production control plane node</strong>: at least 2 vCPUs and 2 GB of RAM for Kubernetes components alone, excluding etcd and application workloads.</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: A CNCF-Certified Kubernetes Distribution, Not a Fork</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s is a certified Kubernetes distribution, not an unofficial lightweight version or a fork. Created by Rancher Labs, it was <a href="https://thenewstack.io/ranchers-k3s-joins-cncf-sandbox-as-first-kubernetes-distribution/" target="_blank" rel="noreferrer noopener">donated to the CNCF in June 2020</a> and passes the same Sonobuoy conformance tests as all certified distributions. Any valid Kubernetes manifest works on K3s.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Its main goal is to <strong>drastically reduce the resources required </strong>to run Kubernetes in constrained environments (edge, IoT, CI/CD, labs) without giving up API compatibility.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What K3s Changes Compared to K8s</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><a href="https://k3s.io/" target="_blank" rel="noreferrer noopener">A single binary under 70 MB</a>  (supporting x86, ARM64, ARMv7, and S390X), including the containerd runtime, Flannel CNI, a Traefik ingress controller, and a Klipper load balancer.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>SQLite as the default datastore</strong> in single-node mode instead of etcd. In high-availability configurations (minimum three server nodes), K3s can use <strong>embedded etcd </strong>or an external datastore (MySQL, PostgreSQL, external etcd).</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Alpha and beta components removed </strong>to reduce the attack surface and memory footprint.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p><strong>Important point</strong>: K3s does not remove etcd; it makes it optional. In single-node mode, SQLite is sufficient. In high availability, embedded or external etcd is supported - although the latter is not officially supported by the K3s team.</p>
<!-- /wp:paragraph -->

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

<!-- wp:paragraph -->
<p>K3s can run with as little as <strong>512 MB of RAM</strong> on an agent node. According to <a href="https://docs.k3s.io/installation/requirements" target="_blank" rel="noreferrer noopener">the official documentation</a> (updated May 2026), a server node (control plane) requires 2 GB of RAM and 2 CPU cores, excluding application workloads. A load-tested profile is available in the <a href="https://docs.k3s.io/reference/resource-profiling" target="_blank" rel="noreferrer noopener">K3s resource profiling guide</a>. It is worth noting that tests on hardware with 1 GB of total RAM showed instability across K3s, k0s, and MicroK8s when deploying real application workloads (even a lightweight Kubernetes cluster still consumes non-negligible control-plane resources).</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">Key Technical Differences</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>Scenario</th>
        <th>K8s</th>
        <th>K3s</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Single-node</td>
        <td>etcd required</td>
        <td>SQLite by default</td>
      </tr>
      <tr>
        <td>Multi-node High Availability</td>
        <td>etcd</td>
        <td>Embedded or external etcd (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 and packaging</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K8s no longer provides a default runtime since the removal of dockershim (v1.24, 2022). Starting with Kubernetes 1.24, you must install a CRI-compatible runtime (containerd or CRI-O). K3s embeds containerd directly into its binary.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading"><strong>Control Plane Architecture</strong></h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>In K8s, control plane components (API server, scheduler, controller manager) are separate processes. In K3s, they are merged into a single binary, which reduces overhead but limits some advanced isolation configurations.</p>
<!-- /wp:paragraph -->

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

<!-- wp:paragraph -->
<p>K3s is suitable for moderately sized clusters. In high-availability configurations (3 server nodes, 4 vCPU / 8 GB RAM), <a href="https://docs.k3s.io/installation/requirements" target="_blank" rel="noreferrer noopener">the official documentation</a> indicates a capacity of around 1,200 agents. For very large clusters (several thousand nodes), K8s remains the reference.</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 vs K8s Comparison Table</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>Criterion</th>
        <th>K3s</th>
        <th>K8s</th>
      </tr>
    </thead>
    <tbody>
      <tr><td>CNCF certification</td><td>Yes (certified distribution)</td><td>Yes (original project)</td></tr>
      <tr><td>Binary size</td><td>&lt; 100 MB</td><td>Not applicable (separate components)</td></tr>
      <tr><td>Default datastore</td><td>SQLite (single-node) / etcd (high availability)</td><td>etcd</td></tr>
      <tr><td>Embedded runtime</td><td>containerd</td><td>No (to be installed separately)</td></tr>
      <tr><td>ARM support</td><td>Yes (ARM64, ARMv7)</td><td>Yes (depends on the distribution)</td></tr>
      <tr><td>Default ingress</td><td>Traefik (included)</td><td>No (to be deployed separately)</td></tr>
      <tr><td>API compatibility</td><td>Required APIs certified by the CNCF</td><td>Reference implementation (original project)</td></tr>
      <tr><td>Documented max scalability</td><td>~1200 agents (High Availability 3 servers)</td><td>Several thousand nodes</td></tr>
      <tr><td>Main use case</td><td>Edge, IoT, lab, CI/CD</td><td>Enterprise, cloud, datacenters</td></tr>
      <tr><td>Operational complexity</td><td>Low</td><td>High</td></tr>
      <tr><td>Alpha/beta components</td><td>Removed</td><td>Included</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">Use Cases: Which One Should You Choose?</h2>
<!-- /wp:heading -->

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

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>You deploy on <strong>constrained hardware</strong> (Raspberry Pi, industrial appliances, edge servers with limited RAM).</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>You manage remote <strong>IoT or edge clusters</strong>, potentially in disconnected environments.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>You need a <strong>development or CI cluster</strong> that starts quickly, including on modest hardware.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>You want an operational cluster with <strong>minimal initial configuration</strong>.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Choose K8s (or an enterprise distribution) if:</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>You orchestrate <strong>hundreds or thousands of production nodes</strong>.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Your workloads require <strong>advanced cloud-native integrations</strong> (storage, load balancers, IAM) provided by hyperscalers.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>You need <strong>alpha or beta API components</strong> unavailable in K3s.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Your organization has a <strong>dedicated SRE team</strong> operating 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">Hybrid Use Cases: K3s and K8s Together</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3s and K8s are not mutually exclusive. Several hybrid architectures are documented in production:</p>
<!-- /wp:paragraph -->

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

<!-- wp:paragraph -->
<p>Edge K3s clusters are managed from a central control plane running on K8s or RKE2. The Home Depot (large American retailer with more than 2,300 stores) <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">manages its sites using K3s supervised through Rancher</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">K3s for Dev and Staging, K8s for Production</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>API compatibility guarantees that manifests and Helm charts tested on K3s work in production on an enterprise cluster. This parity reduces surprises when promoting environments.</p>
<!-- /wp:paragraph -->

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

<!-- wp:paragraph -->
<p>Test pipelines run on K3s (low cost, fast startup) while production environments use managed K8s clusters.</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">Managed Kubernetes: A Third Path</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Neither K3s nor K8s solves the question of <strong>daily operations</strong>: updates, certificates, control plane monitoring, or failure management. This is precisely what managed Kubernetes solutions cover.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Hyperscalers (EKS, GKE, AKS) provide this management within their own clouds. But managed solutions also exist outside these ecosystems, especially for organizations that want to retain control over their data and choose sovereign Kubernetes, or even French-operated Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><a href="https://www.clever.cloud/product/kubernetes/">Clever Kubernetes Engine (CKE)</a> is Clever Cloud’s managed Kubernetes service, designed for teams already using Kubernetes and wanting to delegate control plane management (updates, high availability, monitoring) without being constrained to a single hyperscaler. CKE explicitly targets teams that are not fully covered by the traditional&nbsp; <a href="https://www.clever.cloud/clever-cloud-paas/">PaaS</a> model (multi-runtime use cases, non-twelve-factor workloads, or the need for granular resource control).</p>
<!-- /wp:paragraph -->

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

<!-- wp:heading {"level":1,"style":{"typography":{"textAlign":"center"}}} -->
<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">Is K3s a Kubernetes fork?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>No. K3s is a CNCF-certified Kubernetes distribution. It passes Sonobuoy conformance tests and supports the same APIs as K8s. It is not maintained separately from Kubernetes: it follows upstream Kubernetes releases.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Can K3s Be Used in Production?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Yes, with some nuances. K3s is documented for production workloads in constrained environments (edge, IoT). For large-scale clusters or critical workloads with high SLA requirements, K8s (or an enterprise distribution such as RKE2) is more appropriate.</p>
<!-- /wp:paragraph -->

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

<!-- wp:paragraph -->
<p>Yes. K3s includes an integrated Helm controller and is compatible with any valid Helm chart.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What Is the Difference Between K3s and K3d?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3d is a tool that runs K3s inside Docker containers. It further simplifies the creation of local K3s clusters for development, but it is not intended for production use.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Does K3s Run on ARM?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Yes. ARM64 and ARMv7 are natively supported, which explains its popularity on Raspberry Pi devices and industrial appliances.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Managed Kubernetes vs Self-Hosted K3s: Which One Should You Choose?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Self-hosted K3s gives you full control but makes you responsible for operations (updates, security, high availability). Managed Kubernetes delegates this responsibility to an operator, at the cost of dependency on that provider. The choice depends on your operational resources and control requirements.</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>Kubernetes vs Docker : Differences and When to Use Them</title>
		<link>https://www.clever.cloud/blog/features/2026/05/22/kubernetes-vs-docker-differences-and-when-to-use-them/</link>
		
		<dc:creator><![CDATA[Marjorie Darrigade]]></dc:creator>
		<pubDate>Fri, 22 May 2026 20:31:53 +0000</pubDate>
				<category><![CDATA[Features]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[K8S]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=24363</guid>

					<description><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-22-clever-cloud-banniere-blog-k8s-vs-docker-eng.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="K8s vs Docker ENG" decoding="async" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-22-clever-cloud-banniere-blog-k8s-vs-docker-eng.png 800w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-22-clever-cloud-banniere-blog-k8s-vs-docker-eng-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-22-clever-cloud-banniere-blog-k8s-vs-docker-eng-768x341.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>The <a href="https://www.clever.cloud/blog/engineering/2026/05/19/k8s-kubernetes-definition-standard/">Kubernetes</a> vs Docker question deserves a precise answer, because the two technologies do not solve the same problem.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Docker is mainly used to build and run containers. Kubernetes is used to orchestrate those containers once the infrastructure becomes more complex. The two technologies are therefore often complementary, even though they are frequently- and incorrectly - presented as opposites.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Understanding this distinction helps clarify when Docker alone is enough, when Kubernetes becomes relevant, and why not every application actually needs a Kubernetes cluster.</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">Docker : Standardizing Application Execution</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Docker popularized modern containerization. Its goal is simple: make applications run the same way regardless of the environment in which they are executed.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Before Docker, it was common for an application to work perfectly on a developer’s machine but fail once deployed to a server. Differences in system versions, missing dependencies, or inconsistent configurations made deployments significantly more difficult.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Docker largely solved this problem by packaging an application and its dependencies into an isolated container. In practice, the container includes the application itself, its libraries, dependencies, and some system components required for execution.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The environment becomes portable and reproducible. A Docker image can run on any compatible machine with predictable behavior. This standardization explains Docker’s massive adoption across CI/CD pipelines, development environments, and modern architectures.</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">Docker Is Not Just About “Running Containers”</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>In many teams, Docker has become an everyday tool. A developer can locally run a Node.js API, a PostgreSQL database, Redis, or an Nginx service without manually installing each component on their machine. Everything runs inside isolated containers.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This approach greatly simplifies local development, testing, demo environments, continuous integration, and application deployments.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For relatively simple applications, Docker alone may be sufficient. This is especially true when a team manages only a few services, operates a limited infrastructure, has low scalability requirements, or needs little operational automation. In such situations, adding Kubernetes may actually introduce unnecessary complexity.</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">Where Docker Reaches Its Limits</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Docker works extremely well for running containers. However, it does not automatically solve large-scale orchestration challenges.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>As the number of services grows, several questions quickly emerge:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>How do you distribute containers across multiple servers?</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>How do you automatically restart a failed service?</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>How do you perform updates without downtime?</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>How do you automatically absorb traffic spikes?</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>How do you monitor dozens or hundreds of distributed workloads?</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Docker was not designed to handle this level of operational complexity on its own. That is precisely the role of container orchestration, where Kubernetes has become the most widely adopted standard.</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">Kubernetes: Automating Container Operations</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Kubernetes is a container orchestrator. Its goal is not to replace Docker for image creation or containerization logic. Kubernetes operates at a higher level: infrastructure automation and operations management.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>It can automatically deploy applications, distribute workloads across multiple machines, restart failed containers, manage high availability, perform auto-scaling, and orchestrate distributed architectures.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In other words, Docker runs containers. Kubernetes organizes their global behavior. That distinction is essential.</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">A Practical Example: Docker Alone vs Kubernetes</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Consider a modern e-commerce platform. Initially, the application may remain relatively simple: a backend, a frontend, and a database. Docker is often enough to run this stack.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>But over time, the architecture evolves: multiple microservices appear, some components need to scale independently, message queues are introduced, several environments must remain synchronized, availability becomes critical.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>At that point, manually managing every container quickly becomes difficult. Kubernetes introduces automation mechanisms such as automatic workload recovery, load distribution, service replication, rolling deployments, and automatic reconciliation of the desired cluster state.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This is why Kubernetes has become the de facto standard for cloud-native orchestration.</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">Kubernetes vs Docker: Does One Replace the Other?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>This is one of the most common questions, and the answer is clear: Kubernetes does not replace Docker.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For many years, Kubernetes used Docker as its container runtime. That is no longer the default behavior. Starting with version 1.20 (December 2020), Kubernetes deprecated direct Docker support through the “dockershim” component. This support was fully removed in Kubernetes 1.24, released in May 2022.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Since then, Kubernetes has relied on CRI-compatible runtimes (Container Runtime Interface) such as containerd or CRI-O.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This change has little impact on developers in day-to-day workflows. Docker-built images comply with the OCI (Open Container Initiative) standard and remain fully compatible with Kubernetes. The image format itself did not change: only the runtime layer inside Kubernetes clusters evolved.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In practice, Docker and Kubernetes still work together in many environments. Docker is used to build and test images locally. Kubernetes deploys and orchestrates them in production.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The confusion often comes from the fact that Docker historically existed at both stages. That is no longer true on the Kubernetes runtime side, but Docker remains heavily used for builds and development.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The Kubernetes vs Docker distinction is therefore not about replacement, but about roles: each technology operates at a different stage of the containerized application lifecycle.</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">When to Use Docker Without Kubernetes</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Docker alone remains highly relevant in many situations. It is often the right choice for simple projects, internal applications, development environments, prototypes, small web platforms, or infrastructures with limited operational requirements.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In these scenarios, Kubernetes may represent significant operational overhead compared to the actual needs. In some cases, a lightweight distribution such as K3S may also be more appropriate than a full Kubernetes cluster.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Kubernetes is not automatically the best answer for every application, a position explicitly acknowledged at&nbsp; Clever Cloud, including in the context of the launch of&nbsp; <a href="https://www.clever.cloud/product/kubernetes/">Clever Kubernetes Engine (CKE)</a>, a managed Kubernetes platform developed and operated by Clever Cloud.</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">When Kubernetes Actually Becomes Useful</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Kubernetes becomes valuable when an architecture requires advanced orchestration capabilities. This is especially true when multiple services must be coordinated, when deployments become frequent, when resilience becomes critical, when workloads fluctuate significantly, when teams already use GitOps practices, or when infrastructure becomes distributed or hybrid.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Some organizations also use Kubernetes to standardize deployments across multiple environments or cloud providers. In this context, choosing a managed Kubernetes platform often becomes central to reducing operational burden.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This is precisely the type of use case behind solutions such as&nbsp;<a href="https://www.clever.cloud/blog/company/2026/04/27/cke-in-public-beta-managed-sovereign-and-properly-integrated-kubernetes/">CKE</a>, designed to remain compatible with standard Kubernetes ecosystem tools while integrating with the broader Clever Cloud platform.&nbsp;</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">Kubernetes or PaaS: It Is Not Always a Duel</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Another common misconception is that Kubernetes necessarily replaces a PaaS (Platform as a Service). In practice, many applications run perfectly well on a traditional PaaS with less operational overhead and less complexity.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Even within the context of CKE, the positioning is explicit: Kubernetes does not replace the <a href="https://www.clever.cloud/clever-cloud-paas/">PaaS</a>. The two address different operational models, not different levels of complexity: the PaaS takes care of operations, Kubernetes gives you control over them. Both run serious production workloads. The goal is therefore not to move every application onto Kubernetes, but to use it when it provides real technical or operational value.</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">Docker vs Kubernetes: Key Differences to Remember</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;
    -webkit-font-smoothing: antialiased;
    text-rendering: optimizeLegibility;
  }
  .cc-table th,
  .cc-table td {
    text-align: left;
    padding: 12px 16px;
    vertical-align: top;
    line-height: 1.6;
  }

  /* Internal horizontal lines only */
  .cc-table tbody tr + tr td,
  .cc-table tbody tr:first-child td {
    border-top: 1px solid #deddee;
  }

  /* Internal vertical lines only */
  .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;
  }

  /* Column widths */
  .cc-table th:nth-child(1),
  .cc-table td:nth-child(1) { width: 25%; }

  .cc-table th:nth-child(2),
  .cc-table td:nth-child(2) { width: 37.5%; }

  .cc-table th:nth-child(3),
  .cc-table td:nth-child(3) { width: 37.5%; }
</style>

<div class="cc-table-wrap">
  <table class="cc-table">
    <thead>
      <tr>
        <th></th>
        <th>Docker</th>
        <th>Kubernetes</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Main purpose</td>
        <td>Create and run containers</td>
        <td>Orchestrate containers</td>
      </tr>
      <tr>
        <td>Target environments</td>
        <td>Development, simple projects</td>
        <td>Distributed infrastructures</td>
      </tr>
      <tr>
        <td>Complexity</td>
        <td>Easier to get started with</td>
        <td>More complex to operate, designed for advanced orchestration</td>
      </tr>
      <tr>
        <td>Typical use cases</td>
        <td>CI/CD, local environments, prototypes</td>
        <td>Advanced cloud-native architectures</td>
      </tr>
      <tr>
        <td>Automation</td>
        <td>Limited to execution</td>
        <td>Auto-scaling, auto-healing, high availability</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">Docker and Kubernetes Are Not Competing Technologies</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The Kubernetes vs Docker question is not really about choosing one over the other: each addresses a different need at a different stage of the application lifecycle.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Docker simplified the creation and execution of containerized applications. Kubernetes automated their operation at scale.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Not every application needs Kubernetes. In many cases, Docker alone is enough. And to fully delegate operations, a PaaS takes over, including for distributed architectures and high resilience requirements. Kubernetes, for its part, becomes relevant when you need explicit control over orchestration, integration with the CNCF ecosystem, or multi-cloud portability on open standards. It is a choice of operational model and team needs, not a level of application complexity.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The real challenge is therefore not choosing "Docker or Kubernetes," but recognizing the point at which your orchestration needs make Kubernetes genuinely worthwhile.</p>
<!-- /wp:paragraph -->

<!-- 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">Are Docker and Kubernetes competitors?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>No. Docker and Kubernetes address different needs. Docker is mainly used to build and run containers, while Kubernetes orchestrates them at scale.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Does Kubernetes replace Docker?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>No. Since Kubernetes version 1.24 (May 2022), Docker is no longer used as the cluster’s internal runtime. Kubernetes now relies on CRI-compatible runtimes such as containerd or CRI-O. However, Docker images, which comply with the OCI standard, remain fully compatible with Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Why Has Kubernetes Become a Standard?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Kubernetes became the dominant standard thanks to its declarative model, portability across environments, and the cloud-native ecosystem built around the CNCF, where it has been a graduated project since 2016. Its ecosystem includes tools such as Helm, Prometheus, and Argo CD.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What Is the Difference Between K3S and Standard Kubernetes?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3S is a lightweight Kubernetes distribution designed for edge environments, IoT, development, or small clusters, with lower resource consumption than standard Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Is Managed Kubernetes Better?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>In many organizations, yes. Managed Kubernetes reduces the operational burden associated with the control plane, updates, security, and cluster resilience. This is the approach taken by&nbsp; <a href="https://www.clever.cloud/product/kubernetes/">Clever Kubernetes Engine (CKE)</a>.</p>
<!-- /wp:paragraph -->]]></description>
										<content:encoded><![CDATA[<p><img width="800" height="355" src="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-22-clever-cloud-banniere-blog-k8s-vs-docker-eng.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="K8s vs Docker ENG" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/05/2026-05-22-clever-cloud-banniere-blog-k8s-vs-docker-eng.png 800w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-22-clever-cloud-banniere-blog-k8s-vs-docker-eng-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/05/2026-05-22-clever-cloud-banniere-blog-k8s-vs-docker-eng-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>The <a href="https://www.clever.cloud/blog/engineering/2026/05/19/k8s-kubernetes-definition-standard/">Kubernetes</a> vs Docker question deserves a precise answer, because the two technologies do not solve the same problem.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Docker is mainly used to build and run containers. Kubernetes is used to orchestrate those containers once the infrastructure becomes more complex. The two technologies are therefore often complementary, even though they are frequently- and incorrectly - presented as opposites.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Understanding this distinction helps clarify when Docker alone is enough, when Kubernetes becomes relevant, and why not every application actually needs a Kubernetes cluster.</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">Docker : Standardizing Application Execution</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Docker popularized modern containerization. Its goal is simple: make applications run the same way regardless of the environment in which they are executed.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Before Docker, it was common for an application to work perfectly on a developer’s machine but fail once deployed to a server. Differences in system versions, missing dependencies, or inconsistent configurations made deployments significantly more difficult.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Docker largely solved this problem by packaging an application and its dependencies into an isolated container. In practice, the container includes the application itself, its libraries, dependencies, and some system components required for execution.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The environment becomes portable and reproducible. A Docker image can run on any compatible machine with predictable behavior. This standardization explains Docker’s massive adoption across CI/CD pipelines, development environments, and modern architectures.</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">Docker Is Not Just About “Running Containers”</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>In many teams, Docker has become an everyday tool. A developer can locally run a Node.js API, a PostgreSQL database, Redis, or an Nginx service without manually installing each component on their machine. Everything runs inside isolated containers.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This approach greatly simplifies local development, testing, demo environments, continuous integration, and application deployments.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For relatively simple applications, Docker alone may be sufficient. This is especially true when a team manages only a few services, operates a limited infrastructure, has low scalability requirements, or needs little operational automation. In such situations, adding Kubernetes may actually introduce unnecessary complexity.</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">Where Docker Reaches Its Limits</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Docker works extremely well for running containers. However, it does not automatically solve large-scale orchestration challenges.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>As the number of services grows, several questions quickly emerge:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>How do you distribute containers across multiple servers?</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>How do you automatically restart a failed service?</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>How do you perform updates without downtime?</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>How do you automatically absorb traffic spikes?</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>How do you monitor dozens or hundreds of distributed workloads?</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>Docker was not designed to handle this level of operational complexity on its own. That is precisely the role of container orchestration, where Kubernetes has become the most widely adopted standard.</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">Kubernetes: Automating Container Operations</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Kubernetes is a container orchestrator. Its goal is not to replace Docker for image creation or containerization logic. Kubernetes operates at a higher level: infrastructure automation and operations management.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>It can automatically deploy applications, distribute workloads across multiple machines, restart failed containers, manage high availability, perform auto-scaling, and orchestrate distributed architectures.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In other words, Docker runs containers. Kubernetes organizes their global behavior. That distinction is essential.</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">A Practical Example: Docker Alone vs Kubernetes</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Consider a modern e-commerce platform. Initially, the application may remain relatively simple: a backend, a frontend, and a database. Docker is often enough to run this stack.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>But over time, the architecture evolves: multiple microservices appear, some components need to scale independently, message queues are introduced, several environments must remain synchronized, availability becomes critical.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>At that point, manually managing every container quickly becomes difficult. Kubernetes introduces automation mechanisms such as automatic workload recovery, load distribution, service replication, rolling deployments, and automatic reconciliation of the desired cluster state.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This is why Kubernetes has become the de facto standard for cloud-native orchestration.</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">Kubernetes vs Docker: Does One Replace the Other?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>This is one of the most common questions, and the answer is clear: Kubernetes does not replace Docker.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For many years, Kubernetes used Docker as its container runtime. That is no longer the default behavior. Starting with version 1.20 (December 2020), Kubernetes deprecated direct Docker support through the “dockershim” component. This support was fully removed in Kubernetes 1.24, released in May 2022.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Since then, Kubernetes has relied on CRI-compatible runtimes (Container Runtime Interface) such as containerd or CRI-O.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This change has little impact on developers in day-to-day workflows. Docker-built images comply with the OCI (Open Container Initiative) standard and remain fully compatible with Kubernetes. The image format itself did not change: only the runtime layer inside Kubernetes clusters evolved.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In practice, Docker and Kubernetes still work together in many environments. Docker is used to build and test images locally. Kubernetes deploys and orchestrates them in production.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The confusion often comes from the fact that Docker historically existed at both stages. That is no longer true on the Kubernetes runtime side, but Docker remains heavily used for builds and development.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The Kubernetes vs Docker distinction is therefore not about replacement, but about roles: each technology operates at a different stage of the containerized application lifecycle.</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">When to Use Docker Without Kubernetes</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Docker alone remains highly relevant in many situations. It is often the right choice for simple projects, internal applications, development environments, prototypes, small web platforms, or infrastructures with limited operational requirements.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>In these scenarios, Kubernetes may represent significant operational overhead compared to the actual needs. In some cases, a lightweight distribution such as K3S may also be more appropriate than a full Kubernetes cluster.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Kubernetes is not automatically the best answer for every application, a position explicitly acknowledged at&nbsp; Clever Cloud, including in the context of the launch of&nbsp; <a href="https://www.clever.cloud/product/kubernetes/">Clever Kubernetes Engine (CKE)</a>, a managed Kubernetes platform developed and operated by Clever Cloud.</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">When Kubernetes Actually Becomes Useful</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Kubernetes becomes valuable when an architecture requires advanced orchestration capabilities. This is especially true when multiple services must be coordinated, when deployments become frequent, when resilience becomes critical, when workloads fluctuate significantly, when teams already use GitOps practices, or when infrastructure becomes distributed or hybrid.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Some organizations also use Kubernetes to standardize deployments across multiple environments or cloud providers. In this context, choosing a managed Kubernetes platform often becomes central to reducing operational burden.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This is precisely the type of use case behind solutions such as&nbsp;<a href="https://www.clever.cloud/blog/company/2026/04/27/cke-in-public-beta-managed-sovereign-and-properly-integrated-kubernetes/">CKE</a>, designed to remain compatible with standard Kubernetes ecosystem tools while integrating with the broader Clever Cloud platform.&nbsp;</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">Kubernetes or PaaS: It Is Not Always a Duel</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Another common misconception is that Kubernetes necessarily replaces a PaaS (Platform as a Service). In practice, many applications run perfectly well on a traditional PaaS with less operational overhead and less complexity.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Even within the context of CKE, the positioning is explicit: Kubernetes does not replace the <a href="https://www.clever.cloud/clever-cloud-paas/">PaaS</a>. The two address different operational models, not different levels of complexity: the PaaS takes care of operations, Kubernetes gives you control over them. Both run serious production workloads. The goal is therefore not to move every application onto Kubernetes, but to use it when it provides real technical or operational value.</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">Docker vs Kubernetes: Key Differences to Remember</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;
    -webkit-font-smoothing: antialiased;
    text-rendering: optimizeLegibility;
  }
  .cc-table th,
  .cc-table td {
    text-align: left;
    padding: 12px 16px;
    vertical-align: top;
    line-height: 1.6;
  }

  /* Internal horizontal lines only */
  .cc-table tbody tr + tr td,
  .cc-table tbody tr:first-child td {
    border-top: 1px solid #deddee;
  }

  /* Internal vertical lines only */
  .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;
  }

  /* Column widths */
  .cc-table th:nth-child(1),
  .cc-table td:nth-child(1) { width: 25%; }

  .cc-table th:nth-child(2),
  .cc-table td:nth-child(2) { width: 37.5%; }

  .cc-table th:nth-child(3),
  .cc-table td:nth-child(3) { width: 37.5%; }
</style>

<div class="cc-table-wrap">
  <table class="cc-table">
    <thead>
      <tr>
        <th></th>
        <th>Docker</th>
        <th>Kubernetes</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Main purpose</td>
        <td>Create and run containers</td>
        <td>Orchestrate containers</td>
      </tr>
      <tr>
        <td>Target environments</td>
        <td>Development, simple projects</td>
        <td>Distributed infrastructures</td>
      </tr>
      <tr>
        <td>Complexity</td>
        <td>Easier to get started with</td>
        <td>More complex to operate, designed for advanced orchestration</td>
      </tr>
      <tr>
        <td>Typical use cases</td>
        <td>CI/CD, local environments, prototypes</td>
        <td>Advanced cloud-native architectures</td>
      </tr>
      <tr>
        <td>Automation</td>
        <td>Limited to execution</td>
        <td>Auto-scaling, auto-healing, high availability</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">Docker and Kubernetes Are Not Competing Technologies</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The Kubernetes vs Docker question is not really about choosing one over the other: each addresses a different need at a different stage of the application lifecycle.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Docker simplified the creation and execution of containerized applications. Kubernetes automated their operation at scale.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Not every application needs Kubernetes. In many cases, Docker alone is enough. And to fully delegate operations, a PaaS takes over, including for distributed architectures and high resilience requirements. Kubernetes, for its part, becomes relevant when you need explicit control over orchestration, integration with the CNCF ecosystem, or multi-cloud portability on open standards. It is a choice of operational model and team needs, not a level of application complexity.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The real challenge is therefore not choosing "Docker or Kubernetes," but recognizing the point at which your orchestration needs make Kubernetes genuinely worthwhile.</p>
<!-- /wp:paragraph -->

<!-- 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">Are Docker and Kubernetes competitors?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>No. Docker and Kubernetes address different needs. Docker is mainly used to build and run containers, while Kubernetes orchestrates them at scale.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Does Kubernetes replace Docker?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>No. Since Kubernetes version 1.24 (May 2022), Docker is no longer used as the cluster’s internal runtime. Kubernetes now relies on CRI-compatible runtimes such as containerd or CRI-O. However, Docker images, which comply with the OCI standard, remain fully compatible with Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Why Has Kubernetes Become a Standard?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Kubernetes became the dominant standard thanks to its declarative model, portability across environments, and the cloud-native ecosystem built around the CNCF, where it has been a graduated project since 2016. Its ecosystem includes tools such as Helm, Prometheus, and Argo CD.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What Is the Difference Between K3S and Standard Kubernetes?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>K3S is a lightweight Kubernetes distribution designed for edge environments, IoT, development, or small clusters, with lower resource consumption than standard Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Is Managed Kubernetes Better?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>In many organizations, yes. Managed Kubernetes reduces the operational burden associated with the control plane, updates, security, and cluster resilience. This is the approach taken by&nbsp; <a href="https://www.clever.cloud/product/kubernetes/">Clever Kubernetes Engine (CKE)</a>.</p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CKE in public beta: managed, sovereign, and properly integrated Kubernetes</title>
		<link>https://www.clever.cloud/blog/company/2026/04/27/cke-in-public-beta-managed-sovereign-and-properly-integrated-kubernetes/</link>
		
		<dc:creator><![CDATA[Horacio Gonzalez]]></dc:creator>
		<pubDate>Mon, 27 Apr 2026 15:11:30 +0000</pubDate>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Features]]></category>
		<category><![CDATA[cke]]></category>
		<category><![CDATA[K8S]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<guid isPermaLink="false">https://www.clever.cloud/?p=24230</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-eng.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Clever Cloud Bannière Blog CKE" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-eng.png 800w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-eng-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-eng-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>So we built our own orchestrator. It runs on micro-VMs and gives us a clean kernel boundary between workloads, with no shared kernel between tenants. That is what runs tens of thousands of applications in production on our <a href="https://www.clever.cloud/clever-cloud-paas/">PaaS</a> today, and for most projects it is still the shortest path from a commit to production.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>When Docker arrived, some workloads fit better as a container image than as one of our native runtimes. So we added a Docker runtime to the platform, where it made sense. Not to replace our approach, but to broaden it.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Then Kubernetes established itself as the de facto standard for container orchestration. Its ecosystem (Helm, operators, GitOps, and so on) became unavoidable for many teams.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We could have kept saying that, in many cases, Kubernetes is not the best path to production. That is still true. But it was no longer enough. That is why we are launching <a href="https://www.clever.cloud/clever-kubernetes-engine/">CKE, our Clever Kubernetes Engine</a>, available in public beta starting today.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>As many know, we resisted for years the idea of offering Kubernetes as just another checkbox in the Console. Not because Kubernetes is useless, but because it has too often become a default answer to problems the PaaS solves more simply: deploying an application, scaling it, monitoring it, isolating it, connecting it to a database, managing its environment variables, its logs and its lifecycle. And we still believe that.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>But Kubernetes has become the common language of a large part of the cloud-native ecosystem. Helm, operators, GitOps, already-containerized workloads, internal platforms and existing toolchains are part of the daily reality of many teams. And our reason for being is to make life easier for technical teams.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The question was no longer "should we do Kubernetes?", but "can we do Kubernetes without giving up what makes Clever Cloud?"</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Not a quickly repackaged Kubernetes</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The fastest way to ship managed Kubernetes is to wrap an upstream distribution behind an admin console, add a provisioning API, and bill the cluster by the hour. It is a valid strategy if you want to ship fast. It is not the one we wanted.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For CKE, we had three requirements that cannot be solved by simply bolting Kubernetes on top of the rest of the platform.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The first is sovereignty. CKE is operated in Europe, on our infrastructure and that of our partners, and can also be deployed on the on-premises infrastructure of customers who need it. No dependency on US hyperscalers, no grey areas around data jurisdiction, no vague promises about where the infrastructure actually runs.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The second is integration with the rest of Clever Cloud. We did not want to create a Kubernetes silo sitting alongside the PaaS, the managed databases, the object storage and the private network. We wanted a Kubernetes that fits inside the same platform, with the same Console, the same tooling, the same billing, the same governance rules and the same <a href="https://www.clever.cloud/blog/company/2025/03/19/managed-services/">managed services</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The third is operational predictability. Kubernetes is a complex distributed system, and its behaviour under load depends heavily on its foundations. We did not want to operate a product whose underlying layer would remain a black box or a default-accepted limitation. That is what led us to work on something few providers touch: Kubernetes' internal consistency layer.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Under the hood: Materia etcd on FoundationDB</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>In Kubernetes, etcd is the component that stores cluster state: manifests, resources, secrets, node state. It is the source of truth for the entire orchestrator.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>It is also one of the most sensitive components in the system.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>etcd works very well within the scope it was designed for. But its limits at scale are well known: store size, latencies under heavy write load, behaviour during network partitions, backup and restore operations, the need for compaction and fine-grained monitoring. When Kubernetes becomes a critical foundation, etcd becomes an operational concern in its own right.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We did not want to build CKE on top of a brick we would then treat as a fragile black box.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>So we took the problem back to its root: keep the contract Kubernetes expects, but replace the internal consistency layer with an implementation backed by FoundationDB. We call it Materia etcd.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>FoundationDB gives us distributed ACID transactions, a robust consistency model, and a <a href="https://apple.github.io/foundationdb/testing.html">deterministic simulation testing</a> approach that fits very well with how we build critical infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For end users, this work is invisible. That is precisely the point. Under the hood, this foundation lets us build CKE with the auto-scaling, auto-healing and operational predictability we expect from a Clever Cloud service.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We will come back to Materia etcd in more detail soon, because the topic deserves a dedicated article.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Standard Kubernetes on the developer side</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>All this work on the underlying layer has a simple goal: on the user side, CKE has to be standard Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Your manifests work without modification. Your Helm charts install normally. Your Argo CD or your Flux plugs in like on any other cluster. Your Kubernetes operators run without surprises.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CKE does not try to reinvent the developer interface of Kubernetes. That would be counterproductive. If you already have a Kubernetes deployment chain, the goal is for it to run on CKE with as little friction as possible.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The difference happens elsewhere: in how this Kubernetes integrates with the rest of the Clever Cloud platform.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Kubernetes when you need it, the PaaS when it is enough</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>CKE does not replace our PaaS. It complements it.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For many applications, the PaaS remains the best choice: less operations, less configuration, less YAML, less maintenance surface. If your application fits naturally in a Clever Cloud runtime, the PaaS is often still the simplest and most robust path.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>But there are cases where Kubernetes is the right tool.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>You may need to install :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>An operator;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Reuse existing manifests;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Standardize a GitOps chain;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Deploy a workload already distributed as a Helm chart;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Run an internal platform built around the Kubernetes API;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Or simply meet the habits of a team that already works with Kubernetes day to day.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>In those cases, the problem is not Kubernetes itself. The problem is Kubernetes isolated from the rest of your system.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>That is where CKE changes things. You can keep a Node.js API on the PaaS, a static frontend on Cellar, a managed PostgreSQL database, and run on CKE only the component, the operator or the workload that really needs Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>All within the same Clever Cloud environment.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Native integration with the Clever Cloud ecosystem</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>CKE was designed to integrate with the services you already use on Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>Cellar</strong>, our S3-compatible object storage, can be used from your Kubernetes workloads.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Managed databases</strong> (PostgreSQL, MySQL, MongoDB, Redis, Materia) attach to your cluster the same way they do to any other Clever Cloud application.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>IAM as a Service</strong> lets you manage authentication and permissions on the cluster and on the teams that access it.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Network Groups</strong> lets you connect your CKE cluster to your existing Clever Cloud PaaS applications, in the same private network.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>The Network Groups integration is probably the one that changes day-to-day work the most.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Kubernetes is often introduced into organizations as a new island: new console, new network, new secrets, new access rules, new billing, a new way to connect services together.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>With CKE, the goal is the opposite. Kubernetes becomes one more brick in the Clever Cloud architecture, not a parallel world.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>So you can build a hybrid architecture without workarounds: part on the PaaS, part on CKE, managed databases, object storage, private networking, and shared governance.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Enabling CKE and deploying a first application</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>For this demo, we will stick to the bare minimum: enable the feature, create a cluster, fetch a kubeconfig, add a node group, and deploy a first application with a <code>LoadBalancer</code> service.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>On the prerequisites side, you will need <a href="https://www.clever.cloud/developers/doc/cli/">Clever Tools</a> version 4.3 or later, and <code>kubectl</code> installed locally.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Since the public beta opened on April 27, the Kubernetes feature can be enabled by any Clever Cloud customer, with a single command:</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>You can then create a cluster. Give it a name, point to your organization, and the <code>--watch</code> option lets you follow the deployment progress:</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>Creation takes about a minute. At any time, you can list the clusters in your organization with <code>clever k8s list</code>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Once the cluster is ready, fetch its kubeconfig and write it directly as your default local configuration:</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>From there, it is standard Kubernetes. <code>kubectl</code> talks to the cluster, and your usual tooling follows. You can start by checking that everything is in 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>At this stage, the list is empty: the cluster is created but has no compute capacity. This is a good moment to introduce the first CKE-specific API resource: the <code>NodeGroup</code>. A node group is a set of Kubernetes nodes with the same profile (same flavor, same region), managed as a unit. You describe it like any other Kubernetes resource, in a YAML file:</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>And you apply it with <code>kubectl</code>:</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>Sixty to ninety seconds later, the nodes join the 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>To resize the node group, you stay within the Kubernetes API:</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>With a cluster that now has compute capacity, you can deploy a first application. To keep things simple, an nginx exposed through a <code>LoadBalancer</code> service, which will automatically provision a load balancer on the Clever Cloud side:</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>A few seconds later, the service exposes a public address. This is exactly the responsive behaviour we mentioned about the private testing phase: provisioning a node group, scaling it or exposing a service requires no waiting and no manual configuration.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>From here, it is Kubernetes like anywhere else. You can add persistent storage through the Clever Cloud CSI, install the <a href="https://github.com/CleverCloud/clever-kubernetes-operator">Clever Kubernetes Operator</a> to provision a managed database from your manifests, or plug in your usual GitOps chain. The cluster supports Kubernetes versions 1.34, 1.35 and 1.36, with 1.35 as the default. Everything is detailed in the <a href="https://www.clever.cloud/developers/doc/kubernetes/">CKE documentation</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What we saw during private testing and at Devoxx, and what is next</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>CKE is now in public beta, but some of our customers have had private access for several months. That phase was very useful to expose the product to real-world usage before opening it more widely.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The feedback has been very positive. The cluster behaves as expected, and the operations that come up most often in a Kubernetes team's daily life, such as adding a node or setting up a load balancer, are fast and predictable. That is exactly the behaviour we were aiming for when we invested so much time into the internal consistency layer.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>At Devoxx France, we presented CKE on the Clever Cloud booth for three days. The conversations confirmed two things we were already observing.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>First, teams are not just looking for a Kubernetes cluster. They are looking for a Kubernetes that integrates cleanly with their platform, their network, their databases, their security constraints and their existing practices.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Second, and probably the most striking feedback, developers are not looking to put everything on Kubernetes. Many want to keep their classic applications on our PaaS, where it is the most efficient, and deploy on Kubernetes only the components that really warrant it, because of their complexity, their distributed architecture, or the constraints of the ecosystem they fit into.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This is exactly the kind of hybrid architecture CKE is designed to enable.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>It is also why, ahead of the launch, we built the <a href="https://github.com/CleverCloud/clever-kubernetes-operator">Clever Kubernetes Operator</a>. It allows a workload running in a Kubernetes cluster, whether hosted with us or elsewhere, to provision and consume our managed services directly from the Kubernetes API: PostgreSQL, MySQL, MongoDB, Redis, Cellar or Materia.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For your teams, it is a <code>kubectl apply</code> that creates a managed database. For CKE, it is the natural tool to bridge Kubernetes workloads and the rest of the Clever Cloud platform.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The beta is open to all Clever Cloud customers. You can enable it right now, deploy your first workloads, and tell us what is missing, what surprises you or what you would like to see come next.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The discussion is open on <a href="https://github.com/CleverCloud/Community/discussions">our GitHub </a><a href="https://github.com/CleverCloud/Community/discussions/categories/kubernetes" target="_blank" rel="noreferrer noopener">community</a>, and the documentation is available <a href="https://www.clever.cloud/developers">here</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CKE does not replace our PaaS. It complements it.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For many applications, the PaaS remains the simplest path from a commit to production. But when you need Kubernetes, for an operator, a Helm chart, a GitOps chain, an already-standardized workload or an internal platform, you can now do it inside the Clever Cloud environment, with our infrastructure choices, our network, our managed services and our sovereignty requirements.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>That is the kind of Kubernetes we wanted to build.</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-eng.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Clever Cloud Bannière Blog CKE" decoding="async" loading="lazy" srcset="https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-eng.png 800w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-eng-300x133.png 300w, https://cdn.clever-cloud.com/uploads/2026/04/2026-04-27-clever-cloud-banniere-blog-cke-eng-768x341.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p><!-- wp:paragraph -->
<p>So we built our own orchestrator. It runs on micro-VMs and gives us a clean kernel boundary between workloads, with no shared kernel between tenants. That is what runs tens of thousands of applications in production on our <a href="https://www.clever.cloud/clever-cloud-paas/">PaaS</a> today, and for most projects it is still the shortest path from a commit to production.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>When Docker arrived, some workloads fit better as a container image than as one of our native runtimes. So we added a Docker runtime to the platform, where it made sense. Not to replace our approach, but to broaden it.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Then Kubernetes established itself as the de facto standard for container orchestration. Its ecosystem (Helm, operators, GitOps, and so on) became unavoidable for many teams.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We could have kept saying that, in many cases, Kubernetes is not the best path to production. That is still true. But it was no longer enough. That is why we are launching <a href="https://www.clever.cloud/clever-kubernetes-engine/">CKE, our Clever Kubernetes Engine</a>, available in public beta starting today.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>As many know, we resisted for years the idea of offering Kubernetes as just another checkbox in the Console. Not because Kubernetes is useless, but because it has too often become a default answer to problems the PaaS solves more simply: deploying an application, scaling it, monitoring it, isolating it, connecting it to a database, managing its environment variables, its logs and its lifecycle. And we still believe that.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>But Kubernetes has become the common language of a large part of the cloud-native ecosystem. Helm, operators, GitOps, already-containerized workloads, internal platforms and existing toolchains are part of the daily reality of many teams. And our reason for being is to make life easier for technical teams.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The question was no longer "should we do Kubernetes?", but "can we do Kubernetes without giving up what makes Clever Cloud?"</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Not a quickly repackaged Kubernetes</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>The fastest way to ship managed Kubernetes is to wrap an upstream distribution behind an admin console, add a provisioning API, and bill the cluster by the hour. It is a valid strategy if you want to ship fast. It is not the one we wanted.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For CKE, we had three requirements that cannot be solved by simply bolting Kubernetes on top of the rest of the platform.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The first is sovereignty. CKE is operated in Europe, on our infrastructure and that of our partners, and can also be deployed on the on-premises infrastructure of customers who need it. No dependency on US hyperscalers, no grey areas around data jurisdiction, no vague promises about where the infrastructure actually runs.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The second is integration with the rest of Clever Cloud. We did not want to create a Kubernetes silo sitting alongside the PaaS, the managed databases, the object storage and the private network. We wanted a Kubernetes that fits inside the same platform, with the same Console, the same tooling, the same billing, the same governance rules and the same <a href="https://www.clever.cloud/blog/company/2025/03/19/managed-services/">managed services</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The third is operational predictability. Kubernetes is a complex distributed system, and its behaviour under load depends heavily on its foundations. We did not want to operate a product whose underlying layer would remain a black box or a default-accepted limitation. That is what led us to work on something few providers touch: Kubernetes' internal consistency layer.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Under the hood: Materia etcd on FoundationDB</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>In Kubernetes, etcd is the component that stores cluster state: manifests, resources, secrets, node state. It is the source of truth for the entire orchestrator.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>It is also one of the most sensitive components in the system.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>etcd works very well within the scope it was designed for. But its limits at scale are well known: store size, latencies under heavy write load, behaviour during network partitions, backup and restore operations, the need for compaction and fine-grained monitoring. When Kubernetes becomes a critical foundation, etcd becomes an operational concern in its own right.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We did not want to build CKE on top of a brick we would then treat as a fragile black box.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>So we took the problem back to its root: keep the contract Kubernetes expects, but replace the internal consistency layer with an implementation backed by FoundationDB. We call it Materia etcd.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>FoundationDB gives us distributed ACID transactions, a robust consistency model, and a <a href="https://apple.github.io/foundationdb/testing.html">deterministic simulation testing</a> approach that fits very well with how we build critical infrastructure.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For end users, this work is invisible. That is precisely the point. Under the hood, this foundation lets us build CKE with the auto-scaling, auto-healing and operational predictability we expect from a Clever Cloud service.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>We will come back to Materia etcd in more detail soon, because the topic deserves a dedicated article.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Standard Kubernetes on the developer side</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>All this work on the underlying layer has a simple goal: on the user side, CKE has to be standard Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Your manifests work without modification. Your Helm charts install normally. Your Argo CD or your Flux plugs in like on any other cluster. Your Kubernetes operators run without surprises.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CKE does not try to reinvent the developer interface of Kubernetes. That would be counterproductive. If you already have a Kubernetes deployment chain, the goal is for it to run on CKE with as little friction as possible.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The difference happens elsewhere: in how this Kubernetes integrates with the rest of the Clever Cloud platform.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Kubernetes when you need it, the PaaS when it is enough</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>CKE does not replace our PaaS. It complements it.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For many applications, the PaaS remains the best choice: less operations, less configuration, less YAML, less maintenance surface. If your application fits naturally in a Clever Cloud runtime, the PaaS is often still the simplest and most robust path.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>But there are cases where Kubernetes is the right tool.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>You may need to install :</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>An operator;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Reuse existing manifests;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Standardize a GitOps chain;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Deploy a workload already distributed as a Helm chart;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Run an internal platform built around the Kubernetes API;</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>Or simply meet the habits of a team that already works with Kubernetes day to day.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>In those cases, the problem is not Kubernetes itself. The problem is Kubernetes isolated from the rest of your system.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>That is where CKE changes things. You can keep a Node.js API on the PaaS, a static frontend on Cellar, a managed PostgreSQL database, and run on CKE only the component, the operator or the workload that really needs Kubernetes.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>All within the same Clever Cloud environment.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Native integration with the Clever Cloud ecosystem</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>CKE was designed to integrate with the services you already use on Clever Cloud.</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>Cellar</strong>, our S3-compatible object storage, can be used from your Kubernetes workloads.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Managed databases</strong> (PostgreSQL, MySQL, MongoDB, Redis, Materia) attach to your cluster the same way they do to any other Clever Cloud application.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>IAM as a Service</strong> lets you manage authentication and permissions on the cluster and on the teams that access it.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>Network Groups</strong> lets you connect your CKE cluster to your existing Clever Cloud PaaS applications, in the same private network.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>The Network Groups integration is probably the one that changes day-to-day work the most.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Kubernetes is often introduced into organizations as a new island: new console, new network, new secrets, new access rules, new billing, a new way to connect services together.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>With CKE, the goal is the opposite. Kubernetes becomes one more brick in the Clever Cloud architecture, not a parallel world.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>So you can build a hybrid architecture without workarounds: part on the PaaS, part on CKE, managed databases, object storage, private networking, and shared governance.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Enabling CKE and deploying a first application</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>For this demo, we will stick to the bare minimum: enable the feature, create a cluster, fetch a kubeconfig, add a node group, and deploy a first application with a <code>LoadBalancer</code> service.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>On the prerequisites side, you will need <a href="https://www.clever.cloud/developers/doc/cli/">Clever Tools</a> version 4.3 or later, and <code>kubectl</code> installed locally.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Since the public beta opened on April 27, the Kubernetes feature can be enabled by any Clever Cloud customer, with a single command:</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>You can then create a cluster. Give it a name, point to your organization, and the <code>--watch</code> option lets you follow the deployment progress:</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>Creation takes about a minute. At any time, you can list the clusters in your organization with <code>clever k8s list</code>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Once the cluster is ready, fetch its kubeconfig and write it directly as your default local configuration:</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>From there, it is standard Kubernetes. <code>kubectl</code> talks to the cluster, and your usual tooling follows. You can start by checking that everything is in 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>At this stage, the list is empty: the cluster is created but has no compute capacity. This is a good moment to introduce the first CKE-specific API resource: the <code>NodeGroup</code>. A node group is a set of Kubernetes nodes with the same profile (same flavor, same region), managed as a unit. You describe it like any other Kubernetes resource, in a YAML file:</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>And you apply it with <code>kubectl</code>:</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>Sixty to ninety seconds later, the nodes join the 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>To resize the node group, you stay within the Kubernetes API:</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>With a cluster that now has compute capacity, you can deploy a first application. To keep things simple, an nginx exposed through a <code>LoadBalancer</code> service, which will automatically provision a load balancer on the Clever Cloud side:</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>A few seconds later, the service exposes a public address. This is exactly the responsive behaviour we mentioned about the private testing phase: provisioning a node group, scaling it or exposing a service requires no waiting and no manual configuration.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>From here, it is Kubernetes like anywhere else. You can add persistent storage through the Clever Cloud CSI, install the <a href="https://github.com/CleverCloud/clever-kubernetes-operator">Clever Kubernetes Operator</a> to provision a managed database from your manifests, or plug in your usual GitOps chain. The cluster supports Kubernetes versions 1.34, 1.35 and 1.36, with 1.35 as the default. Everything is detailed in the <a href="https://www.clever.cloud/developers/doc/kubernetes/">CKE documentation</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">What we saw during private testing and at Devoxx, and what is next</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>CKE is now in public beta, but some of our customers have had private access for several months. That phase was very useful to expose the product to real-world usage before opening it more widely.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The feedback has been very positive. The cluster behaves as expected, and the operations that come up most often in a Kubernetes team's daily life, such as adding a node or setting up a load balancer, are fast and predictable. That is exactly the behaviour we were aiming for when we invested so much time into the internal consistency layer.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>At Devoxx France, we presented CKE on the Clever Cloud booth for three days. The conversations confirmed two things we were already observing.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>First, teams are not just looking for a Kubernetes cluster. They are looking for a Kubernetes that integrates cleanly with their platform, their network, their databases, their security constraints and their existing practices.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Second, and probably the most striking feedback, developers are not looking to put everything on Kubernetes. Many want to keep their classic applications on our PaaS, where it is the most efficient, and deploy on Kubernetes only the components that really warrant it, because of their complexity, their distributed architecture, or the constraints of the ecosystem they fit into.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>This is exactly the kind of hybrid architecture CKE is designed to enable.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>It is also why, ahead of the launch, we built the <a href="https://github.com/CleverCloud/clever-kubernetes-operator">Clever Kubernetes Operator</a>. It allows a workload running in a Kubernetes cluster, whether hosted with us or elsewhere, to provision and consume our managed services directly from the Kubernetes API: PostgreSQL, MySQL, MongoDB, Redis, Cellar or Materia.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For your teams, it is a <code>kubectl apply</code> that creates a managed database. For CKE, it is the natural tool to bridge Kubernetes workloads and the rest of the Clever Cloud platform.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The beta is open to all Clever Cloud customers. You can enable it right now, deploy your first workloads, and tell us what is missing, what surprises you or what you would like to see come next.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>The discussion is open on <a href="https://github.com/CleverCloud/Community/discussions">our GitHub </a><a href="https://github.com/CleverCloud/Community/discussions/categories/kubernetes" target="_blank" rel="noreferrer noopener">community</a>, and the documentation is available <a href="https://www.clever.cloud/developers">here</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>CKE does not replace our PaaS. It complements it.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>For many applications, the PaaS remains the simplest path from a commit to production. But when you need Kubernetes, for an operator, a Helm chart, a GitOps chain, an already-standardized workload or an internal platform, you can now do it inside the Clever Cloud environment, with our infrastructure choices, our network, our managed services and our sovereignty requirements.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>That is the kind of Kubernetes we wanted to build.</p>
<!-- /wp:paragraph -->]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
