【问题标题】:Getting Pod and Node's events millisecond level precision in a kubernetes cluster在 kubernetes 集群中获取 Pod 和 Node 的事件毫秒级精度
【发布时间】:2021-08-03 23:04:46
【问题描述】:

我有一个 Kubernetes 集群,我需要收集各种 pod 和节点事件时间戳。

我通过构建一个 go 服务来做到这一点,该服务通过 client-go 库与我的 Kubernetes 集群进行通信。我为订阅的 pod 和节点对象获取的时间戳仅显示时间,精度为秒。

有没有一种方法可以获得毫秒精度级别的时间?我找到了similar issue raised,但没有解决方法。

有人可以帮我吗?

【问题讨论】:

  • 您是否已经尝试过 Watch api,AIUI 会在它们发生时触发(而不是轮询方法,然后咨询事件的时间戳)?我想剩下的问题是通过知道 Pod 被安排在 1620936556001 而不是 1620936556002,您的系统会做什么?您是否正在尝试构建 lambda 计费替代品?
  • @mdaniel 感谢您的回复。我已经编写了一个客户控制器,它使用通知者来获取我订阅的资源对象的事件(我没有使用 watch api),因为它们发生(它使用 Kubernetes 中当前存在的相同概念,用于监视资源的现有控制器添加/删除或更新的对象)。我得到的时间戳是第二个精度级别。
  • @mdaniel 另外,我正在尝试在毫秒级别测量开销,因此需要这样的时间戳。存储在 etcd 数据存储中的时间戳是秒级精度还是知道它在哪里被截断?

标签: go kubernetes events client-go


【解决方案1】:

欢迎来到社区@shresthi-garg

首先,正如您正确发现的那样,不可能以毫秒精度从 kubernetes 组件本身获取精确的时间戳。 this github issue 暂时关闭。

但是,仍然可以找到有关容器和其他事件的一些确切时间。下面是一个与容器相关的示例。

选项 1 - kubelet 默认将大量日志写入 syslog。可以使用journalctl 查看它们(注意!此方法适用于systemd 系统。对于其他系统,请参阅official kubenetes documentation)。命令示例:

journalctl -u kubelet -o short-precise

-u - 按单位过滤

-o - 输出选项

我们正在寻找的输出行将是:

May 18 21:00:30.221950 control-plane kubelet[8576]: I0518 21:00:30.221566    8576 scope.go:111] "RemoveContainer" containerID="d7d0403807684ddd4d2597d32b90b1e27d31f082d22cededde26f6da8281cd92"

选项 2 - 从容器化引擎获取此信息。在下面的示例中,我为此使用了 Docker。 我运行这个命令:

docker inspect container_id/container_name

输出如下:

{
        "Id": "d7d0403807684ddd4d2597d32b90b1e27d31f082d22cededde26f6da8281cd92",
        "Created": "2021-05-18T21:00:07.388569335Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 8478,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-05-18T21:00:07.593216613Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        }

【讨论】:

  • 是的,它确实澄清了我的疑问。 @WytrzymałyWiktor
猜你喜欢
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2016-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 2019-03-27
相关资源
最近更新 更多