1. 介绍
本文将介绍如何在 Kubernetes 中列出最近被删除的 Pod。首先,我们会回顾 Pod 的生命周期机制,然后介绍一些用于查询删除记录的命令,最后通过一个实际操作示例演示如何使用这些命令。
2. Kubernetes Pod 生命周期解析
要理解如何列出被删除的 Pod,首先需要了解 Pod 的生命周期。Pod 是 Kubernetes 中最小的部署单元,代表一个应用的单个实例。 它通常包含一个或多个容器、存储资源、唯一网络 IP 以及容器运行配置。
Pod 会经历多个状态阶段,每个阶段代表其当前运行状态:
阶段 | 描述 |
---|---|
Pending | Pod 刚创建,Kubernetes 正在为其分配节点并拉取镜像 |
Running | Pod 已分配到节点,至少一个容器正在运行 |
Succeeded | 所有容器成功执行完毕,且不会重启 |
Failed | 所有容器终止,至少一个容器异常退出 |
Unknown | 无法获取 Pod 状态,通常是节点通信问题 |
⚠️ 注意:Pod 一旦创建,其配置不可修改。若需更新,控制器会创建新的 Pod 替代旧的。Pod 也不会被迁移,即使在同一节点上重启,其 UID 也会发生变化。
3. 列出最近删除的 Pod
由于 Pod 删除后其对象即被清理,标准命令无法直接查询已删除的 Pod。但我们可以通过 Kubernetes 的事件系统来获取相关信息。
Kubernetes 会在 Pod 生命周期中生成事件记录,包括删除事件。这些事件默认保留 1 小时(TTL),因此只能查到最近 1 小时内的记录。
3.1. 仅列出 Pod 名称
$ kubectl get event -o custom-columns=NAME:.metadata.name | cut -d "." -f1
此命令提取事件中 Pod 的名称字段,并通过 cut
命令去除 .123456
这样的事件 ID 后缀。
3.2. 列出详细删除事件信息
$ kubectl get events --field-selector reason=Killing --sort-by='.metadata.creationTimestamp'
使用 --field-selector reason=Killing
过滤出与 Pod 删除相关的事件,并按时间排序。
⚠️ 限制说明:该方法仅适用于删除时间在 1 小时内的 Pod,超出 TTL 的事件将被自动清理,无法检索。
4. 示例操作
4.1. 创建 Pod
我们先创建一个测试 Pod:
$ kubectl run my-pod --image=nginx
此命令创建名为 my-pod
的 Pod,运行 Nginx 容器。这是命令式创建方式,适合快速测试。
如果需要更复杂的配置,推荐使用 YAML 文件进行声明式创建。
4.2. 查看 Pod 状态
确认 Pod 是否成功创建:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-pod 1/1 Running 0 13s
nginx 1/1 Running 0 10h
4.3. 删除 Pod
执行删除命令:
$ kubectl delete pod my-pod
再次查看 Pod 列表,确认已被删除:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 10h
4.4. 查询删除事件
列出所有被删除的 Pod 名称:
$ kubectl get event -o custom-columns=NAME:.metadata.name | cut -d "." -f1
NAME
my-pod
my-pod
my-pod
my-pod
my-pod
my-pod
可以看到,删除操作产生了多个事件记录。
查看详细事件信息:
$ kubectl get events --field-selector reason=Killing --sort-by='.metadata.creationTimestamp'
LAST SEEN TYPE REASON OBJECT MESSAGE
20m Normal Scheduled pod/my-pod Successfully assigned default/my-pod to kubernetes-n2
20m Normal Pulling pod/my-pod Pulling image "nginx"
19m Normal Pulled pod/my-pod Successfully pulled image "nginx" in 8.108s (8.108s including waiting)
19m Normal Created pod/my-pod Created container my-pod
19m Normal Started pod/my-pod Started container my-pod
17m Normal Killing pod/my-pod Stopping container my-pod
✅ 小结:这个输出展示了 Pod 从调度、拉取镜像、启动到被删除的完整生命周期事件。
5. 总结
在 Kubernetes 中,无法直接列出已删除的 Pod,但可以通过事件系统间接获取其删除记录。我们可以通过过滤 reason=Killing
来定位删除事件,并结合排序查看时间线。
⚠️ 踩坑提醒:事件默认只保留 1 小时,因此超过这个时间的删除记录将无法检索。如需长期保留,建议结合日志系统或事件归档方案。
通过本文介绍的方法,你可以快速定位和分析最近被删除的 Pod,为排查误操作、异常删除等问题提供依据。