<p>Upon digging deeper into the Kubernetes architecture it seems that all Kubernetes clusters (both on-premises and cloud) must use Linux as their control-plane (a.k.a. master) nodes.</p>
<p>With that being said the following questions come to mind:</p>
<ul>
<li>How come this is the case?</li>
<li>Why couldn't Windows be used as the control-plane?</li>
</ul>

<p>First of all I want to say that from a technical perspective it <em>would</em> be possible to have a control plane running onto Windows. It is totally doable, however, no one wants to invest time into a solution which is worse than what already exist and it would take quite some time in order to make this work. Why eat soup with a fork if you already have a spoon?</p>
<p>Now one might wonder if I am exaggerating or not. So I'll try to explain some of the issues that Windows has when it comes to containerization. For that to happen I'll have to explain <strong>how containers work</strong> first:</p>
<p>Nowadays whenever people are talking about containers they are talking about Linux containers (which I am also going to do in this answer unless stated otherwise). Containers are essentially using Linux Kernel features, most importantly (but not limited to) <a href="https://man7.org/linux/man-pages/man7/namespaces.7.html" rel="nofollow noreferrer">Linux namespaces</a>. There are many different namespaces (PID, Network, ...) that can be used for &quot;isolation&quot;. As an example one can create a new PID namespace, assign it a process and that process will only be able to see itself as the running process (because it is &quot;isolated&quot;). Sounds familiar? Well, if you ever executed <code>ps aux</code> in a container this is what is going to happen.
Since it is not possible to cover all the different kinds of Linux features that are essential in order for containers to work in a single post, I hope that by now it is clear that &quot;normal&quot; containers are essentially dependent on Linux.</p>
<p>Okay, so if what I am saying is true, <strong>how can containers work on Windows at all</strong>?</p>
<p>Guess what...they don't. What Windows is actually doing is spinning up a lightweight Linux machine in the background which then hosts containers. Sounds ridiculous? Well, it is. <a href="https://learn.microsoft.com/en-us/dotnet/architecture/microservices/container-docker-introduction/docker-defined" rel="nofollow noreferrer">Here</a> is a passage out of Microsoft's documentation:</p>
<blockquote>
<p>However, Windows images can run only on Windows hosts and Linux images can run on Linux hosts and Windows hosts (using a Hyper-V Linux VM, so far), where host means a server or a VM.</p>
</blockquote>
<p>So what about <strong>Windows containers</strong> then (as opposed to Linux containers)?</p>
<p>Windows containers do run natively on Windows by using features of the Windows kernel, similar as Linux containers do. Developers tried to mimic the behavior of Linux containers as much as possible, however, due to poor design of the Windows kernel this simply is not possible and many hacks had to be used. As one can imagine, many issues come with that decision, too many to actually mention them all. Just to mention one: Windows containers are way bigger than Linux containers. It is very common for Window containers to actually reach gigabyte sizes. <a href="https://devblogs.microsoft.com/dotnet/we-made-windows-server-core-container-images-40-smaller/" rel="nofollow noreferrer">Even after making Windows Server Core images smaller by 40% back in 2019</a> the insider image was still over 1GB (uncompressed even over 2.5GB).</p>
<p>With all that overhead in mind, Linux simply is superior in every way when it comes to containerization (and many other things as well) and there has never been a need to have a Windows control plane.</p>
<p><strong>TL;DR</strong></p>
<p>Because Windows is a poor operating system when it comes to containerization (and many other things).</p>
