k8s 对容器的日志有什么特殊的处理么?dashboad 日志输出和本地 docker 运行 表现不一致

205 天前
 Aruforce

当我登入容器 向追踪的文件

echo "123123213" >> /var/log/tac_plus/access/access.log

k8s dashboard 日志并没有输出 但是本地是可以的 如下是我的脚本,是我写错了 还是 k8s 对容器的日志有特别的处理?

Dokerfile

FROM ubuntu:20.04
RUN mkdir -p /var/log/tac_plus/access/
RUN mkdir -p /var/log/tac_plus/accounting/
RUN mkdir -p /var/log/tac_plus/authentication/
RUN mkdir -p /var/log/tac_plus/authorization/
ADD ./access.log /var/log/tac_plus/access/access.log
ADD ./accounting.log /var/log/tac_plus/accounting/accounting.log
ADD ./authentication.log /var/log/tac_plus/authentication/authentication.log
ADD ./authorization.log /var/log/tac_plus/authorization/authorization.log
ADD ./docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
CMD ["bash","-c","/docker-entrypoint.sh"]

docker-entrypoint

#!/bin/sh
echo "Starting server..."
{
        tail -f /var/log/tac_plus/access/access.log
}&

{
        tail -f /var/log/tac_plus/accounting/accounting.log
}&

{
        tail -f /var/log/tac_plus/authentication/authentication.log
}
1957 次点击
所在节点    Kubernetes
49 条回复
Aruforce
205 天前
@julyclyde dmesg 里没什么注意的 地方都是这访问其他 ip 不可达的 错误信息…… 打算试试本地 3.10 的 docker 能不能跑……
julyclyde
205 天前
@Aruforce 能否核实一下,你的 k8s 真的是和 docker 一起工作的吗?
我记得好几年前就已经去掉了 docker 的支持了,你用的是那之前的版本?
Aruforce
205 天前
@julyclyde 应该是 containerd 上不了物理机 看不到
Aruforce
205 天前
@julyclyde echo 那段的输出 在
dashboard 日志里是可以看到的 所以我觉的应该不是运行时这些的问题……
julyclyde
205 天前
@Aruforce 你刚开始提问的时候不是说 echo 那段在 dashboard 里看不到么?
你要是没权限就算了,这不是你能干的事
SingeeKing
205 天前
k8s 权限限制比 docker 严格,打下 $SHELL whoami 看下环境,再 ls 看下你那个 log 文件的所有者和权限,可能是没权限
julyclyde
205 天前
@SingeeKing 你这个说法是哪儿来的啊
billccn
204 天前
ADD ./access.log /var/log/tac_plus/access/access.log

你这些日志文件是写进 docker 镜像里面去了,加上 strace 显示 `fstat(3, 0x7fff7454e7e0) = -1 ENOSYS`,我怀疑是不是内核版本太旧,不支持在 overlayfs 上面运行 stat 。

你其实可以不必预先生成这些文件,用`tail -F`等待文件创建就可以了。
Aruforce
204 天前
@julyclyde entrypoint 这个脚本里的 echo 可以 文件追加的那个不行
Aruforce
204 天前
@SingeeKing 都是 root 用户
julyclyde
204 天前
@Aruforce 你说的“可以”是指 echo "Starting server..."这句可以吗?
那不是废话么……
这都不涉及到日志文件的问题
julyclyde
204 天前
@billccn 我也觉得是 overlayfs 或者内核版本太低的问题。不过既然他没有 node 的 root 权限那就啥都别说了
Aruforce
204 天前
@julyclyde 这也是写到 stdout 的啊
julyclyde
204 天前
@Aruforce echo "Starting server..."这句去 stdout ,k8s 能正常收集,这个我已经知道了
你现在问的问题不是 tail 出故障么?前面谈了那么多不都是检查 tail 的问题么?
Aruforce
204 天前
@julyclyde 我把镜像降到 centos7 和主机保持一致 系统调用没啥问题了但是读不到文件的更新 应该和权限也没啥关系……
julyclyde
204 天前
@Aruforce 我觉得你最好整理一下思路吧
你现在的环境之间的差异过大了,变量至少有两个:
k8s containerd 对比 docker
好几种内核版本

