「INGRESS-NGINX-CONTROLLER」- 常见问题处理

[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”版本)

很显然我们选择第一个方案,直接将节点迁移到新物理机中;