initialDelaySeconds 设置过短。容器启动较慢时,导致容器还没完全启动就开始探测。同时,若 successThreshold 默认值设置为1,则 Pod 健康检查失败一次就会被停止,那么 Pod 将会持续被停止并重启。netstat -tunlp 检查端口监听是否还存在。分析该命令的返回结果可知:当端口监听不存在时,健康检查探测的连接将会被直接 reset 掉。示例如下:20:15:17.890996 IP 172.16.2.1.38074 > 172.16.2.23.8888: Flags [S], seq 96880261, win 14600, options [mss 1424,nop,nop,sackOK,nop,wscale 7], length 020:15:17.891021 IP 172.16.2.23.8888 > 172.16.2.1.38074: Flags [R.], seq 0, ack 96880262, win 0, length 020:15:17.906744 IP 10.0.0.16.54132 > 172.16.2.23.8888: Flags [S], seq 1207014342, win 14600, options [mss 1424,nop,nop,sackOK,nop,wscale 7], length 020:15:17.906766 IP 172.16.2.23.8888 > 10.0.0.16.54132: Flags [R.], seq 0, ack 1207014343, win 0, length 0
hostNetwork 监听相同宿主机端口的 Pod,但只有一个Pod 会监听成功,其余 Pod 监听失败且不会退出,继续进行适配健康检查。从而使得 kubelet 发送健康检查探测报文给 Pod 时,发送给监听失败(即没有监听端口)的 Pod,导致健康检查失败。netstat -s | grep TCPBacklogDrop 可查看由于 backlog 满了导致丢弃的新连接数量。net.ipv4.tcp_max_syn_backlog。文档反馈