Kubernetes节点Containerd加载seccomp过滤器报错,咨询调整bpf_jit_limit的影响
问题背景
Ubuntu 节点(内核版本 5.15.0-105-generic)上,启用 Seccomp Profile 的 Bitnami 系列 Pod(Redis、RabbitMQ、MongoDB)出现存活探针失败,报错信息如下:
(combined from similar events): Liveness probe errored: rpc error: code = Unknown desc = failed to exec in container: failed to start exec "5d1b455a1607ba76e2f1776836f3cd8bd094fc9ffe66cbaac3d16d6a921d9489": OCI runtime exec failed: exec failed: unable to start container process: unable to init seccomp: error loading seccomp filter into kernel: error loading seccomp filter: errno 524: unknown
已尝试重启容器、containerd(1.5.7)及 kubelet(Kubernetes 1.27.5),问题未得到解决。
报错根源
errno 524 对应内核扩展的内存不足错误,本质是 BPF JIT 编译器的内存配额耗尽。Seccomp 过滤器依赖 BPF 程序加载到内核执行,当net.core.bpf_jit_limit设置的内存上限无法容纳新的 Seccomp 规则时,就会触发加载失败。
解决方案:增大net.core.bpf_jit_limit参数
临时生效(节点重启后失效)
执行以下命令:
sysctl -w net.core.bpf_jit_limit=1073741824
永久生效(写入系统配置)
- 编辑
/etc/sysctl.d/99-bpf-jit.conf文件,添加配置:
net.core.bpf_jit_limit=1073741824
- 加载配置使其生效:
sysctl --system
参数调整的影响说明
- 内存占用:该参数控制 BPF JIT 编译器可使用的最大内存额度,增大后仅会在需要时为 BPF 程序(包括 Seccomp 过滤器)分配内存,不会主动占用额外闲置内存。
- 性能影响:BPF JIT 编译后的代码执行效率更高,足够的内存配额能避免因加载失败导致的容器异常,不会对系统性能产生负面影响。
- 风险控制:只要不设置超过节点可用内存 10% 的数值,不会引发内存耗尽风险。针对 5.15 内核的多 Seccomp Profile 场景,推荐设置为 1GB(1073741824)或 2GB。
验证方法
调整参数后,重启目标 Pod,检查存活探针状态:
kubectl get pods -n <你的命名空间>
查看 Pod 事件确认无 Seccomp 加载错误:
kubectl describe pod <Pod名称> -n <你的命名空间>
内容的提问来源于stack exchange,提问作者arminbiklari

