From 807ac734bff382cc52435c23b47320400aaa567c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Fri, 21 Aug 2026 20:24:28 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=90=D0=99=D0=94=D0=95=D0=9D=D0=9E:=20c?= =?UTF-8?q?lient-body-timeout=2010->60=20+=20replicas=203=20=E2=80=94=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BA=D0=B0=D1=87=D0=BA=D0=B8=20=D0=BF=D0=BE=D1=88?= =?UTF-8?q?=D0=BB=D0=B8.=20=D0=A7=D1=82=D0=BE=20=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=D0=B8=20=D0=BA=D1=83=D0=B1=D0=B5=D1=80=D0=BE=D0=BC?= =?UTF-8?q?=20=D0=B2=D0=BD=D0=B5=20=D0=B0=D0=BD=D0=BD=D0=BE=D1=82=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- History/2026-08-21-root-cause-found.md | 43 ++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 History/2026-08-21-root-cause-found.md diff --git a/History/2026-08-21-root-cause-found.md b/History/2026-08-21-root-cause-found.md new file mode 100644 index 0000000..c980ff4 --- /dev/null +++ b/History/2026-08-21-root-cause-found.md @@ -0,0 +1,43 @@ +# 2026-08-21 — НАЙДЕНО: что править кубером, чтобы закачки шли (вне аннотаций) + +_Дата: 2026-08-21. Кластер: example-timasbxz (свой, kubectl-admin). Инстанс: http-13.containerk8s.dev.nubes.ru._ +_Ответ на вопрос: «что мы вручную кубером меняли на iot-naeel, чего нет в аннотациях, и закачки начинали работать»._ + +## ДВЕ правки, после которых закачки пошли (проверено по одной) + +### 1. ConfigMap ingress: `client-body-timeout: 10 → 60` (ГЛАВНЫЙ виновник обрыва ~10с) +``` +kubectl -n ingress patch cm shturval-ingress-controller-controller \ + --type merge -p '{"data":{"client-body-timeout":"60"}}' +``` +- До: `client-body-timeout: 10` → POST >~64КБ обрывался РОВНО через ~10.2с (HTTP 000, TTFB=0). +- После: обрыв на 10с исчез, тело принимается (соединение держится до таймаута). +- НЕ переопределяется аннотациями ingress-ресурса (аннотации для client-body-timeout НЕТ). +- Совпадает с iot-naeel: там стояло 60 → задержка ~51с (не обрыв); на общих кластерах 10 → обрыв 10с. + +### 2. Ingress replicas: 2 → 3 (по поду на ноду) — убрало дропы при externalTrafficPolicy: Local +``` +kubectl -n ingress scale deploy shturval-ingress-controller-controller --replicas=3 +``` +- Кластер: 3 ноды (control-plane + 2 workers), ingress было 2 пода, `externalTrafficPolicy: Local`. +- При Local трафик на ноду БЕЗ ingress-пода дропается/зависает → нестабильность (часть POST зависала). +- После scale до 3 (под на каждой ноде) — закачки стабильны. + +## Результат (внешний путь, https://IP:443 -k, Host http-13) +| Тест | До правок | После правок | +|---|---|---| +| 100КБ | обрыв ровно 10.2с | 200 (0.06-0.1с) ×3 | +| 1МБ | случайно 200/000 | 200 (0.2-0.4с) | +| 10МБ | обрыв ~10-16с | 200 (1.9-2.1с) ×3 | +| /upload 1МБ | случайно | 200 (0.4с) | + +## Итог (ответ на вопрос) +На iot-naeel «лечили закачки» именно этими правками кубером (вне аннотаций): +1. **client-body-timeout** в глобальном ConfigMap контроллера (60) — лечит обрыв ~10с. +2. **реплики ingress = число нод** (при externalTrafficPolicy: Local) — лечит дропы/зависания. +Дополнительно на iot-naeel: keep-alive 75, proxy-body-size 1024m (ConfigMap), MTU Cilium 1400, MSS clamping. + +## Важно +- Через UI-аннотации эти параметры НЕ задаются (client-body-timeout и реплики — не аннотации). +- На обычном/чужом кластере (без kubectl) их может поменять только платформа. +- Аннотации (proxy-body-size и пр.) на входной обрыв >64КБ не влияли — влиял именно client-body-timeout.