Вам это, скорее всего, неинтересно, но у меня с самого начала была тактика, и я ее придерживаюсь. В общем, очередная пачка апдейтов моих *нетесов, иронично-исследовательских надстроек или форков куба, начиная с Kyvernetria и Tatarnetes и заканчивая Mysoginetes и Kyvernetria. Новые фичи, новые релизы и всё такое.
Kyvernetria v0.2.0 и v0.2.1: X-хромосома выбирается при загрузке, а «мужскому» статусу Ready нет абсолютного доверия
Kyvernetria — сборка Kubernetes, поведение которой опирается на подтверждённые исследованиями средние различия между полами (стереотипы из неё сознательно исключены). Каждое решение в ней ссылается на пункт из файла RESEARCH.md.
Аллели на kuberoot
Центральная идея Kyvernetria — мозаичный control plane. Ткани женского организма — клеточная мозаика: на раннем этапе развития каждая клетка случайно выключает одну из двух X-хромосом, и все её потомки сохраняют этот выбор. Инженерам та же идея известна как N-версионное программирование. Каждая нода control plane несёт два «аллеля» kube-apiserver (аллелями называются различные формы одного и того же гена, расположенные в одинаковых участках хромосом, они определяют направление развития конкретного признака), собранных из соседних минорных версий Kubernetes. В v0.2.0 это Xm на основе v1.37.2 и Xp на основе v1.36.6.
Новое в v0.2.0 то, что Kyvernetria можно собрать как дистрибутив kuberoot, и там аллель выбирает не обёртка внутри статического пода, а сам kinit через альтернативные сборки сервиса из #46. При первой загрузке нода случайно выбирает аллель kube-apiserver и сохраняет выбор, после пяти падений за десять минут переключается на другой, а выбор записывается в метку ноды, откуда его читают kyvctl mosaic и kyvctl support. Сборка на kubeadm осталась прежней.
kyvctl checkup: что прячется за Ready
Новая команда kyvctl checkup основана на пункте о камуфлировании. Аутизм у девочек и женщин диагностируют реже, отчасти потому, что он часто проявляется не так, как медицина привыкла их определять (Hull et al., 2020). та же проблема касается и признаков инсульта и некоторых других заболеваний и связана с тем, что медицинские иследования исторически в основном проводились на мужчинах. Статус Ready у пода похож на такие критерии: проверка видит только то, что умеет видеть. Поэтому checkup смотрит только на поды, которые Ready и которые больше ничего не выделяет, и ищет в них то, что Ready скрывает: перезапуски за последний час, последний выход по OOM и readiness-пробы, которые не видят приложение вовсе. Это может быть отсутствие пробы, проверка одного лишь открытого порта или команда, которая всегда завершается успешно.

Чтобы снять этот пример, я собрал kyvctl из оверлея тега v0.2.1 поверх Kubernetes v1.37.2 и развернул в kind три деплоймента. Под cart один раз упал по OOM и с тех пор отвечает, а его проба выполняет true. Под search дважды упал при старте, а проба проверяет только порт. Под checkout здоров и проверяется настоящим HTTP-запросом, поэтому checkup его не трогает. Команда читает кластер и ничего в нём не меняет.
Иммунитет, который научили узнавать своих
Аутоиммунные заболевания у женщин встречаются примерно вдвое чаще, и admission-плагин Immunity в Kyvernetria тоже строг: он отклоняет поды, которые выглядят чужеродными, например с сетью хоста, портами хоста или привилегиями NET_RAW. На kuberoot это оказалось проблемой, потому что пакеты kubepkg с компонентами уровня ноды, вроде speaker из MetalLB, не могли стартовать. В v0.2.0 Immunity стал терпимо относиться к пространствам имён, которые kubepkg пометил аннотацией kubepkg.dev/pod-security=privileged, а в v0.2.1 исправление проверено на живом кластере. CI собирает образ ноды kind из исходников, поднимает кластер с kube-apiserver каждого из аллелей и проверяет, что под в форме speaker допускается в помеченном пространстве имён и отклоняется в обычном.

