用假的秘密值实测环境变量的可见范围:-e 传入的值在 docker inspect、docker exec env、/proc/PID/environ、虚拟机里都能读到(另一个容器和 docker logs 看不到);命令行参数在 docker ps --no-trunc、docker top、docker inspect 里都可见;进程里 pop 掉环境变量抹不掉 /proc/self/environ;改成只读挂载文件后 inspect、env、environ 都看不到秘密值。
在 kind 集群里实测 PVC 扩容的规则:存储类 allowVolumeExpansion 为 false 时改 requests.storage 被 Forbidden,事后改成 true 立刻生效;受理后 spec 变大但 status.capacity、PV 和 Pod 里的文件系统都不变,PVC 上出现 ExternalExpanding 事件,在等外部控制器;缩小不能低于 status.capacity;没绑定的 PVC spec 整个不可变,绑定后只有 requests 能改。
在 Docker Engine 29.8.2 里对比 Docker-in-Docker 和挂载 docker.sock:DinD(--privileged 的 docker:dind)里的嵌套 dockerd 0.3 秒就绪、镜像库是空的、看不到外层容器;挂载 socket(不需要 --privileged)则共用外层 dockerd,docker ps 看到全部 9 个容器,创建出来的是外层的兄弟容器;DinD 不加 --privileged 时 dockerd 因 iptables 权限起不来。
在 kind 集群里装 metrics-server 实测 HPA 的算法:CPU 利用率 200% 对目标 50% 时副本数按 ceil(当前副本×当前值÷目标值) 从 1 一步到 4、再到 maxReplicas=6;负载消失后缩容要等稳定窗口,6→2→1 约 89 秒;利用率比目标高 4% 落在默认 ±10% 容忍区内不扩容,高 40% 则 2→3→5;没写 requests.cpu 时 HPA 报 missing request,TARGETS 显示 <unknown>。
在 kind 集群里实测 emptyDir:容器重启后文件还在、删除 Pod 后节点上的目录 2.3 秒内消失;medium: Memory 是 tmpfs,默认大小等于节点内存,写 50 MiB 在 memory.stat 里变成 shmem;tmpfs 的页算在容器内存里,limit 64Mi 写 100 MiB 会 OOMKilled 并陷入 CrashLoopBackOff;sizeLimit 对 Memory 卷是立刻 ENOSPC,对磁盘卷则是 kubelet 周期检查后的驱逐。
在 Docker Engine 29.8.2(cgroup v2)里实测让 systemd 当 PID 1:什么都不加、只加 tmpfs、加 --cap-add SYS_ADMIN 与 seccomp=unconfined 都以 255 退出,只有 --privileged 能启动(0.5 秒到 running,空闲 15.25MiB、9 个进程);STOPSIGNAL SIGRTMIN+3 下 docker stop 0.2 秒,SIGTERM 下等满 10.2 秒后 137。
在 kind 集群里实测 projected 卷:Secret、ConfigMap、Downward API 和 ServiceAccountToken 四种来源合并成同一个目录,items 控制路径与权限;items 写到同一路径会被拒绝,整体挂载的同名键则静默由后面的来源覆盖;来源缺失时 Pod 卡在 ContainerCreating,optional 让它先启动;serviceAccountToken 的 expirationSeconds 不能小于 10 分钟。
在 Docker Engine 29.8.2 里实测 DNS 轮询:三个容器共用别名 svc,getaddrinfo 返回全部三个地址,顺序每次随机打乱;每次重新解析的 300 个请求分成 103 / 99 / 98;只解析一次的客户端 300 个请求全落在同一个后端;停掉一个后端后 DNS 答案立刻去掉它,但缓存了旧 IP 的客户端全部失败。
在 Docker Engine 29.8.2 里实测容器的时间:容器用虚拟机内核的时钟(与 Mac 差约 20 毫秒的测量误差),有独立的时间命名空间但偏移为 0,uptime 是虚拟机的;alpine 里 TZ=Asia/Shanghai 无效(没有 zoneinfo),TZ=CST-8 或自带 zoneinfo 的镜像有效,挂 /etc/localtime 也行;date -s 被拒绝;docker logs -t 与 StartedAt 永远是 UTC。
在 Docker Engine 29.8.2 里实测 --sysctl:net.core.somaxconn、net.ipv4.ip_local_port_range、kernel.shmmax 等属于命名空间的参数只改容器内的值,虚拟机里的值不变;vm.swappiness、kernel.panic、fs.file-max、kernel.pid_max 被拒绝(125);--network host 或 --ipc host 时对应的参数也被拒绝;容器里直接写 /proc/sys 是只读的。
在 Docker Engine 29.8.2 里实测 /dev/shm:默认 64 MiB,--shm-size 可调;dd 写 100 MiB 只能写进 64 MiB;mmap 写 100 MiB 的共享内存在默认下被 SIGBUS 杀死(退出码 135),--shm-size 128m 则正常;/dev/shm 的占用算进容器内存(+80.5 MiB),--memory 更小时先被 OOM;--ipc container: 能共享 /dev/shm。
在 Docker Engine 29.8.2 里复现文件描述符泄漏:nofile=200 时第 198 次 open 报 No file descriptors available,普通写法的程序处理错误时又要 fd 而再次失败(容器退出 1);无上限时每秒泄漏约 94 个且虚拟机全局的 file-nr 同步增长(3858 → 4160);socket 泄漏表现为 60 个 CLOSE_WAIT;用 /proc/PID/fd 的链接目标分组就能定位,不需要 lsof。