Skip to content

Image Pull Stuck

Kube Event Log

Stuck with the following log.

bash
Normal  Pulling  30m  kubelet  Pulling  image "docker-hub.foobar.work/foobar-test/code-go:release-22971"

Get Problem Node

bash
kubectl get po -o wide | grep foo
bash
kubectl get node -o wide

Describe Node Status

Check node events

bash
kubectl describe node bar
bash
Events:
  Type     Reason                 Age                   From     Message
  ----     ------                 ----                  ----     -------
  Warning  EvictionThresholdMet   24m (x13 over 7h10m)  kubelet  Attempting to reclaim ephemeral-storage
  Normal   NodeHasDiskPressure    24m (x6 over 7h10m)   kubelet  Node development-work-04 status is now: NodeHasDiskPressure
  Normal   NodeHasNoDiskPressure  19m (x6 over 7h5m)    kubelet  Node development-work-04 status is now: NodeHasNoDiskPressure
  • 24m (x6 over 7h10m)
    • NodeHasDiskPressure in 24m ago.
      • NodeHasDiskPressure happened 6 times over 7h10m.
  • 19m (x6 over 7h5m)
    • NodeHasNoDiskPressure in 19m ago.
      • NodeHasNoDiskPressure happened 6 times over 7h5m.

事件清理的机制

在 Kubernetes 中,事件(Events) 会持续保留,直到它们被清理或者达到一定的过期时间。即使节点恢复了正常状态,这些事件并不会立即消失,而是会根据 事件的生命周期 以及 Kubernetes 的事件清理机制被自动清除。

  1. 事件的保留时间(TTL)
  • 默认情况下,Kubernetes 中的事件会保留 1小时,超过这个时间后,事件会被清理。
    • 清理事件的过程由 Event Controller 负责,它会定期检查事件的创建时间,并删除超过保留时间的事件。
  1. 事件与节点的状态
  • 即使节点的状态恢复为 正常,事件仍然会存在,直到达到清理条件(默认 TTL 为 1 小时)。
    • 如果节点上没有发生新的事件,Kubernetes 会根据时间戳自动清除这些历史事件。

具体的清理时间

事件的清理并不需要特别的操作,只要达到以下条件之一,事件会被删除:

  • 超过默认保留时间(通常为 1 小时)。
  • 通过管理员手动删除事件(例如使用 kubectl delete events 命令)。
  • 如果集群的事件存储(如 etcd)空间不足,可能会触发清理。