<p>I was reading about the Minikube installation process and the names Drivers and Containers Runtimes got me confused.</p>
<p><strong>Drivers</strong></p>
<p>When I don't choose a driver Minikube will use the Docker driver by default, thus using a Docker daemon inside Minikube itself. When I choose none it'll use the host's Docker daemon. Others can be chosen like podman, KVM, etc.</p>
<p><strong>Container Runtimes</strong></p>
<p>When it comes to the Container Runtime I can choose, again, Docker or others like Containerd.</p>
<p><strong>My Inquire</strong></p>
<p>What I couldn't find is a more detailed explanation around the differences between Drivers and Container Runtimes. Actually I know that the Runtimes exist to run container in Pods, but what about Drivers? Does the Container Runtime runs on top of the Driver?</p>

<p><strong>Drivers</strong></p>
<ul>
<li>Where do you want to run Kubernetes on top of?
<ul>
<li>VMs? -&gt; Hyperkit, VirtualBox, Parallels, VMWare, etc</li>
<li>Containers? -&gt; Docker (Ironically, this runs on VM if you are on a Mac or Windows, but not on Linux), Podman, etc.</li>
</ul>
</li>
</ul>
<p><strong>Container Runtimes</strong></p>
<ul>
<li>When your cluster gets created how would you like it to be configured? Using what runtime or shim to instantiate its containers (and Pods)?
<ul>
<li><a href="https://containerd.io/" rel="noreferrer">Containerd</a> -&gt; It's a shim that understands <a href="https://kubernetes.io/blog/2016/12/container-runtime-interface-cri-in-kubernetes/" rel="noreferrer">CRI</a> from the kubelet and runs containers with an executable like <a href="https://github.com/opencontainers/runc" rel="noreferrer">runc</a> (the actual runtime, that uses things like <a href="https://linux.die.net/man/1/cgcreate" rel="noreferrer">cgcreate</a> and <a href="https://man7.org/linux/man-pages/man1/nsenter.1.html" rel="noreferrer">nsenter</a>)</li>
<li><a href="https://cri-o.io/" rel="noreferrer">CRI-O</a> -&gt; It's another shim that understands <a href="https://kubernetes.io/blog/2016/12/container-runtime-interface-cri-in-kubernetes/" rel="noreferrer">CRI</a> from the kubelet and just like Containerd runs containers with an executable like runc</li>
<li>Docker -&gt; The kubelet directly talks to the Docker daemon using the <a href="https://github.com/kubernetes/kubernetes/tree/master/pkg/kubelet/dockershim" rel="noreferrer">dockershim</a> that talks to Containerd, that instantiates your containers (I know it's complicated, historical reasons...)</li>
</ul>
</li>
</ul>
<p>✌️</p>
