【云原生 三】 kubelet调用CRI的演进过程
Kubernetes 1.24版本正式移除了内置的dockershim组件,该组件原本作为CRI适配层将kubelet的请求转换为Docker API。此前dockershim通过/var/run/dockershim.sock与kubelet通信,再经由docker.sock调用Docker daemon。移除后用户需选择其他CRI实现(如containerd或CRI-O),默认直接通过/run
目录
dockershim从kubelet移除
虽然kubernetes官方在1.20版已经宣布弃用docker支持(其实是对dockershim的支持),但是包括1.20以及此后的版本其实都还可以使用,一直到kubernetes1.24版本。

翻译之后:

什么是dockershim
那么,什么是dockershim呢?dockershim是一个 grpc 服务,监听一个socket供 kubelet 连接,dockershim收到 kubelet 的请求后,将其转化为 REST API 请求,再发送给docker daemon。我们上一张图就清楚了,其实就是硬编码到kubelet的一个模块,其作用就是,充当cri-client同cri服务端通信。因为dockershim硬编码在了kubelet中,只要我们安装了docker,原生就支持,无需多余的配置。如下图kubernetes1.19+docker18.*的典型架构。

kubelet调用cri变化
但是,到了kubernetes1.24版本,dockershim从kubelet中被删除,导致我们不得不去考虑使用哪款cri实现(containerd、cri-o等)。kubelet默认请求的socket监听情况(kubelet --container-runtime-endpoint参数的默认值):
- unix:///var/run/dockershim.sock #1.24本身不再支持
- unix:///run/containerd/containerd.sock#官方默认

/var/run/dockershim.sock文件是kubelet服务启动时创建的,这样很好的说明了带有dockershim的kubelet版本对docker的原生支持。下面我们看一下其冗长的调用关系:
- kubelet通过/var/run/dockershim.sock调用自己的dockershim(cri-client)
- dockershim通过/var/run/docker.sock调用dockerd
- dockerd通过/run/containerd/containerd.sock调用containerd(CRI插件)
而现在呢?
- kubelet通过/var/run/containerd/containerd.sock直接调用containerd(CRI插件)

kubelet使用containerd作为cri
kubelet仍然使用docker作为cri
更多推荐
所有评论(0)