Сообщение об отказе заодно подсказывает, как объявить собственную нагрузку «своей»: для этого есть метка kyvernetria.io/self=true. Релизы: v0.2.0 и v0.2.1.
Mansplainetes и Misogynetes переехали на сервер
Kyvernetria опирается на исследования, а эти два проекта — сатира на тех, кто верит в стереотипы. Mansplainetes ведёт себя как человек, который объясняет вам вашу же работу и присваивает себе ваши результаты, а Misogynetes — так, как женщин представляют себе мизогины. В первой версии оба были обёртками над kubectl и действовали только на того, кто сам их установил. В v0.2.0 оба стали серверными admission-вебхуками с Helm-чартом и мультиархитектурными образами, поэтому теперь их слышит любой клиент, будь то kubectl, k9s, Lens или Argo CD. Ответ вебхука приходит как строки Warning: от самого API-сервера.
У обоих одинаковые правила безопасности. Они действуют только в пространствах имён, которые явно включили их меткой. Системные пользователи, kube-system, служебные учётные записи (если их не включили отдельно), аренды и события они не трогают никогда. failurePolicy: Ignore гарантирует, что упавший вебхук не останавливает кластер.
Mansplainetes объясняет каждое изменение
В пространстве имён с меткой mansplainetes.dev/mode=on любое изменение, которое делает человек, возвращается к нему пересказанным, с присвоением заслуги и с детектором PMS («Probably My Setup»), который комментирует то, что действительно видно в объекте: тег latest, отсутствие лимитов, запросов ресурсов и проб. Запрос он при этом всегда пропускает, поведение кластера не меняется. Комментарии ограничены по частоте для каждого человека, так что второй раз подряд одному и тому же он не объясняет.

Кроме вебхука, в v0.2.0 появился дистрибутив для kuberoot с комментатором загрузки. Сервис mansplainetes-boot kinit запускает первым, он читает список сервисов kinit только на чтение и рассказывает о загрузке ноды на её консоли. На установочном носителе он молчит, а MANSPLAIN=off заставляет его замолчать совсем. Патч v0.2.1 исправил поведение при раскатке самого вебхука: после SIGTERM он ещё пять секунд продолжает отвечать, прежде чем остановиться. Раньше запросы, которые API-сервер успевал отправить завершающемуся поду, отклонялись и из-за failurePolicy: Ignore проходили без комментария. Релизы: v0.2.0, v0.2.1.
Misogynetes хочет, чтобы её выслушали
Misogynetes делится обидами, то есть проблемными подами в пространстве имён. В режиме misogynetes.dev/mode=warn она рассказывает о них строками Warning: при любом изменении и ничего не запрещает.

В режиме enforce она отказывает в изменениях, пока её не выслушали. Выслушать — значит поставить на пространство имён аннотацию misogynetes.dev/heard-at с текущим временем. Для аварий есть аннотация misogynetes.dev/break-glass=<причина> на самом объекте: изменение проходит, но с последним словом. Тест в CI показывает тонкость, которую легко упустить. kubectl scale отправляет объект Scale, у которого нет аннотаций, поэтому масштабирование отклоняется даже для деплоймента с break-glass, а правка spec.replicas того же деплоймента проходит.

Патч v0.2.1 закрыл в режиме enforce настоящую дыру. Во время раскатки самого вебхука запросы, попавшие на завершающийся под, проходили без проверки, так что при каждом обновлении Misogynetes изменение могло проскочить мимо отказа. Теперь вебхук дорабатывает после SIGTERM, и тест проверяет, что сразу после пяти раскаток подряд отказ по-прежнему действует. Второе исправление касается подов в цикле перезапусков. Раньше каждый перезапуск делал уже выслушанную проблему снова невыслушанной, и enforce продолжал отклонять исправления от человека, который уже выслушал. Теперь обида начинается в начале цикла, а выслушивание покрывает весь цикл. Новой проблема становится, только если под был здоров не меньше пяти минут.

