kubernetes - 自上次重启以来 pod 的年龄始终如此

Chr*_*row 6 kubernetes

我的理解是,AGE使用 时显示的 Podkubectl get pod显示了自上次重新启动以来 Pod 运行的时间。因此,对于下面所示的 pod,我的理解是它最初重新启动了 14 次,但在过去 17 小时内没有重新启动。这是正确的吗?解释这一点的 kubernetes 参考资料在哪里?

在此输入图像描述

Bgu*_*ess 13

希望您享受 Kubernetes 之旅!

\n

事实上,使用 kubectl get pod 时的 AGE 标头会显示pod的创建时间和运行时间。但不要混淆 POD 和容器:

\n

标头“RESTARTS”实际上链接到 pod 清单的参数 > \'.status.containerStatuses[0].restartCount\'。这意味着此标头与重新启动的次数相关联,而不是与 Pod 的重新启动次数相关联,而是与 Pod 内的容器的重新启动次数相关联。

\n

下面是一个示例:\n我刚刚部署了一个新的 pod:

\n
NAME                       READY   STATUS    RESTARTS   AGE\ntest-bg-7d57d546f4-f4cql   2/2     Running   0          9m38s\n
Run Code Online (Sandbox Code Playgroud)\n

如果我检查此 pod 的 yaml 配置,我们可以看到在“status”部分中我们有所说的“restartCount”字段:

\n
\xe2\x9d\xaf k get po test-bg-7d57d546f4-f4cql -o yaml\napiVersion: v1\nkind: Pod\nmetadata:\n...\nspec:\n...\nstatus:\n...\n  containerStatuses:\n  ...\n  - containerID: docker://3f53f140f775416644ea598d554e9b8185e7dd005d6da1940d448b547d912798\n    ...\n    name: test-bg\n    ready: true\n    restartCount: 0\n    ...\n
Run Code Online (Sandbox Code Playgroud)\n

因此,为了演示我所说的内容,我将连接到我的 pod 并终止我的 pod 正在运行的主进程:

\n
\xe2\x9d\xaf k exec -it test-bg-7d57d546f4-f4cql -- bash\nI have no name!@test-bg-7d57d546f4-f4cql:/tmp$ ps aux\nUSER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND\n1000         1  0.0  0.0   5724  3256 ?        Ss   03:20   0:00 bash -c source /tmp/entrypoint.bash\n1000        22  1.5  0.1 2966140 114672 ?      Sl   03:20   0:05 java -jar test-java-bg.jar\n1000        41  3.3  0.0   5988  3592 pts/0    Ss   03:26   0:00 bash\n1000        48  0.0  0.0   8588  3260 pts/0    R+   03:26   0:00 ps aux\nI have no name!@test-bg-7d57d546f4-f4cql:/tmp$ kill 22\nI have no name!@test-bg-7d57d546f4-f4cql:/tmp$ command terminated with exit code 137\n
Run Code Online (Sandbox Code Playgroud)\n

之后,如果我重新执行“kubectl get pod”命令,我会得到以下结果:

\n
NAME                       READY   STATUS    RESTARTS   AGE\ntest-bg-7d57d546f4-f4cql   2/2     Running   1          11m\n
Run Code Online (Sandbox Code Playgroud)\n

然后,如果我返回 yaml 配置,我们可以看到 restartCount 字段实际上链接到我的容器而不是我的 pod。

\n
\xe2\x9d\xaf k get po test-bg-7d57d546f4-f4cql -o yaml\napiVersion: v1\nkind: Pod\nmetadata:\n...\nspec:\n...\nstatus:\n...\n  containerStatuses:\n  ...\n  - containerID: docker://3f53f140f775416644ea598d554e9b8185e7dd005d6da1940d448b547d912798\n    ...\n    name: test-bg\n    ready: true\n    restartCount: 1\n    ...\n
Run Code Online (Sandbox Code Playgroud)\n

因此,总而言之,RESTARTS标头为您提供容器的 restartCount,而不是 pod 的 restartCount,但AGE标头为您提供 pod 的年龄。

\n

这次,如果我删除 pod:

\n
\xe2\x9d\xaf k delete pod test-bg-7d57d546f4-f4cql\npod "test-bg-7d57d546f4-f4cql" deleted\n
Run Code Online (Sandbox Code Playgroud)\n

我们可以看到 restartCount 又回到了 0,因为它是一个全新的 pod,具有全新的年龄:

\n
NAME                       READY   STATUS        RESTARTS   AGE\ntest-bg-7d57d546f4-bnvxx   2/2     Running       0          23s\ntest-bg-7d57d546f4-f4cql   2/2     Terminating   2          25m\n
Run Code Online (Sandbox Code Playgroud)\n

对于您的示例,这意味着容器重新启动了 14 次,但 Pod 是在 17 小时前部署的。

\n

我找不到这方面的确切文档,但是(正如此处所解释的:https: //kubernetes.io/docs/concepts/workloads/_print/#working-with-pods):\n“注意:重新启动Pod 中的容器不应与重新启动 Pod 相混淆。Pod 不是进程,而是运行容器的环境。Pod 会一直存在,直到被删除。”

\n

希望这可以帮助您更好地理解。\n这里有一个来自https://kubernetes.io/docs/reference/kubectl/cheatsheet/的小提示的小提示:\nkubectl get pods --sort-by=\'.status.containerStatuses[0 ].restartCount\'\n(按 pod 的 restartCount 编号对 pod 进行排序 :p)

\n

再见

\n