我在kubernetes(GKE)上运行了一个非常简单的烧瓶应用程序 . 这些播放器获得了相当大的流量(60req / s - ),并且它们在自动缩放组下运行,最小值为4,最大值为10 .
每4-5小时,活动探测开始失败,所有pod重新启动 . 我有时会发现我的吊舱在一夜之间重新启动了11-12次 . 当我描述pod时,我得到了同样的错误:
Liveness probe failed: Get http://10.12.5.23:5000/_status/healthz/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
所有pod都具有相同的重启次数,因此它不是加载问题(我也有自动扩展) .
_status/healthz/
endpoints 非常简单:
@app.route('/')
@app.route('/_status/healthz/')
def healthz():
return jsonify({
"success": True
})
我在这个应用程序上有另一个路由连接到mysql并验证一些数据 . 我有相同的应用程序分布在数字海洋液滴上运行数月更高的负载没有问题 .
我似乎无法找出为什么活动检查开始失败一次并且我的pod重新启动 .
分配的资源也很不错,与我在数字海洋水滴上的资源非常接近:
"resources": {
"requests": {
"cpu": "500m",
"memory": "1024Mi"
},
"limits": {
"cpu": "800m",
"memory": "1024Mi"
}
}
我有相同的pod使用 100m
运行cpu限制和 900m
. 同样的结果,每隔几个小时所有pod都重新启动 .
活动设置:
"livenessProbe": {
"initialDelaySeconds": 30,
"httpGet": {
"path": "/_status/healthz/",
"port": 5000
},
"timeoutSeconds": 5
},
UPDATE :添加了 Readiness
探测,增加了CPU =相同的结果,每个4个吊舱重新启动7次 .