Docker镜像内置kubectl在Kubernetes Pod中执行报错(Exit Code137)求助
解决Kubernetes Pod中kubectl执行报exit code 137的问题
exit code 137通常表示进程被系统发送SIGKILL信号终止,最常见的原因是内存不足(OOMKilled),其次可能是二进制文件与容器系统库不兼容。结合你的场景,按以下步骤排查解决:
1. 检查并调整Pod内存资源配额
Kubernetes默认不给Pod设置内存限制,当kubectl运行时占用的内存超过节点分配给该Pod的额度,就会被系统杀掉。
修改你的Pod/Deployment配置,添加内存请求和限制:
spec: containers: - name: kubectlll-test image: your-image-name resources: requests: memory: "64Mi" cpu: "100m" limits: memory: "128Mi" cpu: "200m"
重新部署后,再次执行kubectl version测试。
2. 替换为兼容Alpine的kubectl二进制
你当前通过curl下载的是AWS EKS提供的针对glibc编译的kubectl,而Alpine使用的是musl libc,可能存在兼容性问题,导致运行时内存异常。
修改Dockerfile中安装kubectl的部分,改用Alpine官方源安装适配版本:
# 删除原来的curl下载kubectl的代码,替换为: RUN apk add --no-cache kubectl=1.27.9-r0
如果不需要指定版本,直接用apk add --no-cache kubectl即可。重新构建镜像并部署Pod测试。
3. 验证Pod事件确认原因
执行以下命令查看Pod的事件日志,确认是否是OOM导致的终止:
kubectl describe pod kubectlll-test
在Events部分如果看到OOMKilled记录,说明内存不足的问题实锤,按步骤1调整资源即可。
内容的提问来源于stack exchange,提问作者Venu Madhav
相关产品推荐
相关产品推荐

