Kubernetes中为Pod配置sysctl内核参数出现SysctlForbidden错误求助
问题根因
- 配置文件存在语法错误:
spec.securityContext下重复定义了两次sysctls字段,会导致配置解析异常。 net.ipv4.tcp_tw_reuse属于Kubernetes定义的非安全sysctl参数,默认情况下kubelet会禁止此类参数在Pod中直接配置,因此触发SysctlForbidden状态。
修复步骤
1. 修正Pod Manifest语法错误
删除重复的sysctls:行,修正后的配置如下:
apiVersion: v1 kind: Pod metadata: labels: run: ppp-mon name: ppp-mon spec: securityContext: sysctls: - name: kernel.shm_rmid_forced value: "0" - name: net.core.somaxconn value: "1024" - name: kernel.msgmax value: "65536" - name: net.ipv4.tcp_tw_reuse value: "1" containers: - image: ppp-mon name: ppp-mon
2. 放行非安全sysctl参数
需要调整集群所有节点的kubelet配置,将net.ipv4.tcp_tw_reuse加入允许的非安全sysctl列表:
- 打开kubelet配置文件,常见路径为
/var/lib/kubelet/config.yaml,添加如下配置:
allowedUnsafeSysctls: - "net.ipv4.tcp_tw_reuse"
如果kubelet是通过启动参数传参,在启动命令中添加--allowed-unsafe-sysctls=net.ipv4.tcp_tw_reuse即可。
- 重启kubelet服务生效:
systemctl restart kubelet
备注:如果使用云厂商托管Kubernetes集群,需要在集群的节点池配置中调整kubelet允许的非安全sysctl参数,无需手动登录节点修改。
3. 重新部署Pod
执行部署命令即可:
kubectl apply -n ppp -f test_sysctl4.yml
生效验证
Pod正常运行后,执行如下命令验证参数是否配置成功:
kubectl exec -n ppp ppp-mon -- sysctl net.ipv4.tcp_tw_reuse
返回结果为net.ipv4.tcp_tw_reuse = 1即为配置生效。
内容的提问来源于stack exchange,提问作者Attapol Roungsook
相关产品推荐
相关产品推荐

