<img src="https://habrastorage.org/getpro/habr/upload_files/24f/bbf/7b5/24fbbf7b5ca2e226d5126b0cbc57264a.png" /><p>Kubernetes давно стал повсеместной платформой, а написать к нему собственный оператор сегодня — задача нескольких часов. Стандартный путь — <code>kubebuilder</code> на основе <code>controller-runtime</code>: scaffold проекта, типы, реконсайлер. В типовых сценариях этого вполне достаточно. Но как только нагрузка растёт или поведение оператора начинает расходиться с ожиданиями, всплывает целый класс edge-кейсов, причина которых — непонимание того, как <code>controller-runtime</code> устроен внутри. Если вы пишете контроллеры для Kubernetes, этот материал поможет собрать целостную mental model и заранее избежать дорогих сюрпризов в проде.</p><p>В этой статье разберём внутреннее устройство <code>controller-runtime</code> и на его примере увидим, какие архитектурные решения лежат в основе самого Kubernetes. Начнём с того, как контроллеры читают объекты из Kubernetes API.</p><p>Есть распространённое заблуждение, что <code>r.Get()</code> в <code>Reconcile</code> ходит прямо в <code>kube-apiserver</code>, <code>List()</code> каждый раз смотрит «живую» картину мира, а после <code>Update()</code> можно сразу перечитать объект и увидеть свежее состояние. На практике всё наоборот: <code>controller-runtime</code> живёт на локальной копии данных через <code>LIST+WATCH</code>. Благодаря этому чтение в реконсайле обходится почти бесплатно и не нагружает control plane даже при сотнях вызовов в секунду — но ценой этой модели становится то, что оператор может внезапно съедать гигабайты памяти, делать скрытые <code>O(n)</code>-сканы и регулярно упираться в stale reads.</p><p>Статья рассчитана на тех, кто уже писал операторы на Go с использованием <code>controller-runtime</code>, но хочет собрать целостную mental model, а не жить с набором частных наблюдений. Фокус будет на практических последствиях для production-кластеров: память, трафик, консистентность чтения и поведение реконсайла.</p> <a href="https://habr.com/ru/articles/1031818/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1031818#habracut">Читать далее</a>