centos 上可用的 kubernetes 容器运行时
containerd(推荐):符合 cri 标准,调用链更短(kubelet → containerd → containerd-shim → runc),资源占用更低、稳定性更好,适合生产环境。自 kubernetes 1.24 起成为主流选择。
cri-o:红帽主导的轻量级 cri 运行时,直接实现 cri 并调用 runc,调用链简洁,常见于 openshift 等场景,适合偏 rhel/centos 生态的团队。
mirantis container runtime(mcr,原 docker enterprise):通过 cri-dockerd 适配,使 kubelet 能与 docker engine 通信。适用于必须使用 docker cli/api、docker compose/swarm、或“docker in docker”等遗留工具链的场景。注意这不是 kubelet 内置的 dockershim。
安全沙箱运行时(如基于 runv 的 kata containers):提供强隔离(vm 级)以运行不可信工作负载,通常与 containerd 配合使用,通过 runtimeclass 调度;但存在如不支持 hostnetwork、对节点资源(如数据盘)要求更高等限制,需结合业务权衡。
版本与兼容性要点
kubernetes 1.24 起移除内置 dockershim,不再直接支持“docker 作为运行时”;若需继续使用 docker,需部署 cri-dockerd 适配层。对于新集群,优先选择 containerd/cri-o。
在 centos 7/8 上,使用 kubeadm 初始化集群时可通过 cri-socket 指定运行时,例如使用 containerd:kubeadm init --cri-socket unix:///run/containerd/containerd.sock。
如何选择
追求稳定性、性能和资源效率:选 containerd(生产推荐)。
需要与 rhel/openshift 生态深度集成或偏好最小化 cri 实现:选 cri-o。
强依赖 docker cli/api、docker compose/swarm 或 din 等:选 mcr + cri-dockerd。
需要更强工作负载隔离(如多租户、不可信代码):引入 kata containers 等安全沙箱运行时,并用 runtimeclass 进行 pod 调度。
常用命令对照与工具