我们正在运行一个 Google Kubernetes Engine 集群,其中所有节点都标记为“可抢占”。从Google 文档:
可抢占虚拟机是 Compute Engine 虚拟机实例,最长可持续 24 小时,并且不提供可用性保证。
然而,当我查看在其中一个节点上运行的 pod 时,我看到了以下内容:
NAME READY STATUS RESTARTS AGE
mypod-dev-0 3/3 Running 0 20h
mypod-dev-1 3/3 Running 0 26h
请注意,mypod-dev-1 的年龄已超过 24 小时。使用pod describe
mypod-dev-1 时,我看到所有容器都是在今天早上 07:08(大约 3 小时前)启动的。
转到 mypod-dev-1 正在运行的节点,当我查看节点详细信息时,我看到一些非常令人困惑的事情。首先,创建时间是 24 小时前(当前时间 2019 年 12 月 20 日上午 10:00):
CreationTimestamp: Thu, 19 Dec 2019 06:55:26 -0800
接下来,有一堆“条件”消息表明该节点最近被重新创建:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
NetworkUnavailable False Thu, 19 Dec 2019 06:55:26 -0800 Thu, 19 Dec 2019 06:55:26 -0800 RouteCreated NodeController create implicit route
KernelDeadlock False Fri, 20 Dec 2019 10:03:00 -0800 Fri, 20 Dec 2019 07:07:21 -0800 KernelHasNoDeadlock kernel has no deadlock
ReadonlyFilesystem False Fri, 20 Dec 2019 10:03:00 -0800 Fri, 20 Dec 2019 07:07:21 -0800 FilesystemIsNotReadOnly Filesystem is not read-only
...
看起来 mypod-dev-1 的所有容器都在同一时间(上午 7:08)重新启动,节点出现了问题。
如何确定节点的创建时间?
为什么 pod 时间显示的年龄比节点的可抢占特性所允许的时间要长?
是否有一些日志显示 pod 何时从一个节点迁移到另一个节点?
答案1
您说得对,我能够重现此错误。此外,我还在问题跟踪器上发现了一个未解决的问题(https://issuetracker.google.com/146928126) 对此表示怀疑。看来这是 Google 需要解决的问题。