目录

dockershim从kubelet移除

什么是dockershim

kubelet调用cri变化

kubelet使用containerd作为cri

kubelet仍然使用docker作为cri


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

见《【K8S 八】使用containerd作为CRI

kubelet仍然使用docker作为cri

见《【K8S 九】使用docker作为CRI

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