k8s-nginx二進位報Illegal instruction (core dumped)

1.環境

系統:CentOS 7.3

內核:x86

環境:虛擬機

2.問題

收到一個現場問題,k8s環境中nginx的pod都啟動異常。

#kubectl get pod |grep nginx
nginx-7945cf468c-z7z9r            0/1     Running     0          10m17m

 

看pod日誌無任何有效資訊,於是進入nginx的pod,執行nginx二進位,報錯Illegal instruction (core dumped)

 

~# kubectl exec -ti nginx-7945cf468c-z7z9r bash
bash-4.4# /usr/local/openresty/nginx/sbin/nginx -h
Illegal instruction (core dumped)

 3.猜想及答案

針對上述問題於是產生如下猜想:

1.鏡像損壞

2.系統安裝了安全軟體

3.系統做過內核或參數升級

判斷問題1:鏡像損壞,於是找到nginx pod編譯前的nginx base鏡像,直接docker run啟動後執行nginx二進位,問題相同;
判斷問題2:根據一番了解,現場環境之前裝過三合一,和瑞星殺毒,但都已經關閉,沒有相關進程;
判斷問題3:了解到現場環境未做內核升級及修改系統參數。

 在一番思考和查到後得到下面這句話:

 

 於是用如下命令查了一下cpu指令集

#grep -q sse4_2 /proc/cpuinfo && echo 「SSE 4.2 supported」 || echo 「SSE 4.2 not supported」
SSE 4.2 not supportedj

竟然CPU不支援SSE 4.2指令集。查看正常運行的環境是支援的

# grep -q sse4_2 /proc/cpuinfo && echo 「SSE 4.2 supported」 || echo 「SSE 4.2 not supported」
「SSE 4.2 supported」

於是諮詢現場是否遷移過虛擬機,果然遷移過。

於是再找到支援SSE 4.2指令集的物理機進行遷移後,環境恢復,nginx正常啟動,問題得到解決。

 

參考文檔://github.com/openresty/docker-openresty/issues/49