如果在 Ubuntu 20.04 上安装了 docker-ce 和 containerd,那么 K8s 使用什么 CRI?

问题描述

在用于安装 kubeadm 的官方 Kubernetes 文档中发现 here,它指出“如果检测到 Docker 和 containerd,则 Docker 优先”,如果在我的 Ubuntu 20.04 主机上,我已将 docker-ce docker-ce-cli containerd.io 安装为docker install documentation 建议,K8s 是直接与 containerd 组件通信还是仍然使用(即将在树 K8s 中弃用)dockershim 层?

如果是后者,我如何让 K8s 直接与 containerd 对话,同时让 docker cli 工具集在主机上仍然可用?

解决方法

这是基于评论中的解决方案的社区 wiki 答案,并发布以提高可见性。随意扩展它。

正如@mmking 已经提到的:如果您不指定运行时,则将选择 Docker。如果您想像 Initializing your control-plane node docs 中所述那样手动更改它,您可以在 --cri-socket 旁边使用 kubeadm init

(可选)从 1.14 版本开始,kubeadm 尝试检测容器 Linux 上的运行时使用众所周知的域套接字路径列表。到 使用不同的容器运行时或者如果有多个 安装在提供的节点上,指定 --cri-socket 参数 到 kubeadm init。