在 Kubernetes 集群中获取 Pod 和 Node 的事件毫秒级精度

问题描述

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

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

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

有人可以帮我吗?

解决方法

欢迎加入社区@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"
        }