V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Aruforce  ›  全部回复第 2 页 / 共 20 页
回复总数  392
1  2  3  4  5  6  7  8  9  10 ... 20  
@julyclyde 感谢你给的提示 文件系统错误
@julyclyde 我测试一次也不全是按照你写的东西来测试 。。
不过我解决这个问题了。。
根本原因在于 即使是相同的文件名 在 overlay2 这个文件系统里 在底层 inode 的值也是不一样的
内核的 read 在 overlay2 文件系统的实现友有问题。。这个情况下读取的内容还是 Docker 创建时加入的快照的文件内容
返回的值是空的
如果在脚本 docker-entrypoint 里创建 读取的 inode 就是运行时的 inode 了
可以参考 这个 内核的 commit
https://github.com/torvalds/linux/commit/f3fbbb079263bd29ae592478de6808db7e708267
@julyclyde #41 然后 tail 不再出 enosys 的问题了 但是 变成了只读取到了文件变化 不读和输出 了
@julyclyde from 改成 Ubuntu 16.04 了 内核 是 3.10.0 的 。。dockerfile 把所有用的软件 都重新安装了一次。。
@julyclyde enosys 可以确定是内核的问题 我把镜像切到 3.10.0 的内核了
@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 我把镜像降到 centos7 和主机保持一致 系统调用没啥问题了但是读不到文件的更新 应该和权限也没啥关系……
@julyclyde 这也是写到 stdout 的啊
@SingeeKing 都是 root 用户
@julyclyde entrypoint 这个脚本里的 echo 可以 文件追加的那个不行
@julyclyde echo 那段的输出 在
dashboard 日志里是可以看到的 所以我觉的应该不是运行时这些的问题……
@julyclyde 应该是 containerd 上不了物理机 看不到
@julyclyde dmesg 里没什么注意的 地方都是这访问其他 ip 不可达的 错误信息…… 打算试试本地 3.10 的 docker 能不能跑……
@julyclyde docker 版本都是 24.0.5 系统内核吧版本差别比较大…集群里的还是 3.1.0 找了 4.19 和 5.10 系统跑本地都没啥问题
@Aruforce 10
@julyclyde 文件系统
```
root@demo-f996b8cff-g45rr:/# df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
overlay overlay 314418180 75916068 238502112 25% /
tmpfs tmpfs 65536 0 65536 0% /dev
tmpfs tmpfs 8128524 0 8128524 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 17811456 14392760 3418696 81% /etc/hosts
/dev/vdb1 xfs 314418180 75916068 238502112 25% /etc/hostname
shm tmpfs 65536 0 65536 0% /dev/shm
tmpfs tmpfs 15949852 12 15949840 1% /run/secrets/kubernetes.io/serviceaccount
tmpfs tmpfs 8128524 0 8128524 0% /proc/acpi
tmpfs tmpfs 8128524 0 8128524 0% /proc/scsi
tmpfs tmpfs 8128524 0 8128524 0% /sys/firmware
```
@julyclyde 内核版本太低了么?
@julyclyde Linux version 3.10.0-1160.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020
@julyclyde 你好 我追了下 tail 似乎是 对 stat read 两个方法没有实现?
@julyclyde fstat(3, 0x7fff7454e7e0) = -1 ENOSYS (Function not implemented)
1  2  3  4  5  6  7  8  9  10 ... 20  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2708 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 14ms · UTC 12:36 · PVG 20:36 · LAX 04:36 · JFK 07:36
Developed with CodeLauncher
♥ Do have faith in what you're doing.