Поды Kubernetes выходят из строя сразу

У меня есть очень простое фляжное приложение, работающее на kubernetes (GKE). Модули получают достаточный объем трафика (60 запросов в секунду +-) и работают в группе автоматического масштабирования с минимум 4 активными и 10 макс.

Каждые 4-5 часов начинает глючить liveness probe и все поды перезапускаются. Иногда я обнаруживаю, что мои модули перезагружались 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)

Все модули имеют одинаковое количество перезапусков, поэтому это не проблема загрузки (и у меня также есть автомасштабирование).

Конечная точка _status/healthz/ настолько проста, насколько это возможно:

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

У меня есть еще один маршрут в этом приложении, который подключается к mysql и проверяет некоторые данные. У меня были те же приложения, распределенные по дроплетам digitalocean, которые месяцами работали под гораздо более высокой нагрузкой без проблем.

Кажется, я не могу понять, почему проверки жизнеспособности начинают давать сбой сразу же, и мои модули перезапускаются.

Выделенные ресурсы также приличные и очень близки к тому, что у меня было на дроплетах digitalocean:

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

У меня были одни и те же модули, работающие с 100m для ограничения процессора и с 900m. Тот же результат, каждые несколько часов все модули перезагружаются.

Настройки живости:

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

ОБНОВЛЕНИЕ: добавлен Readiness зонд, увеличен ЦП = те же результаты, 7 перезапусков на каждом из 4 модулей.


person Romeo Mihalcea    schedule 14.02.2017    source источник
comment
Маловероятно, что это проблема сети, так как проверки живучести выполняются локально на узле.   -  person Eric Tune    schedule 16.02.2017
comment
Используете ли вы стандартный образ виртуальной машины или настроили свой образ узла? Есть ли какой-то процесс для каждого узла, который периодически выполняется одновременно на всех узлах, что приводит к тому, что kubelet не может завершить зондирование? Например, задание cron для ротации журналов или что-то в этом роде?   -  person Eric Tune    schedule 16.02.2017
comment
Это может быть связано с stackoverflow.com/questions/42232661/   -  person Eric Tune    schedule 17.02.2017
comment
Я думаю, что это может быть связано с github.com/benoitc/gunicorn/issues/1194. на самом деле. Я обновлю стручки сегодня и дам вам знать.   -  person Romeo Mihalcea    schedule 17.02.2017
comment
Вы пытались увеличить timeoutSeconds для проверки готовности? Должно помочь   -  person Vit    schedule 18.09.2018
comment
@RomeoMihalcea Пожалуйста, обновите, если у вас есть какое-либо решение. Я тоже сталкиваюсь с той же проблемой, что и живучесть не работает для фляжного приложения на производстве GKE, при постановке все работает хорошо.   -  person Harsh Manvar    schedule 01.02.2020
comment
У меня такая же проблема в EKS v1.15.10-eks-bac369   -  person Vitaliy    schedule 03.08.2020