背景
客户 Pod 调度虚拟节点的时候禁止 core 文件生成,需要执行ulimit -c 0
这个命令。
进入容器 shell 环境测试配置是没有问题的, 看起来可以正常设置:
实际客户需求是可以启动自动执行修改:
由于 ulimit 参数比较特殊, 在 docker 运行时环境中可以通过 dockerd 的启动参数自定义设置,但是在 containerd(EKS 运行时)运行时中是没有办法配置的(默认不支持启动参数配置),尝试在容器启动时(command配置)后发现业务环境获取到的还是没有修改的默认值,如下图所示:
进入容器shell查看配置:
如何解决?
关键探索过程:
测试打印在修改ulimit 参数前后的真实参数值,验证修改是否真正生效:
查看容器执行命令输出的日志:
从日志可以看出来在 command
执行环境下参数是修改成功的,但是再进入shell 查看还是默认值,如下图:
解决办法
既然在 command 执行环境中 ulimit 设置参数是生效的, 若将应用的启动命令放在和设置参数同一个执行环境时,业务感知到的不就是修改的后的参数值了嘛,启动命令格式为ulimit -c xx && 应用启动命令
,如下所示:
如此配置可完美解决 ulimit 参数配置问题, 同样的,如有其他 ulimit 参数需要自定义也是可以的。