使用 Kubectl API,从 pod 中读取容器启动时间

问题描述

要知道容器启动时间,我们一般使用以下方式描述 pod: kubectl describe pod <pod-name>。我需要通过 kubectl api 以时间戳或任何格式访问容器的开始时间。这在 API 中是否存在?

解决方法

实际上,您可以通过状态和状态转换来获取它。使用 kubectl,它看起来像这样:

kubectl get pod $PODNAME -o jsonpath='{.status.conditions[?(@.type=="Ready")].lastTransitionTime}'

现在会为我产生 2021-05-25T15:57:03Z

,

您可以授予 pod API 访问权限,但这会很棘手(没有简单的策略方法可以说“仅访问自身”)。有 Downward API 卷系统,但我认为它不包括此字段?

,

我已经写了一个 shell-script 来解决这个问题,它通过 kube API 从 pod 内部跟踪 pod 的信息,并解析所需的 lastTransitionTime 参数:

APISERVER=https://kubernetes.default.svc.cluster.local
SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount
NAMESPACE=$(cat ${SERVICEACCOUNT}/namespace)
TOKEN=$(cat ${SERVICEACCOUNT}/token)
curl -ik -H "Authorization: Bearer ${TOKEN}" ${APISERVER}/api/v1/namespaces/${NAMESPACE}/pods | grep "lastTransitionTime\:*[T]*\:*\:*" | tail -1  

此脚本为我输出 pod (tail -1) 的最后一次重启时间。