[Sol.] NGINX master process died (-1): signal: illegal instruction (core dumped)
process exit with code 132 #39
0.25.0 crashes at backend reload maybe due to recent OpenResty changes #4311
问题描述
环境概述
- CentOS Linux release 7.4.1708 (Core)
- Kubernetes v1.12.1
- Docker version 18.06.1-ce, build e68fc7a
- Helm v3.0.0-beta.3
在集群中部署 Nginx Ingress Controller 组件,但是在某两个节点(node3、node4)中 nginx-ingress-controller 无法启动。错误信息如下:
NGINX master process died (-1): signal: illegal instruction (core dumped) ------------------------------------------------------------------------------- W1207 07:56:02.153812 8 nginx.go:39] ------------------------------------------------------------------------------- NGINX master process died (-1): signal: illegal instruction (core dumped) ------------------------------------------------------------------------------- W1207 07:56:02.165902 8 nginx.go:39] ------------------------------------------------------------------------------- NGINX master process died (-1): signal: illegal instruction (core dumped) ------------------------------------------------------------------------------- W1207 07:56:02.179189 8 nginx.go:39] ------------------------------------------------------------------------------- NGINX master process died (-1): signal: illegal instruction (core dumped) ------------------------------------------------------------------------------- W1207 07:56:02.190344 8 nginx.go:39] ------------------------------------------------------------------------------- NGINX master process died (-1): signal: illegal instruction (core dumped) ------------------------------------------------------------------------------- W1207 07:56:02.202655 8 nginx.go:39] -------------------------------------------------------------------------------
另外,针对新版 Nginx Ingress Controller 镜像,其使用 Openresty 程序;
原因分析
遇到这种问题肯定去搜索呀。既然有错误日志,而且还是 NGINX 输出的错误日志,这就说明这是壹个可预见的错误;
然后我找到下面两篇讨论:
1)process exit with code 132 #39
2)0.25.0 crashes at backend reload maybe due to recent OpenResty changes #4311
在上述讨论中,问题已经很清楚。作者在程序中使用了新 CPU 指令集(SSE 4.2),作者也不打算支持旧 CPU 型号;
解决方案
目前,我们能够想到的解决办法有两个:
1)将节点迁移到新服务器(那些 CPU 支持 SSE 4.2 指令集的服务器),或者将 Pod 调度到新节点(如果使用 DaemonSet 部署,则仅能迁移虚拟机到新服务器)
2)而实际上,Openresty 程序也有“No SSE 4.2”版本。(但是不知道 Nginx Ingress Controller 镜像有没有“No SSE 4.2”版本)
很显然我们选择第一个方案,直接将节点迁移到新物理机中;