使用 Kubectl API,从 pod 中读取容器启动时间
Using Kubectl API, read container start time from within pod
要知道容器的启动时间,我们一般会这样描述pod:
kubectl describe pod <pod-name>
。我需要通过 kubectl api 以时间戳或任何格式访问容器的开始时间。在 API 中存在吗?
您可以授予 pod API 访问权限,但这会很棘手(没有简单的策略方式说“只能访问它自己”)。有向下 API 音量系统,但我认为它不包括此字段?
实际上,您可以通过状态和状态转换来获取它。使用 kubectl 它看起来像这样:
kubectl get pod $PODNAME -o jsonpath='{.status.conditions[?(@.type=="Ready")].lastTransitionTime}'
现在对我来说会产生 2021-05-25T15:57:03Z
。
我已经写了一个 shell-script
来解决这个问题,它通过 kube API 从 pod 内部跟踪 pods 的信息,并为所需的 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
) 的最后一次重启时间。
要知道容器的启动时间,我们一般会这样描述pod:
kubectl describe pod <pod-name>
。我需要通过 kubectl api 以时间戳或任何格式访问容器的开始时间。在 API 中存在吗?
您可以授予 pod API 访问权限,但这会很棘手(没有简单的策略方式说“只能访问它自己”)。有向下 API 音量系统,但我认为它不包括此字段?
实际上,您可以通过状态和状态转换来获取它。使用 kubectl 它看起来像这样:
kubectl get pod $PODNAME -o jsonpath='{.status.conditions[?(@.type=="Ready")].lastTransitionTime}'
现在对我来说会产生 2021-05-25T15:57:03Z
。
我已经写了一个 shell-script
来解决这个问题,它通过 kube API 从 pod 内部跟踪 pods 的信息,并为所需的 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
) 的最后一次重启时间。