kubectl 获取 pod 最后重启时间

pot*_*ato 11 kubernetes kubernetes-helm

作为准备,我会告诉你我所知道的

当我运行时,我将在重新启动之前获取最后 20 行日志以及发生时的时间戳,但我希望在作为附加列kubectl logs --previous <pod_name>运行时显示该时间戳。kubectl get pods

关于如何创建自定义列的 kube 文档表明

kubectl get pods <my_pod_name -o custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion
NAME           RSRC
submit-queue   610995
Run Code Online (Sandbox Code Playgroud)

但我的问题是这个元数据/规范存储在哪里???我在哪里可以列出所有可能的元数据,以便我知道要搜索或写入哪一列,对于规范和任何其他可能的列也是如此

我知道我可以使用 来查看 pod kubectl describe pod <pod>,但是如何将其中的字段转换为这种.metadata.name格式?

我的描述的一部分看起来像这样

MacBook-Pro% kubectl describe pod xxx
Name:         xxx
Namespace:    xx
Priority:     0
Node:         myname/myip
Start Time:   Tue, 23 Feb 2021 11:37:01 +0100
Labels:       app=xx
              app.kubernetes.io/instance=xx
              app.kubernetes.io/managed-by=Helm
              app.kubernetes.io/name=xx
              env=xx
              helm.sh/chart=xx
              pod-template-hash=yy
Annotations:  kubectl.kubernetes.io/restartedAt: 2020-10-23T11:21:09+02:00
Status:       Running
IP:           10.xx
IPs:
  IP:           10.xx
Controlled By:  ReplicaSet/xxx
Containers:
  my_app:
    Container ID:   docker://xxxx
    Image:          gcr.ioxxxx
    Image ID:       docker-pullable://gcrxxx
    Port:           8080/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Fri, 12 Mar 2021 11:34:42 +0100
    Last State:     Terminated
      Reason:       Error
      Exit Code:    143
      Started:      Fri, 05 Mar 2021 12:34:58 +0100
      Finished:     Fri, 12 Mar 2021 11:34:41 +0100
Run Code Online (Sandbox Code Playgroud)

有想过如何去Last State.Finished现场吗?

希望有任何帮助,谢谢。

Edu*_*llo 10

您可以使用kubectl get pod -o yamlYAML 格式(或者-o json如果您愿意)查看 POD 资源。

在这种格式中,您可以看到metadata键和值。例如:

$ kubectl get po -o yaml my-nginx-5b56ccd65f-4vmms | head -n 5
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2021-03-09T15:19:38Z"
  generateName: my-nginx-5b56ccd65f-
Run Code Online (Sandbox Code Playgroud)

您还可以用于kubectl explain pod列出和描述与 pod API 资源关联的所有可能的字段。可以获得资源特定字段的文档(例如,kubectl explain pods.status.containerStatuses)。


要获取该Last State.Finished值,您可以使用:

$ kubectl get pods my-nginx-5b56ccd65f-4vmms -o custom-columns=NAME:.metadata.name,FINISHED:.status.containerStatuses[*].lastState.terminated.finishedAt
NAME                        FINISHED
my-nginx-5b56ccd65f-4vmms   2021-03-09T15:35:45Z
Run Code Online (Sandbox Code Playgroud)

  • 是的,好主意,如果您不使用 bash 而使用 zsh,并且留下 `zsh:未找到匹配项:custom-columns=NAME:.metadata.name,我也会将此注释留给将来与我有类似问题的人,FINISHED:.status.containerStatuses[*].lastState.terminate.finishedAt` 只需将 `custom-columns=` 之后的文本放在引号 "" 中即可工作 (2认同)