工具定位
crictl 是直连容器运行时的命令行工具,走 CRI 接口与 containerd、CRI-O 通信,不经过 apiserver。适用平台是 Kubernetes 节点(Linux)。它解决的是「kubectl 进不去」的场景:kubelet 异常、Pod 处于异常状态、控制面连不上时,仍然可以在节点上直接查看容器状态、镜像与日志。前提是 crictl 的 runtime endpoint 配置正确。
基本信息
| 适用平台 | Kubernetes 节点,支持 containerd 与 CRI-O |
|---|---|
| 配置位置 | /etc/crictl.yaml,或用 --runtime-endpoint 指定 |
| 常见 endpoint | unix:///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 与版本问题