首页/云/Kubernetes 速查/crictl 在节点上排查容器
集群运维与排障54 条

crictl 在节点上排查容器

crictl 直接对接容器运行时(containerd / CRI-O):kubelet 异常、kubectl 进不去容器时,用它查看容器、镜像与运行状态。

Kubernetes 速查云更新于 2026-10-13

工具定位

crictl 是直连容器运行时的命令行工具,走 CRI 接口与 containerd、CRI-O 通信,不经过 apiserver。适用平台是 Kubernetes 节点(Linux)。它解决的是「kubectl 进不去」的场景:kubelet 异常、Pod 处于异常状态、控制面连不上时,仍然可以在节点上直接查看容器状态、镜像与日志。前提是 crictl 的 runtime endpoint 配置正确。

基本信息

适用平台Kubernetes 节点,支持 containerd 与 CRI-O
配置位置/etc/crictl.yaml,或用 --runtime-endpoint 指定
常见 endpointunix:///run/containerd/containerd.sock
使用定位只读排障为主,不作为日常变更手段

典型使用场景

  • kubelet 异常时查看容器:确认容器是否真的在运行、状态如何
  • 日志取不到:kubectl logs 失败时直接从运行时层读日志
  • 镜像清理:节点磁盘吃紧时按需删除无用镜像
  • 核对运行时版本与配置:确认节点上跑的到底是哪个版本
  • 静态 Pod 排查:控制面组件的容器在节点上直接查看

常用命令

常用命令
crictl ps -a | head                 # 全部容器(含已退出)
crictl pods                         # 运行时视角的 Pod(沙箱)列表
crictl inspect <container-id>        # 容器详情
crictl logs <container-id>           # 直接读容器日志
crictl images | grep app             # 本地镜像
crictl rmi <image-id>                # 删除镜像,谨慎使用
crictl info | head -20               # 运行时配置与版本

与 kubectl 的分工

场景用 kubectl用 crictl
控制面可用、Pod 正常首选补充信息
kubelet 异常可能完全失败唯一可用的查看途径
看 Pod 语义状态完整(含条件与事件)只有容器层状态
清理节点磁盘不适用可删镜像与容器
静态 Pod 日志部分可用节点上更直接
需要 /etc/crictl.yaml 或 --runtime-endpoint 指向运行时 socket:containerd 常见为 unix:///run/containerd/containerd.sock,配错时报连接失败。
用 crictl 直接停容器会绕过 kubelet:kubelet 会按期望状态重建或导致状态不一致,日常排障只做只读查看。

节点排障的取数顺序

  • 先看容器层:crictl ps -a 确认目标容器是否存在、是否在重启
  • 再看沙箱层:crictl pods 判断是 Pod 级问题还是单个容器问题
  • 接着取日志:kubectl logs 不可用时用 crictl logs 直接读容器输出
  • 最后核对运行时本身:crictl info 与运行时服务状态,排除 socket 与版本问题

易错点

  • 用 crictl 停容器绕过 kubelet:kubelet 会重建或状态不一致,只做只读查看更安全
  • 把 docker 命令当等价物:多数新集群用 containerd,节点上通常没有 docker CLI,习惯性敲 docker ps 会白费时间
  • runtime endpoint 未配置就断言工具不可用:先看 /etc/crictl.yaml,再用 --runtime-endpoint 显式指定
  • 在节点上随意删除镜像:正在被容器使用的镜像删除失败,且会影响后续调度与拉取,清盘要按需进行

数据来源与参考

  • Kubernetes 官方文档 · 调试节点上的容器运行时
  • crictl 用户手册
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