LLM написал 100 000 строк, чтобы запустить Kubernetes в браузере — и он вычитал каждую

Почти весь код написал не человек. Обычно это заявка на катастрофу. Оправдание Сэма Роуза: он вычитал каждую строку и написал 2000 тестов, доказывающих, что его браузерный кластер ведёт себя ровно как настоящий.

Вкратце

Developer-educator из ngrok перенёс часть Kubernetes на TypeScript так, что кластер целиком работает в браузере: поды, DNS, деплойменты, сборка мусора — всё на стороне клиента. Почти всё написали LLM: около 100 000 строк в 552 коммитах за два месяца.

Ответ на неизбежное «это же просто мусор?»: вычитал каждую строку плюс 204 интеграционных и 1855 юнит-тестов, сверяющих поведение с настоящим кластером через официальный клиент k8s. SRE в треде заметил: лёгкие 80% сделаны, а вся боль — в ConfigMaps, Secrets и Ingress.

Кластер Kubernetes, который загружается во вкладке браузера

Я перенёс Kubernetes в браузер
Я перенёс Kubernetes в браузер

Сэм Роуз, senior developer educator в ngrok, перенёс в браузер столько Kubernetes, что кластер работает целиком на стороне клиента. Он называет проект webernetes: частичная реализация на TypeScript бинарника kubelet (агента узла, который запускает поды), плюс несколько контроллеров и браузерный container runtime. Он обслуживает жизненный цикл подов, DNS кластера, сеть, сборку мусора у контейнеров, выделение IP и учёт Deployment/ReplicaSet. Цель — не продакшен, а интерактивный учебный материал по Kubernetes, где преподаватель поднимает конкретную нагрузку, чтобы показать одну идею, заново в браузере каждого читателя.

Он сознательно не стал компилировать настоящий Kubernetes в WebAssembly. Один только «hello world» на Go весит около 540 KiB в gzip, уже больше, чем весь webernetes с его ~140 KiB, а Kubernetes опирается на системные API, которых у браузера нет: при первом же обращении к ним всё упадёт.

Честная часть: почти ничего не написано руками

Роуз прямо говорит, что почти весь код выдал LLM: примерно 100 000 строк в 552 коммитах, 629 файлов за два месяца, и одна жестокая неделя работы над Deployment обошлась в $1811,64 токенами. Он заранее предвидел очевидное возражение и ответил на него двумя заявлениями о дисциплине:

«Я сделал две вещи, которые, по-моему, делают проект свободным от мусора: 1. Я вычитал каждую строку кода. 2. Я написал сотни тестов, доказывающих, что webernetes ведёт себя так же, как настоящий кластер.» — Сэм Роуз, цитата из поста через тред

Эти тесты — не для галочки: 204 интеграционных и 1855 юнит-тестов, многие перенесены из самого Kubernetes и проверяются через официальный API kubernetes-client/javascript, чтобы ответы браузерного кластера совпадали с ответами настоящего.

Тред: настоящий продукт здесь — дисциплина ревью

В обсуждении зацепил не браузерный трюк, а рабочий процесс. Повторяющаяся мысль: когда LLM выдаёт шокирующий объём кода, вся ценность смещается в ревью и тесты.

«ИИ может сгенерировать шокирующий объём кода, но настоящая ценность — в дисциплине ревью и тестах вокруг него… проверять поведение против k8s, а не просто верить, что «выглядит правильно».» — инженер, делающий офлайн-приложение для определения растений

Один основатель, переписывающий Postgres на Rust с помощью ИИ, описал тот же урок, превращённый в процесс: audit-скилл берёт небольшой кусок кода, сверяет его с растущим списком известных антипаттернов и блокирует мердж, если проверка не прошла. Эту дисциплину он расширяет, как только всплывают новые паттерны мусора.

Контраргумент: лёгкие 80% сделаны, а боль — всё, что после

Скептики не спорили с мастерством. Они спорили с финишной чертой. SRE ткнул в собственный список Роуза о том, чего не хватает (ConfigMaps, Secrets, ресурсы подов, persistent volumes), и назвал это началом настоящей работы:

«Deployment, Replica Sets и Services — обычно лёгкая часть… это только начало безумия, за которым идёт Ingress Controller и вся мелкая дичь, которую творят разработчики и от которой наша жизнь превращается в кошмар.» — SRE, который держит кластеры для 100+ разработчиков

Более жёсткое возражение поставило под сомнение сам заголовок: подарить себе (или своему LLM) форк исходников Kubernetes, который надо поддерживать вечно, — это обуза, а «перенёс в браузер» приукрашивает реализацию, в которой не крутится ни одного настоящего контейнера. В этом напряжении и есть честная грань всего проекта: как учебный инструмент, ведущий себя как кластер, он по-настоящему остроумен, но каждый новый контроллер — ещё один кусок Kubernetes, который придётся синхронизировать вручную или тем же LLM, что его написал.

Получайте такие разборы каждый день

Главные истории Hacker News — на email, в Telegram или RSS.

Следующая новость · 21 из 26 Читать дальше
🚀Tech

«Parse, don't validate» в языке, который сопротивляется: беда структурной типизации TypeScript

Идея старая и любимая: превратить валидацию в тип, который компилятор запомнит. Загвоздка, доказывает автор блога, в том, что TypeScript считает одинаковые по форме типы тождественными, поэтому Email — это просто string, и гарантия испаряется.

★ 125 · 💬 94 · cekrem.github.io · 4 мин