Релизы: v0.2.0, v0.2.1. Что на самом деле говорят исследования, по-прежнему живёт в Kyvernetria.
Tatarnetes: релиз как одно блюдо
Tatarnetes — проект фонда tatar-ncf. В него входят ayda, национальный kubectl с татарскими командами, TatarOS, дашборд, а теперь ещё и вебхук заморозки изменений. До сих пор каждая часть выходила сама по себе, и понять, какие версии работают вместе, можно было только по датам. В этот раз Tatarnetes впервые вышел одним блюдом.
Куллама: части готовятся отдельно, собираются вместе
Релиз назван в честь кулламы, татарского и башкирского супа. Согласно рецепту, мясо отваривают отдельно, салму варят отдельно в подсоленной воде и заправляют топлёным маслом, лук с морковью тушат в части бульона, а затем мясо, салму, бульон и заправку соединяют в одной посуде и томят под крышкой.
Части Tatarnetes тоже готовятся отдельно, у каждой своя версия. Посуда — это kullama/recipe.yaml, мета-пакет kubepkg, в котором закреплены версии, работающие вместе. Вебхук заморозки, единственная часть внутри кластера, указан как зависимость с точной версией, поэтому kubepkg может установить всё блюдо или заменить один ингредиент. Остальные части (ayda, Tatarnetes UI, TatarOS и коммит kuberoot) закреплены в аннотациях вместе с репозиторием и апстримом, на котором они построены. Релизный workflow отказывается выпускать тег, который не совпадает с рецептом.
Команда ayda куллама показывает для каждого ингредиента версию в посуде, установленную версию, если её видно, и последний релиз на GitHub. Если апстрим ингредиента ушёл вперёд, команда скажет, что ингредиент «переварен», а если установленная часть отличается от рецепта, вернёт код 1, так что её можно поставить в проверку.

Заморозка изменений в праздники
Многие команды не выкатывают изменения в праздники, и Tatarnetes превратил эту договорённость в admission-вебхук. tatarnetes-freeze в пространствах имён с меткой tatar-ncf.github.io/change-freeze=enforce отклоняет изменения в Ураза-байрам, Курбан-байрам и Сабантуй по казанскому времени, а с меткой =warn только выдает предупреждение. Отказ приходит на татарском и английском. Заморожено и масштабирование через kubectl scale. Для аварий есть аннотация tatar-ncf.github.io/break-glass с обязательной причиной, которая попадает в журнал. Контроллеры кластера, служебные учётные записи kube-system, ноды, события и аренды не замораживаются никогда, автоскейлеры вроде HPA и KEDA продолжают работать, а failurePolicy: Ignore не даёт упавшему вебхуку остановить кластер.

