如何 kubectl 获取节点(而不是 pod)的事件?

Đin*_*Huy 6 kubernetes

当描述一个节点时,会出现历史条件。

Conditions:
  Type                 Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----                 ------  -----------------                 ------------------                ------                       -------
  NetworkUnavailable   False   Tue, 10 Aug 2021 10:55:23 +0700   Tue, 10 Aug 2021 10:55:23 +0700   CalicoIsUp                   Calico is running on this node
  MemoryPressure       False   Mon, 16 Aug 2021 12:02:18 +0700   Thu, 12 Aug 2021 14:55:48 +0700   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure         False   Mon, 16 Aug 2021 12:02:18 +0700   Thu, 12 Aug 2021 14:55:48 +0700   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure          False   Mon, 16 Aug 2021 12:02:18 +0700   Thu, 12 Aug 2021 14:55:48 +0700   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready                False   Mon, 16 Aug 2021 12:02:18 +0700   Mon, 16 Aug 2021 11:54:02 +0700   KubeletNotReady              PLEG is not healthy: pleg was last seen active 11m17.462332922s ago; threshold is 3m0s
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 我认为这些条件仅显示最新状态。我怎样才能访问之前病情的完整历史记录?
  2. 建议我使用将节点条件转换为 pod 事件之类的工具来进行日志集中。

mat*_*t_j 8

你是对的,该kubectl describe <NODE_NAME>命令显示当前条件状态 ( False/ True)。

您可以使用以下命令监视节点事件:

# kubectl get events --watch --field-selector involvedObject.kind=Node 
LAST SEEN   TYPE      REASON                 OBJECT         MESSAGE
3m50s       Warning   EvictionThresholdMet   node/kworker   Attempting to reclaim inodes
44m         Normal    NodeHasDiskPressure    node/kworker   Node kworker status is now: NodeHasDiskPressure
Run Code Online (Sandbox Code Playgroud)

要仅查看与状态相关的事件,您可以grep与前面的命令一起使用:

# kubectl get events --watch --field-selector involvedObject.kind=Node | grep "status is now"
44m         Normal    NodeHasDiskPressure    node/kworker   Node kworker status is now: NodeHasDiskPressure
Run Code Online (Sandbox Code Playgroud)

默认情况下,这些事件保留1 小时。但是,您可以从 Pod 内运行该命令,并使用Lokikubectl get events --watch --field-selector involvedObject.kind=Node等日志聚合系统收集该命令的输出。我已在此处详细说明了此方法。