<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://tech.uvoo.io/index.php?action=history&amp;feed=atom&amp;title=Kube-virt_-_k8s_in_k8s</id>
	<title>Kube-virt - k8s in k8s - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://tech.uvoo.io/index.php?action=history&amp;feed=atom&amp;title=Kube-virt_-_k8s_in_k8s"/>
	<link rel="alternate" type="text/html" href="https://tech.uvoo.io/index.php?title=Kube-virt_-_k8s_in_k8s&amp;action=history"/>
	<updated>2026-08-03T13:14:44Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>https://tech.uvoo.io/index.php?title=Kube-virt_-_k8s_in_k8s&amp;diff=5735&amp;oldid=prev</id>
		<title>Busk: Created page with &quot;One of the most popular and powerful use cases for KubeVirt, often referred to as **Kubernetes-in-Kubernetes** or **Tenant Clusters**.  In this architecture, your underlying b...&quot;</title>
		<link rel="alternate" type="text/html" href="https://tech.uvoo.io/index.php?title=Kube-virt_-_k8s_in_k8s&amp;diff=5735&amp;oldid=prev"/>
		<updated>2026-08-02T15:11:02Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;One of the most popular and powerful use cases for KubeVirt, often referred to as **Kubernetes-in-Kubernetes** or **Tenant Clusters**.  In this architecture, your underlying b...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;One of the most popular and powerful use cases for KubeVirt, often referred to as **Kubernetes-in-Kubernetes** or **Tenant Clusters**.&lt;br /&gt;
&lt;br /&gt;
In this architecture, your underlying bare-metal Kubernetes cluster acts as the **infrastructure management layer** (the control plane for hardware), and KubeVirt provisions VMs that join together to form separate, isolated **tenant Kubernetes clusters**.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
## Why Do This? (Key Benefits)&lt;br /&gt;
&lt;br /&gt;
* **Multi-Tenancy &amp;amp; Hard Isolation:** Containers share the host kernel. If you need strict security boundaries between teams or environments (e.g., Prod vs. Dev), VMs provide hardware-level virtualization isolation.&lt;br /&gt;
* **Infrastructure-as-Code (GitOps):** You can manage the lifecycle of entire target Kubernetes clusters declaratively using standard `kubectl` commands or GitOps pipelines (ArgoCD/Flux).&lt;br /&gt;
* **Cluster API (CAPI) Integration:** Using the **Cluster API Provider KubeVirt (CAPK)**, you can declare a target Kubernetes cluster in YAML, and CAPI + KubeVirt will automatically spin up the VMs, run `cloud-init` to install Kubernetes on them, and join them into a fully functional tenant cluster.&lt;br /&gt;
* **Testing &amp;amp; Sandbox Environments:** It allows developers to spin up ephemeral, full-featured Kubernetes clusters (with custom kernel modules or CNI configurations) without needing real physical hardware.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
## How the Architecture Looks&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
┌────────────────────────────────────────────────────────────────────────┐&lt;br /&gt;
│                      BARE-METAL KUBERNETES CLUSTER                     │&lt;br /&gt;
│  (Management Cluster: Physical Servers + Storage + KubeVirt Operator)  │&lt;br /&gt;
│                                                                        │&lt;br /&gt;
│  ┌──────────────────────────────────────────────────────────────────┐  │&lt;br /&gt;
│  │                    TENANT KUBERNETES CLUSTER                     │  │&lt;br /&gt;
│  │                                                                  │  │&lt;br /&gt;
│  │   ┌────────────────────┐              ┌────────────────────┐     │  │&lt;br /&gt;
│  │   │ KubeVirt VM 1      │              │ KubeVirt VM 2      │     │  │&lt;br /&gt;
│  │   │ (Tenant Control)   │              │ (Tenant Worker)    │     │  │&lt;br /&gt;
│  │   │                    │              │                    │     │  │&lt;br /&gt;
│  │   │ ┌────────────────┐ │   Network    │ ┌────────────────┐ │     │  │&lt;br /&gt;
│  │   │ │ Tenant K8s API │ ◄────────────────►│ Tenant Pods    │ │     │  │&lt;br /&gt;
│  │   │ └────────────────┘ │ (Overlay/VLAN) │ └────────────────┘ │     │  │&lt;br /&gt;
│  │   └────────────────────┘              └────────────────────┘     │  │&lt;br /&gt;
│  └──────────────────────────────────────────────────────────────────┘  │&lt;br /&gt;
└────────────────────────────────────────────────────────────────────────┘&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
## Typical Workflow&lt;br /&gt;
&lt;br /&gt;
1. **Deploy Bare-Metal K8s:** You set up physical servers with a Kubernetes distribution (e.g., Talos, RKE2, OpenShift, or upstream K8s).&lt;br /&gt;
2. **Install KubeVirt:** Deploy the KubeVirt operator on the bare-metal cluster.&lt;br /&gt;
3. **Use Cluster API (CAPK):** Apply a manifest defining a tenant cluster (e.g., 1 Control Plane VM, 3 Worker VMs).&lt;br /&gt;
4. **Bootstrapping via cloud-init:** KubeVirt boots the VMs, and `cloud-init` runs scripts (like `kubeadm join` or `k3s`) to wire the nodes into the new nested cluster.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
## Things to Consider&lt;br /&gt;
&lt;br /&gt;
* **Nested Virtualization / Overhead:** Ensure hardware-assisted virtualization (`/dev/kvm`) is available on your bare-metal nodes so KubeVirt runs near native speed.&lt;br /&gt;
* **Networking:** You’ll need a CNI or plugin like **Multus** or **OVN-Kubernetes** on the bare-metal cluster to assign dedicated IPs or VLANs to the VM nodes so the tenant cluster can route traffic cleanly.&lt;/div&gt;</summary>
		<author><name>Busk</name></author>
	</entry>
</feed>