Даты праздников проверены по официальным источникам только на 2026 год. Ураза-байрам и Курбан-байрам каждый год сдвигаются, указ Раиса Татарстана о датах на 2027 год ещё не опубликован, а даты 9 марта и 16 мая, которые уже ходят по сети, Минтруд называет предварительными. Поэтому сразу после релиза в main вошло изменение (#16), после которого в году без проверенных дат вебхук пропускает изменения с предупреждением о том, что даты не проверены, а еженедельный workflow открывает issue со списком официальных источников. Без этого с 1 января 2027 года заморозка тихо перестала бы что-либо замораживать.
TatarOS на kuberoot: обновления только во время чая
TatarOS Linux теперь национальный дистрибутив kuberoot, а не обёртка над Talos Linux, отсюда и мажорная версия. tos управляет нодой kuberoot через kubectl, а оверлей дистрибутива собирается на закреплённом коммите kuberoot. Бэкенд Talos остался, но заморожен на наборе команд Talos 1.14.1.
Самое приятное в этом релизе — чаепития. В Tatarnetes с самого начала были ежедневные перерывы на чай, детерминированные для каждого дня. Теперь tos чәй-тәрәзәләре превращает их в spec.maintenanceWindows раскатки fleet kuberoot, и ноды обновляются только во время чая. Чтобы показать, что это работает с настоящим fleet, я запустил kuberoot-fleet из main kuberoot на кластере kind и создал две FleetNode. Настоящих машин там не было, поэтому идентичность нод я записал в их статус вручную, а всё остальное делает центр управления.

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

Tatarnetes UI переезжает в Headlamp
Kubernetes Dashboard, на котором был построен дашборд Tatarnetes, архивирован, и 7.14.0 стал его последним релизом. Поэтому прежняя панель заморожена на этой версии, а татарский интерфейс продолжил жизнь как плагин для Headlamp v0.46.0. Плагин переводит меню на татарский язык, рисует на боковой панели орнамент и показывает в шапке, когда следующий перерыв на чай. В CI плагин загружается в Headlamp на кластере kind и проверяется через Playwright, а снимки ниже сделаны этим тестом.


Меню Headlamp 0.46 было наполовину английским: карта, шлюзы, безопасность, наборы заданий. Проект использует единый глоссарий как источник терминов, поэтому в него добавились 33 новых термина: шлюз, класс хранения, сетевая политика, служебная учётная запись, привязка роли, HPA и VPA, бюджет прерываний, квота ресурсов, аренда, вебхук, устройство, пользовательский ресурс и другие. Были и коллизии. Например, капка в глоссарии уже означает ingress, поэтому для Gateway API взято заимствование шлюз, а төркем уже означает кластер, поэтому PodGroup стал кузак берләшмәсе, объединением подов. Все новые термины помечены как предложения, открытые для правок носителей языка, и ayda аңлат уже умеет их объяснять.
Релизы: Tatarnetes v1.37.2-tatar.1, TatarOS v3.0.0-tatar.0, Tatarnetes UI v7.14.0-tatar.1.
Sheeternetes: четыре релиза на пути в продакшен
Sheeternetes — оркестратор контейнеров, в котором роль etcd играет Google-таблица или Excel, а цикл управления написан на Apps Script. Вкладки таблицы соответствуют деплойментам, подам, нодам, событиям и логам, а агенты на машинах раз в несколько секунд читают таблицу и запускают записанные в ней контейнеры. Главное событие этих двух дней заслуживает отдельной статьи, и она уже есть: у Sheeternetes появилась первая продакшен-нагрузка. Бот KUBER KOMBAT, который проводит викторины в чате Kubernetes-сообщества, переехал из Kubernetes-кластера в под, код которого хранится в ячейках, а исполняет его сама таблица.

Подробно о переезде, об ограничениях Google, которые мы нашли опытным путём, и о хранилище в ячейках написано в статье Sheeternetes in production.
v0.0.0.0.0.3: переезд в гитхаб-организацию SNCF
Первый релиз более организационный, и его название говорит само за себя. Sheeternetes переехал из моего личного гитхаб-аккаунта в гитхаб-организацию фонда, а его репозиторий теперь содержит только продукт: Code.gs, kubelet.sh, skctl, лабораторные манифесты и GitOps. Сайт, реестр сертифицированных инженеров CSFE и сертификация переехали в отдельный реп сайта. Заодно в стек официально вошёл SheetHub, аналог GitLab, у которого слой данных тоже хранится в таблице. Он хранит манифесты, которые разворачивает Sheetlux CD, так что весь стек теперь сам себя хостит на таблицах. Это почти как компилятор языка программирования, написанный и собранный на нем самом! Прорыв!
v0.0.0.0.0.4: таблица как часть реального K8s-кластера
Этот релиз изменил отношения Sheeternetes с настоящим Kubernetes. До него таблица изображала кластер, а теперь она может стать его частью и взаимодейтсвовать с его инструментами.
Начну с планировщика, потому что он стал формулой. В сентябре мы рассказывали, как переписали логику kube-scheduler на формулы Google Sheets, и тогда это был эксперимент. Теперь setup() устанавливает формулу в колонку chosen вкладки подов, и под на ноду назначает сама Google-таблица. Формула умеет осуществлять упаковку по процессору и памяти с выбором самой свободной ноды, прилипание пода к ноде, на которой он уже живёт, cordon, привязку через node_selector, а также taints с эффектом NoSchedule и tolerations. Планировщик на Apps Script остался как опция и запасной вариант на случай, если формула вернёт ошибку. Чтобы два планировщика не расходились, CI сравнивает их на двух тысячах случайных кластеров, а несколько сложных сценариев сверяет со значениями, которые посчитала настоящая Google-таблица.
Вторая новинка — Sheeternetes Virtual Kubelet. Это реализация Virtual Kubelet, с которой таблица становится нодой sheet в любом Kubernetes-кластере, в том числе в тенантных кластерах Cozystack. Под, который выбирает такую ноду, переезжает в таблицу, а исполняют его агенты Sheeternetes. Kubernetes при этом видит у пода статус, IP-адрес и логи. В CI это проверяется буквально: тест поднимает kind, ставит в него виртуальный кубелет, создаёт под и читает его логи обычным kubectl logs. Обратите внимание на колонки OS-IMAGE и KERNEL-VERSION у ноды.

Третья фича работает в обратную сторону: Kubernetes API перед таблицей. Теперь настоящий kubectl может смотреть, описывать, создавать, масштабировать и удалять объекты в таблице, следить за ними через -w и выводить ноды из планирования, а k9s ходит в те же эндпоинты. В CI это проверяется дважды, сначала с поддельным кубелетом, потом с настоящими контейнерами в Docker, и оба раза проходят все 22 проверки.

У таблиц Google есть встроенная история версий, и Sheeternetes научился ею пользоваться для восстановления после аварии. skctl revisions показывает ревизии, а skctl restore --revision <id> или --at <время> возвращает вкладку с желаемым состоянием к нужному моменту. Восстанавливается только то, что задаёт человек: деплойменты откатываются, а наблюдаемое состояние вроде нод остаётся текущим, так что после восстановления цикл сверки просто приводит поды в соответствие со старой спецификацией. Восстановлению можно сначала устроить пробный прогон. Та же история версий даёт фасаду resourceVersion, без которого kubectl get -w не мог бы работать.

Последняя интересная фича релиза — горизонтальное автомасштабирование из формулы и условного форматирования. Агенты записывают в таблицу реальную загрузку контейнеров из docker stats, вкладка Autoscale считает по ней нужное число реплик, а строки, которые упёрлись в максимум, окрашиваются в красный цвет. В тесте контейнер burner загружает процессор на 100% при цели в 50%, и таблица поднимает реплики с одной до трёх, после чего честно сообщает, что дальше расти некуда.

v0.0.0.0.0.5: подам больше не нужны реальные воркеры
До этого релиза под в Sheeternetes всегда был контейнером на чьей-то машине. Теперь деплоймент с runtime: script исполняется внутри проекта Apps Script самой таблицы. При установке проект регистрируется как нода apps-script с меткой и taint runtime=script, поэтому цикл сверки и планировщик размещают такие поды без каких-либо изменений: для них это просто ещё одна нода. Именно это и было интересно проверить. Модель «желаемое состояние, нода, под, цикл сверки» пережила замену контейнера на функцию JavaScript в ячейке.
Чтобы на этом можно было хостить настоящий сервис, понадобилось многое из того, что Kubernetes даёт контейнерам. Слоты расписания срабатывают ровно один раз. Вебхуки приходят по адресу ?pod=<имя>&key=…, а доставки, которые трижды упали, сохраняются в таблицу недоставленных. Каждый вызов пода держит блокировку скрипта и выполняется как транзакция над его состоянием, а упавший вызов увеличивает счётчик перезапусков и откладывает следующую попытку. Sheetstor научился хранить тома прямо в ячейках, в виде кусков base64 с проверкой sha256 и атомарной сменой поколения. Секреты живут в Script Properties и никогда не попадают в ячейки, а в логах, событиях и ответах API маскируются.

v0.0.0.0.0.6: кластер учится ничего не делать и экономить лимиты гугл-таблиц
Последний релиз вырос из первых суток телеграм-бота в продакшене. Google ограничивает суммарное время работы триггеров Apps Script полутора часами в сутки и считает каждое срабатывание вместе с запуском, которого сам скрипт не видит. Статистика выполнений показала, что простаивающий кластер с минутным таймером тратил около 143 секунд в час, то есть почти две трети суточного бюджета, и бот рисковал остаться без времени на работу.
Теперь простаивающий кластер просыпается дважды в час: один проход продлевает аренду ноды и сверяет отпечаток деплойментов, подов и нод с тем, что оставил последний цикл, а второй срабатывает вхолостую. Вместе с запуском это меньше 3% бюджета. Минутный таймер включается, только когда в ближайшие полчаса что-то запланировано, а вызов API, env.sleepUntil или правка таблицы руками будят кластер сразу. Поды скрипта стали тратить меньше времени на чтение каждого события, и ответ бота на команду /score ускорился с 6,1–7,9 до 2,5–4,1 секунды. Расход бюджета теперь виден в skctl get budget.

В этом же релизе цикл сверки научился убирать поды, которые застряли в состоянии Terminating, так и не получив себе ноду. Раньше, если удалить деплоймент, пока его поды ждут ноды, они оставались во вкладке навсегда. Теперь их удаляет цикл сверки и оставляет об этом запись.

По всему Sheet-Native Computing Foundation: CI и статусы проектов
Ещё три проекта SNCF получили релизы. Cloud connectors v0.1.0 — аналог Cluster API: коннектор читает деплойменты из таблицы и приводит к ним локальный Docker или DigitalOcean App Platform, где число реплик становится числом инстансов. Каждый бэкенд — это пара функций, одна читает фактическое состояние, другая применяет план, поэтому новое облако добавляется небольшим изменением. Удалять приложения в облаке коннектор отказывается и только сообщает о них, чтобы случайная правка таблицы не снесла живую инфраструктуру. Sheeternetes PowerShell v0.1.0 даёт оркестрацию в конвейере PowerShell: Get-SheetNode, Get-SheetPod, Set-SheetScale, Invoke-SheetApply и соседние командлеты с таблицей в качестве бэкенда.
Lisp-клиент v0.1.1 хорошо показывает, зачем всем этим проектам понадобился CI. Как только в репозитории появился тест, который запускает клиент против заглушки apiserver, выяснилось, что sbcl --load skctl.lisp -- get pods печатал только строку с подсказкой по использованию, а scale, delete и apply вместо ответа сервера выводили #<HASH-TABLE>. Обе ошибки исправлены, клиент по-прежнему гомоиконичен.
CI появился в двадцати репозиториях фонда, от линтеров и смоук-тестов до сборки skctl-wasm под wasm32 с тестами. Статусы в README дюжины проектов теперь совпадают с тем, что реально выпущено, а семь проектов, которые пока существуют только в виде дизайна (Sheetgres, SheetMongo, Sheedis, Sheetka, SheetHouse, MySheet и Sheetwire), помечены как design-only. Уровни проектов на сайте фонда синхронизированы с репозиториями. Фонд, который громче всех говорит о нейтральности, должен быть честен и в том, что он на самом деле построил.
Gachinetes v0.1.0 и v0.2.0: лента переживает потерю кластера
Gachinetes — новый исследовательский (а вы что думали?) дистрибутив на kuberoot, и v0.1.0 стал его первым релизом.
Сердце Gachinetes — магнитная лента. Хранилище kuberoot с --keep-history хранит историю кластера после уплотнения, а Gachinetes отдаёт её как агрегированный API, с проверкой прав на каждый запрос и с расшифровкой секретов ключами самого API-сервера. Поэтому gachictl умеет показать кластер в любой прошлый момент, перемотать изменения, вывести кладбище удалённых объектов и вернуть их, а веб-интерфейс в стиле видеокассеты проигрывает историю, как магнитофон. Вокруг ленты реализованы судья для менеджеров полей, которые всё время отбирают поле друг у друга, «фантазии» (ветки кластера с копированием при записи от любой точки ленты, в которых работают настоящие контроллеры и планировщик), планировщик с весовыми категориями и групповым размещением, живая миграция подов через контрольные точки CRIU, бюджеты в деньгах и набор механизмов безопасности.
Лента в S3 и восстановление на любой момент
--keep-history защищает историю от уплотнения, но не от потери всего кластера. В v0.2.0 gachi-tape непрерывно отправляет ленту в S3-совместимое хранилище: сначала основу со всеми ключами, затем страницы журнала, раз в сутки новую основу. Отправитель в кластере один, это обеспечивает Lease. Шифрование через age обязательно, отключить его можно только явным флагом. А gachictl tape restore --from s3://… --at <момент> поднимает из бакета хранилище вместе с историей, так что перемотка, кладбище и возврат удалённого продолжают работать и после аварии. Это опирается на журнал ленты и tape restore из kuberoot #48.
Вот весь путь целиком на стенде из настоящих бинарников: kuberoot-store из main, gachi-tape и gachictl из v0.2.0. Lease отправителя живёт в кластере kind, а роль S3 играет локальная заглушка, которая складывает объекты в каталог. Сначала в хранилище появляются два изменения меню и прайс, затем всё стирается по ошибке. Лента к этому моменту уже лежит в бакете зашифрованной. Кластер теряется целиком, и gachictl восстанавливает новое хранилище на ревизию до ошибки. Последняя команда показывает, что вместе с ключами вернулась и история: на ревизии раньше меню ещё было чак-чаком.

Фантазии как превью пул-реквестов
Вторая половина v0.2.0 превращает фантазии в окружения для пул-реквестов. gachictl fantasy preview --pr <номер> --manifests <каталог> запускает Job в пространстве gachi-fantasies, который ответвляет кластер от текущего момента ленты, применяет манифесты пул-реквеста, даёт контроллерам и планировщику отыграть изменения и публикует отчёт о созданных, изменённых и удалённых объектах и о размещении подов. Ветка остаётся доступной со своим API-сервером и kubeconfig до истечения TTL. fantasy merge применяет манифесты к настоящему кластеру, если тот не ушёл вперёд с момента ветвления, а fantasy discard убирает превью. В examples/github/ лежит пример для GitHub Actions: превью при открытии и каждом пуше, отчёт комментарием к пул-реквесту и удаление при закрытии.
Что дальше
Телеграм-бот KUBER KOMBAT уже научился крутиться в Sheeternetes без всяких воркеров. Поэтому следующим большим шагом для остальных нетесов я вижу различные продакшен-нагрузки, причем я буду подбирать такие, которые максимальрно выпукло модчеркнут достоинства этих дистрибутивов. Кроме того, мы будем обновлять компоненты дистрибутивов и добавлять тематические уместные фичи. Буду рад вашим issue и PR’ам в проекты, а также историям успеха с этими проектами в продакшене и хоум-лабах.
Ссылки на проекты и релизы
Sheeternetes: v0.0.0.0.0.3, v0.0.0.0.0.4, v0.0.0.0.0.5, v0.0.0.0.0.6
Tatarnetes v1.37.2-tatar.1, TatarOS v3.0.0-tatar.0, Tatarnetes UI v7.14.0-tatar.1

Комментарии 0