44 lines
12 KiB
Markdown
44 lines
12 KiB
Markdown
# P76 · 2024-06 · Управление контейнерной нагрузкой — три самостоятельных прохода ревью
|
||
|
||
## Рамка sidecar-пакета
|
||
|
||
- Archive slugs: <code>editorial-2024-06-practice-container-orchestration</code>, <code>editorial-2024-06-mechanism-container-orchestration</code>, <code>editorial-2024-06-field-container-orchestration</code>.
|
||
- Голос: M7, июнь 2024. Три материала начинают с конкретной ситуации и её цены, затем проходят «симптом → причина → проверка → действие». Каждый текст сопоставляет declaration, профиль управляемой нагрузки и смысл наблюдаемого поведения Pod, а не объявляет один YAML field универсальным ответом.
|
||
- Созданы ровно пять sidecar-файлов: этот review, import-safe script и три локальные SVG. Overlay, README, очередь, <code>articles.json</code>, Git и чужие файлы не менялись; commit и push не выполнялись.
|
||
- Fixture содержит только versioned fixed synthetic JS-объекты в памяти. Она не читает files, manifest, cluster, CI, network, HTTP, trace, telemetry или production и не изменяет их. Поле <code>syntheticObservedPodBehavior</code> явно помечено как <code>embedded-fixed-js-object-not-telemetry</code>; оно не является и не имитирует <code>kubectl</code>, CI output, metrics или production observation.
|
||
|
||
## Проход 1 — источники, техника и модель
|
||
|
||
- Историческая граница проверена 31.07.2026 по первичным Kubernetes материалам, доступным до июня 2024. [Kubernetes v1.30: Uwubernetes, 17.04.2024](https://kubernetes.io/blog/2024/04/17/kubernetes-v1-30-release/) фиксирует публичный выпуск v1.30 до нужного месяца, но не подменяет версию или настройки чужой среды.
|
||
- [Resource Management for Pods and Containers, snapshot 07.03.2024](https://github.com/kubernetes/website/blob/ab0631a407aa6bcf6241818d7dd55aa164dc806f/content/en/docs/concepts/configuration/manage-resources-containers.md) использован узко: scheduler опирается на request при размещении, kubelet и runtime применяют limit, а limit без request может стать request. Статьи не выдают limit за гарантированный throughput или фиксированное capacity number.
|
||
- [Horizontal Pod Autoscaling, snapshot 26.03.2024](https://github.com/kubernetes/website/blob/0568c8af60bf24624f1ac5275969cebf672e874e/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md) подтверждает, что CPU utilization считается относительно request; если relevant request отсутствует, HPA не действует по этой метрике. В P76 это оформлено отдельной отрицательной веткой <code>fixed-warmup-request-missing-v1</code>, а не утверждением о поведении реального controller.
|
||
- [Pod Lifecycle and readiness gates, snapshot 24.05.2024](https://github.com/kubernetes/website/blob/77407a728ac7d93e1601a767f52b3c8a53b0fd79/content/en/docs/concepts/workloads/pods/pod-lifecycle.md) задаёт границу <code>ContainersReady</code>, <code>Ready</code> и custom readiness gate: для Ready нужны ready containers и все declared gates True. P76 не придумывает producer condition, feature gate, owner или recovery path для внешней системы.
|
||
- [Configure Liveness, Readiness and Startup Probes, snapshot 13.04.2024](https://github.com/kubernetes/website/blob/2a6ec81df0a8b7e89dfc8af0e2651d56f4e11b28/content/en/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md) использован для traffic semantics readiness и отделения startup от liveness/readiness. Текст не превращает readiness в root-cause diagnosis, telemetry, latency probe или dependency SLO.
|
||
- Модель имеет один version marker <code>synthetic-container-load-profile-v1</code>, закрытый input contract и ровно три named fixed cases. Каждый case хранит <code>declaredManifest</code>, <code>managedLoad</code> и <code>syntheticObservedPodBehavior</code> как frozen literals. Plan повторно строит canonical report и сравнивает весь object; подмена verdict, observation или добавление внешнего поля отвергаются.
|
||
- Самостоятельный model review проверяет отрицательные ветки для manifest file, cluster, CI, network, HTTP, trace и production fields; их нельзя передать как скрытый input. Rollback принимает только canonical synthetic review draft и возвращает явное отсутствие операций над manifest, cluster, CI, сетью, trace, telemetry и production.
|
||
|
||
## Проход 2 — стиль, объём и голос
|
||
|
||
- Основной текст без раздела источников по <code>audit:draft</code>: practice — **11 931** знак, mechanism — **11 997**, field — **11 608**. Все три значения находятся в целевом коридоре 9–12 тыс. и обязательном диапазоне 5 000–15 000 знаков.
|
||
- Первые два абзаца practice разбирают цену copied request/limit/HPA values; mechanism — цену путаницы HPA signal и traffic eligibility и процент без denominator; field — цену трактовки Unready или CPU как немедленного scale action. Это конкретные учебные ситуации, не истории о реальном кластере.
|
||
- Во всех статьях есть содержательная figure с alt и caption, рабочая table, исполнимый JS example, ordered route, ограничения, rollback и следующий проверяемый шаг. Код не содержит YAML, <code>kubectl</code>, HTTP request, CI command или telemetry fixture: только import-safe functions и fixed in-memory object literals.
|
||
- M7 выдержан: короткие технические утверждения привязаны к request, limit, readiness, gate, metric, owner или evidence boundary. Нет обещаний, что HPA устраняет очередь, что readiness доказывает capacity, что limit даёт throughput, или что fixture подтверждает behaviour реальной среды.
|
||
- После сокращения финальных редакторских проходов capacity curve не используется как прогноз: она прямо подписана fixed synthetic teaching data. Полевой материал называет blocker там, где отсутствует request или смысл readiness, вместо предложения «масштабировать на всякий случай».
|
||
|
||
## Проход 3 — mobile visual, SVG safety и проверки
|
||
|
||
- Три SVG отвечают на разные вопросы: <code>pod-lifecycle</code> отделяет profile, declaration и traffic eligibility; <code>capacity-curve</code> различает request-relative HPA target и CPU limit; <code>readiness-gate</code> отделяет Ready от отдельного CPU metric. Во всех подписях сказано, что это teaching model, а не cluster, CI или telemetry data.
|
||
- <code>xmllint --noout</code> принял все три SVG. Safety scan не нашёл <code>script</code>, <code>foreignObject</code>, <code>href</code>/<code>src</code>, event-handler attributes, external URL, <code>data:</code> или <code>javascript:</code>. Изображения статичны, не принимают input и не загружают external resource.
|
||
- Sharp реально отрендерил SVG на ширине 375 px: pod lifecycle — **375×552**, capacity curve — **375×547**, readiness gate — **375×547**. Все три render просмотрены: заголовки, cards, arrows, labels и footer читаются; в capacity curve длинная mobile callout была разбита на две строки до финальной проверки.
|
||
- Фактические финальные результаты: <code>node --check web/scripts/upgrade-2024-06.mjs</code> — PASS; <code>node web/scripts/upgrade-2024-06.mjs --verify-fixture</code> — <code>PASS fixture: 32/32 assertions</code>; <code>cd web && npm run audit:draft -- scripts/upgrade-2024-06.mjs</code> — PASS для трёх slug и import-safe CLI/export comparison.
|
||
- <code>npm run audit:draft</code> вывела три non-fatal предупреждения существующей user npm config: <code>store-dir</code>, <code>cache-dir</code> и <code>public-hoist-pattern</code>. Команда завершилась с code 0; эти предупреждения не относятся к P76 и не менялись.
|
||
- Sidecar намеренно не интегрирован в overlay или archive: P76 не выполняет deploy, cluster analysis, CI, HTTP, trace collection или production change. Реальная проверка требует отдельного разрешения, изолированной scope, owner-а, evidence source, stop condition и rollback plan.
|
||
|
||
## Выпуск после трёх независимых проходов
|
||
|
||
1. **Факты и техника.** Редактор повторно проверил неизменяемые первичные snapshots через raw GitHub: resource request используется scheduler при выборе Node, limit применяется kubelet/runtime, а limit без request копируется как request; HPA определяет CPU utilization относительно request и не действует по этой метрике без relevant request; readiness/readiness gates и startup probe имеют описанные в статье границы. Публичный релиз Kubernetes v1.30 от 17.04.2024 дополнительно подтвердил историческую границу. Проверены `node --check`, fixture — **PASS 32/32**.
|
||
2. **Редактура и голос.** Повторный проход удалил из публичной прозы служебное имя партии `P76`: теперь читатель видит «учебную модель» и «учебный набор», а не внутреннюю маркировку. Цепочка «симптом → причина → проверка → действие», стоимость ошибки и ограничения сохранены. После правки `audit:draft` подтвердил объёмы: practice — **11 953**, mechanism — **12 023**, field — **11 662** знака.
|
||
3. **Визуал и выпуск.** Все три SVG прошли XML и safety scan, затем были заново отрендерены Sharp на ширине 375 px и просмотрены: подписи, стрелки, таблицы и контраст читаемы. После подключения overlay `audit:articles` подтвердил для каждого slug один figure, одну table и один code example; registry содержит **223** уникальные ревизии. `npm run build` завершился успешно: **374** статические страницы.
|
||
|
||
В выпуск включены только пять файлов июня, обновления registry/production README и редакционный стандарт. Изменения пользователя, черновики других месяцев и исходный `articles.json` в этот пакет не входят.
|