在Kubernetes的早期版本中,Docker被作为默认容器运行时,Kubernetes的早期版本在kubelet程序中开发了一个名为“Dockershim”的代理程序,负责kubelet与Docker之间的通信,如图2-2所示。
图2-2 Kubernetes 1.24版本之前的工作流程
随着Kubernetes生态系统的发展,涌现出多种容器运行时,如containerd、cri-o、rkt等。为了支持这些容器运行时,Kubernetes引入了CRI标准,该标准允许第三方容器运行时只需与CRI对接即可与Kubernetes进行集成。
后来,在Kubernetes 1.20版本发布时宣布:为了优化核心代码,减少维护负担,将在1.24版本中正式移除“Dockershim”,而当时Docker不支持CRI,这就意味着Kubernetes无法再将Docker作为容器运行时。Docker官方为了解决这个问题,与Mirantis公司合作,开发了一个名为“cri-dockerd”的代理程序,负责kubelet与Docker之间的通信,如图2-3所示。
图2-3 Kubernetes 1.24版本之后的工作流程
因此,从Kubernetes 1.24版本及更高版本开始,使用Docker作为容器运行时,需要安装cri-dockerd。你可以在GitHub Releases页面(https://github.com/Mirantis/cri-dockerd/releases)上找到适用于你系统平台版本的安装包,下载该安装包,然后将其上传到所有节点上并进行安装:
[root@localhost ~]# rpm -ivh cri-dockerd-0.3.2-3.el7.x86_64.rpm
安装完成后,修改Systemd服务文件,将依赖的Pause镜像指定为阿里云镜像地址:
[root@localhost ~]# vi /usr/lib/systemd/system/cri-docker.service … ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod- infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 …
启动并设置开机启动项:
[root@localhost ~]# systemctl start cri-docker [root@localhost ~]# systemctl enable cri-docker