【云原生技术】Pod 列表新增时间字段:取值口径与获取方式

Pod 列表新增时间字段:取值口径与获取方式

下面给出 3 个时间字段的定义、取值规则、数据来源(K8s API)、边界情况。建议你在文档里把它们称为"创建时间 / 运行时间 / 就绪时间",避免一个"启动时间"引发歧义。


1) 创建时间(CreatedAt)

定义

Pod 对象在 K8s 中被创建并持久化的时间。

取值

  • CreatedAt = pod.metadata.creationTimestamp

数据来源

  • K8s API:GET /api/v1/namespaces/{ns}/pods(List Pod)或 GET pod

展示/说明

  • 一定有值(除非数据异常)
  • 不代表容器启动、也不代表可接入流量

2) 运行时间(RunningAt,建议叫"容器开始运行时间/首次运行时间/最近运行时间"要先定口径)

K8s 没有 Pod 级别统一 startedAt 字段,通常从容器状态推导。你需要在文档里明确口径,否则实现会不一致。

推荐口径(用于 Pod 列表最直观)

RunningAt = 业务容器中"最后一个进入 Running"的时间

即:在选定的业务容器集合中取最大值。

取值规则
  1. pod.status.containerStatuses[] 取每个容器的:
    • state.running.startedAt(容器处于 Running 时才有)
  2. 过滤规则(可选但强烈建议写清):
    • 默认只统计业务容器 ,不统计明显的基础设施 sidecar
      • 例如:istio-proxylinkerd-proxyvault-agent 等(你们平台若有固定名单,可配置化)
    • 如果无法区分业务/sidecar:则统计全部容器(简单但会导致"RunningAt 被 sidecar 影响")
  3. 聚合:
    • RunningAt = max(startedAt 列表)
  4. 若列表为空(如 Pending、ImagePullBackOff、CrashLoopBackOff 且未进入 Running):
    • RunningAt = null
数据来源
  • K8s API:Pod List/Get 返回的 status.containerStatuses
边界情况说明(文档要写)
  • 容器重启state.running.startedAt 会更新为"最近一次启动时间"。
    • 如果你们更想要"首次启动时间",K8s 原生字段不保证保留,需要平台侧记录(见下扩展)。
  • 多容器 Pod:按上述聚合规则取值。
  • 还没 Running:为空,前端可显示 "---/未运行"。

可选增强(如果你们需要"首次运行时间 FirstRunningAt"):平台做 watch 记录"第一次观察到任一业务容器进入 Running 的时间",写库或 annotation。


3) 就绪时间(ReadyAt,可服务时间,最接近"真的启动完成能接流量")

推荐口径

ReadyAt = Pod Ready 条件首次变为 True 的时间(首次可服务时间)

取值优先级(建议写成两级方案,便于落地)

方案 A(优先,若字段可用):直接取 condition 的时间

pod.status.conditions[] 找到:

  • type == "Ready"status == "True"
  • 取该条 condition 的时间字段(不同版本字段表现略有差异,文档里可以这么写):
    • 优先取 lastTransitionTime(Ready 从 False→True 的时间)
    • 若无/不可靠,可退化使用 lastProbeTime(但很多环境为空,不建议依赖)

若找不到 Ready=True:

  • ReadyAt = null

数据来源:Pod status.conditions(Pod List/Get)

方案 B(最稳,跨版本一致):平台侧记录 readyAt

如果你们发现 lastTransitionTime 不满足(缺失/不准确/不想受版本影响),就采用平台侧记录法:

  • 平台组件 watch Pod(informer)
  • 当检测到 Ready 条件首次 为 True 时:
    • 写入平台数据库 readyAt
    • 或写入 Pod annotation:platform.xxx/readyAt=RFC3339时间
  • Pod 列表展示优先使用平台记录值

边界情况说明

  • Ready=True 后又变 False(抖动)
    • "首次 ReadyAt"通常不变(表达首次可服务时刻)
    • 你们也可以另加"最近就绪时间 LastReadyAt"(需求没要求可不做)
  • 没有 readinessProbe:某些场景 Ready 可能很快 True(只代表 K8s 认为可用,不代表业务完全健康),需在文档里提示"Ready 取决于探针定义"。

建议在需求里明确的字段与返回结构(示例)

  • createdAt:string(datetime, RFC3339)
  • runningAt:string(datetime, RFC3339) | null
  • readyAt:string(datetime, RFC3339) | null
  • phase:Pending/Running/Succeeded/Failed/Unknown(辅助理解)

实现备注(你可放到"取数逻辑/伪代码")

  • createdAt:直接读
  • runningAt:
    • containerStatusesstate.running.startedAt
    • 过滤 sidecar(可配置)
    • 取 max
  • readyAt:
    • conditions 找 Ready=True 的 lastTransitionTime
    • 若缺失则为空(或采用平台记录)

相关推荐
m_136874 分钟前
OpenClaw v2026.3.12 离线源码构建与 Docker 部署完整教程
运维·docker·容器·openclaw
赴前尘31 分钟前
docker buildx进行多架构镜像仓库迁移
docker·容器·架构
江畔何人初37 分钟前
Gateway API 的核心组件与作用
运维·网络·云原生·kubernetes·gateway
劲墨难解苍生苦1 小时前
docker 和k8s 环境下达梦数据库开启ssl连接配置流程
数据库·docker·kubernetes
Andy Dennis1 小时前
1panel阿里云部署
阿里云·docker·云计算·1panel
无级程序员1 小时前
k8s部署nacos 3.1.1服务,java.net.UnknownHostException问题终极解决方案
java·nacos·kubernetes
从入门到放弃-咖啡豆1 小时前
服务器部署docker 运行.NET 8 项目
服务器·docker·容器
SMF19191 小时前
【Docker】Linux系统上卸载旧Docker、卸载Podman并重新安装Docker及配置国内镜像源
linux·docker·podman
qq_297574671 小时前
K8s系列第二篇:CentOS7/Ubuntu 一键搭建 K8s 集群(kubeadm 完整版)
ubuntu·容器·kubernetes
贮藏的仓鼠1 小时前
【k8s】nacos2.5.1容器化单节点部署
云原生·容器·kubernetes