为何containerd集群crictl ps无kubelet容器?与docker ps差异及解决方法
docker ps 与 crictl ps 的核心差异
- 管理对象范围不同:
docker ps是Docker引擎(dockerd)的专属客户端命令,仅能查看由dockerd直接创建和管理的所有容器,包括节点上非Kubernetes调度的Docker容器、以及用Docker部署的系统组件容器(比如你的Docker集群中以容器方式运行的kubelet)。crictl ps是CRI(容器运行时接口)的通用客户端工具,仅对接集群配置的CRI运行时(比如你的containerd集群),只能查看Kubernetes调度创建的Pod对应的容器——也就是属于Kubernetes Pod资源的容器,节点上由systemd等系统服务直接启动的进程(非CRI创建的容器)不在它的管理范围内。
- 依赖的运行时不同:
docker ps完全依赖Docker守护进程,脱离dockerd无法使用。crictl是标准化工具,只要集群配置了符合CRI规范的运行时(containerd、cri-o等),就能对接使用,不绑定特定容器引擎。
能否通过 crictl ps 查看 kubelet 容器?
默认情况下不行,因为kubelet作为Kubernetes节点的核心代理组件,通常是以systemd系统服务的方式直接运行在节点主机上,并非通过containerd(CRI运行时)创建的容器,所以不在crictl的管理视野内。
如果一定要让crictl ps能查到kubelet,需要将kubelet改为通过containerd以容器方式启动,但这种做法会大幅增加部署复杂度:kubelet本身需要管理containerd、访问节点的网络/存储/设备资源,容器化运行会带来权限、依赖循环等问题,生产环境中不推荐这种操作。
内容的提问来源于stack exchange,提问作者cook
相关产品推荐
相关产品推荐