两个变量会有很多组合吧
你至少得把这很多组合都试了,看某个因素和故障现象有没有相关关系

现在是拿个别特例去推理,没什么用吧
Aruforce
204 天前
@julyclyde

这个 是我在追加 字符后 k8s 内的 tail 的 系统调用
```code
nanosleep({tv_sec=1, tv_nsec=0}, NULL) = 0
fstat(3, {st_mode=S_IFREG|0755, st_size=0, ...}) = 0
nanosleep({tv_sec=1, tv_nsec=0}, NULL) = 0
fstat(3, {st_mode=S_IFREG|0755, st_size=0, ...}) = 0
nanosleep({tv_sec=1, tv_nsec=0}, NULL) = 0
fstat(3, {st_mode=S_IFREG|0755, st_size=0, ...}) = 0
nanosleep({tv_sec=1, tv_nsec=0}, NULL) = 0
fstat(3, {st_mode=S_IFREG|0755, st_size=0, ...}) = 0
nanosleep({tv_sec=1, tv_nsec=0}, NULL) = 0
fstat(3, {st_mode=S_IFREG|0755, st_size=7, ...}) = 0
read(3, "", 8192) = 0
nanosleep({tv_sec=1, tv_nsec=0}, NULL) = 0
fstat(3, {st_mode=S_IFREG|0755, st_size=7, ...}) = 0
read(3, "", 8192) = 0
nanosleep({tv_sec=1, tv_nsec=0}, NULL) = 0
fstat(3, {st_mode=S_IFREG|0755, st_size=7, ...}) = 0
read(3, "", 8192) = 0
nanosleep({tv_sec=1, tv_nsec=0}, NULL) = 0
fstat(3, {st_mode=S_IFREG|0755, st_size=7, ...}) = 0
read(3, "", 8192) = 0
nanosleep({tv_sec=1, tv_nsec=0}, NULL) = 0
fstat(3, {st_mode=S_IFREG|0755, st_size=7, ...}) = 0
read(3, "", 8192) = 0
nanosleep({tv_sec=1, tv_nsec=0}, NULL) = 0
```

这个 是我在追加 字符后 本地 docker 的 tail 的 系统调用

```code
fstat(3, {st_mode=S_IFREG|0755, st_size=0, ...}) = 0
nanosleep({tv_sec=1, tv_nsec=0}, NULL) = 0
fstat(3, {st_mode=S_IFREG|0755, st_size=0, ...}) = 0
nanosleep({tv_sec=1, tv_nsec=0}, NULL) = 0
fstat(3, {st_mode=S_IFREG|0755, st_size=7, ...}) = 0
read(3, "123456\n", 8192) = 7
fstat(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3fb0879000
read(3, "", 8192) = 0
fstat(3, {st_mode=S_IFREG|0755, st_size=7, ...}) = 0
write(1, "123456\n", 7) = 7
nanosleep({tv_sec=1, tv_nsec=0}, NULL) = 0
```
st_size 都 0->7 了 但是 本地进行了文件读写 k8s 没有。。。

我觉的基本可以确认是 tail 软件本身的问题了
julyclyde
204 天前
@Aruforce 之前提到的 ENOSYS 好像这次没出现?
也就是出现了第三种情况( fstat 不出 ENOSYS 错误但也不干活)?
Aruforce
204 天前
@julyclyde enosys 可以确定是内核的问题 我把镜像切到 3.10.0 的内核了
julyclyde
204 天前
@Aruforce 什么叫“把镜像”切换到某版本内核了?
容器里没有内核啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/987333

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX