7

我有一个在 kubernetes (GKE) 上运行的非常简单的烧瓶应用程序。Pod 获得了相当多的流量(60req/s +-),它们在一个至少有 4 个活动和最多 10 个的自动缩放组下运行。

每 4-5 小时,活性探测开始失败,所有 pod 都会重新启动。我有时会发现我的 pod 在一个晚上重新启动了 11-12 次。当我描述豆荚时,我得到了同样的错误:

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/端点非常简单:

@app.route('/')
@app.route('/_status/healthz/')
def healthz():
    return jsonify({
        "success": True
    })

我在这个应用程序上有另一条路由连接到 mysql 并验证一些数据。我将相同的应用程序分布在 digitalocean 液滴上,在更高的负载下运行了几个月,没有出现任何问题。

我似乎无法找出为什么活动检查开始失败,并且我的 pod 会重新启动。

分配的资源也很不错,并且与我在 digitalocean droplets 上的资源非常接近:

"resources": {
    "requests": {
        "cpu": "500m",
        "memory": "1024Mi"
    },
    "limits": {
        "cpu": "800m",
        "memory": "1024Mi"
    }
}

我有相同的 pod 运行100mCPU 限制和900m. 同样的结果,每隔几个小时,所有 pod 都会重新启动。

活跃度设置:

"livenessProbe": {
    "initialDelaySeconds": 30,
    "httpGet": {
        "path": "/_status/healthz/",
        "port": 5000
    },
    "timeoutSeconds": 5
},

更新:添加了Readiness探针,增加了 CPU = 相同的结果,4 个 pod 中的每一个都重启了 7 次。

4

0 回答 0