我正在跟踪A Cloud Guru的一个实验,在那里我必须创建一个Busybox容器写入日志文件,另一个Busybox映像阅读日志文件并将其输出到stdout
。
没有什么太难的,除了kubectl logs -f
总是只返回日志的第一行,然后..没什么
我的Pod定义并没有什么特别的:
kind: Pod
metadata:
name: logging-sidecar
namespace: baz
spec:
containers:
- image: busybox
name: logger
command: ['sh', '-c', 'while true; do date > /output/output.log; sleep 5; done']
volumeMounts:
- name: share-vol
mountPath: '/output'
- image: busybox
name: sidecar
command: ['sh', '-c', 'tail -F /input/output.log']
volumeMounts:
- name: share-vol
mountPath: '/input'
volumes:
- name: share-vol
emptyDir: {}
实际上,创建日志文件的容器运行以下命令:
sh -c 'while true; do date > /output/output.log; sleep 5; done'
然后sidecar运行这个命令:
tail -F /input/output.log
当我将记录器更改为append
(>>
)而不是overwrite
(>
)时,一切都很好,每隔5秒,kubectl logs -f
命令就会显示新的一行。
为什么tail -F
选项在这里不起作用?
在这个特定的busybox
版本(v1.36.1)中,tail
命令是否存在问题?
将sidecar
更改为alpine
图像的操作与上面相同;
然而,将图像更改为debian
似乎可以解决问题,返回输出:
Sat Sep 16 17:38:07 UTC 2023
tail: /input/output.log: file truncated
Sat Sep 16 17:38:12 UTC 2023
tail: /input/output.log: file truncated
Sat Sep 16 17:38:17 UTC 2023
1条答案
按热度按时间sg2wtvxw1#
事实上-从
man busybox
:Busybox的tail没有跟踪截断文件的选项。