Dockershim移除后,Kubernetes 1.26(minikube 1.30.1)如何基于Docker 20.10.23运行?
Kubernetes 1.24 移除内置 dockershim 后,不再直接支持 Docker 作为容器运行时——因为 Docker 本身并未实现 Kubernetes 定义的容器运行时接口(CRI)。Minikube 能实现该组合,核心依赖cri-dockerd这个兼容层组件,具体逻辑如下:
cri-dockerd 的核心作用:这是 Docker 官方维护的 CRI 适配器,它将 Kubernetes 组件(如 kubelet)发出的 CRI 请求,转换为 Docker 引擎可识别的 API 调用,完全替代了原 Kubernetes 内置 dockershim 的功能。Minikube 在启动指定 Docker 作为运行时的集群时,会自动部署并配置该组件。
Minikube 的自动化配置流程:当你通过
--driver=kvm2 --container-runtime=docker这类参数启动集群时,Minikube 会在 KVM 虚拟机内部完成一系列标准化配置:- 安装指定版本的 Docker 引擎(此处为 20.10.23)
- 下载并启动 cri-dockerd 服务,让它监听 K8s 节点的 CRI 套接字(默认路径为
/run/cri-dockerd.sock) - 修改 kubelet 的启动参数,指定使用 cri-dockerd 提供的 CRI 端点,而非直接对接 Docker 原生套接字
版本兼容性适配:Minikube 团队会针对不同 Kubernetes 版本(如 1.26)和 Docker 版本做前置兼容性验证,确保 cri-dockerd 的版本能同时适配两者的 API 差异,保证集群启动后,kubelet 能正常与 Docker 引擎交互,完成容器的创建、调度、销毁等全生命周期管理。
KVM 驱动的定位:KVM 仅作为 Minikube 的虚拟机隔离载体,负责创建独立的集群运行环境,Docker、cri-dockerd 及 Kubernetes 核心组件都运行在该虚拟机内部,它不参与 CRI 兼容逻辑的实现。
内容的提问来源于stack exchange,提问作者Alex K

