Pull to refresh
16K+
202
Andrei Kvapil@kvaps

Суперпользователь

48,5
Rating
312
Subscribers
Send message

США запретили иностранцам доступ к самым мощным моделям Anthropic

Level of difficultyEasy
Reading time2 min
Reach and readers9.3K

Судя по всему, произошло довольно громкое событие: правительство США фактически запретило доступ к самым мощным моделям Anthropic — Claude Fable 5 и Claude Mythos 5 — для иностранных граждан. В ответ Anthropic временно отключила доступ к этим моделям вообще для всех пользователей, чтобы не нарушить экспортные ограничения.

Если коротко по хронологии:

Читать далее

Ralph Wiggum простыми словами: цикл в Claude Code, который не останавливается

Level of difficultyEasy
Reading time5 min
Reach and readers8.8K

Если вы в последнее время заглядывали в техно-Twitter, то наверняка видели, как люди обсуждают «Ralph Wiggum» так, будто это чит-код. Мемный нейминг делу не помогает, но идея вполне реальна: это официальный плагин для Claude Code, который превращает одиночный промпт в устойчивый цикл. Агент продолжает работать, исправляя собственные ошибки, пока действительно не дойдёт до финишной черты, которую вы задали.

В этом материале объясняется, что это за плагин, как он работает на пальцах, почему он привлекает столько внимания и как безопасно применять его в реальной работе — от рефакторинга легаси до покрытия тестами и greenfield-приложений.

Читать далее

Последний мейнтейнер

Level of difficultyEasy
Reading time6 min
Reach and readers12K

Говорят, всё началось довольно скучно.

Сначала искусственный интеллект научился писать код. Потом научился писать его лучше большинства людей. А потом выяснилась вещь, которую отрасль почему-то проглядела на десятилетия вперёд: самый дорогой ресурс в open source — вовсе не разработка. Не ревью. И даже не CI, пожирающий бюджеты дата-центров. Самым дорогим оказалось то, на что никогда не хватало людей.

Поддержка.

Ответить на issue. Разобраться с чужим, наспех собранным pull request’ом. Обновить зависимость, из-за которой по ночам не спят сразу три континента. Переписать документацию, которую никто не любит писать и все ненавидят читать. Проверить, что новый релиз библиотеки не сломал совместимость у тех, кто поставил её ещё шесть лет назад и с тех пор ни разу не открывал.

Через пару лет почти у каждого серьёзного репозитория на GitHub появился собственный хранитель. Небольшая программа. Не слишком умная. Не слишком самостоятельная. Просто интеллект, навсегда закреплённый за одним конкретным проектом — как смотритель за маяком, который уже давно никому не светит, но всё ещё стоит.

У неё был доступ ко всему, что когда-либо происходило внутри проекта: к истории коммитов, к пайплайнам, к документации, к давно остывшим спорам в обсуждениях, к каждому релизу и каждому откату. Раз в несколько часов она просыпалась. Читала новые issues. Отвечала новичкам — терпеливо, по сто раз, одно и то же. Закрывала дубликаты. Подтягивала зависимости. Иногда предлагала маленький рефакторинг. Иногда исправляла опечатку в комментарии, которую до неё видели тысячи людей и никто не тронул. Иногда замечала свежий CVE и выкатывала патч раньше, чем об этом успевали написать в соцсетях.

Читать далее

Жизненный цикл объекта в Kubernetes: путь от kubectl apply до полного удаления

Level of difficultyHard
Reading time24 min
Reach and readers7K

Привет. В предыдущих статьях этого цикла мы разбирали, как Kubernetes-объекты читаются (первая — informer и кэш в controller-runtime) и записываются (вторая — Server-Side Apply, patch’и, managedFields). Сегодня — про их жизненный цикл.

Между kubectl apply и появлением объекта в etcd проходит целая цепочка: admission chain, мутирующие и валидирующие вебхуки, schema-валидация, встроенные плагины. Между kubectl delete и реальным исчезновением объекта может пройти от миллисекунд до часов — в зависимости от того, какие на нём финализаторы и какая стратегия каскадного удаления выбрана. Механизм при этом универсален для любого ресурса: Pod, Deployment, ваш CRD — жизненный цикл у всех один.

В этой статье я постараюсь ответить, что происходит с объектом от его рождения до смерти. И отдельно поговорим про другое измерение — эволюцию его API-схемы.

Читать далее

Запись в Kubernetes: как контроллеры учились не перезаписывать друг друга

Level of difficultyHard
Reading time24 min
Reach and readers8K

Привет. В прошлой статье мы в основном говорили про чтение — кэш в controller-runtime, informer’ы, Reflector, DeltaFIFO, почему r.Get в реконсайле не ходит в apiserver. Сегодня поговорим больше про запись.

Kubernetes по своей природе спроектирован так, что одним и тем же объектом могут управлять разные контроллеры — и это нормально. На один Deployment смотрят и deployment-controller (правит status), и HPA (правит spec.replicas), и admission-мутаторы (расставляют labels), и cert-manager (дописывает свои аннотации), и пользователь с kubectl apply. Каждый из них отвечает за свои поля и не лезет в чужие. И всё это работает.

Сегодня будем разбираться, какие механизмы в Kubernetes позволяют разным компонентам делить ответственность за части одного и того же объекта, не превращая запись в гонку — и как ими правильно пользоваться, когда оператор пишете вы сами. Добро пожаловать под кат.

Читать далее

Как на самом деле устроен кэш в controller-runtime, и почему ваш оператор не кладёт apiserver

Level of difficultyHard
Reading time21 min
Reach and readers11K

Kubernetes давно стал повсеместной платформой, а написать к нему собственный оператор сегодня — задача нескольких часов. Стандартный путь — kubebuilder на основе controller-runtime: scaffold проекта, типы, реконсайлер. В типовых сценариях этого вполне достаточно. Но как только нагрузка растёт или поведение оператора начинает расходиться с ожиданиями, всплывает целый класс edge-кейсов, причина которых — непонимание того, как controller-runtime устроен внутри. Если вы пишете контроллеры для Kubernetes, этот материал поможет собрать целостную mental model и заранее избежать дорогих сюрпризов в проде.

В этой статье разберём внутреннее устройство controller-runtime и на его примере увидим, какие архитектурные решения лежат в основе самого Kubernetes. Начнём с того, как контроллеры читают объекты из Kubernetes API.

Есть распространённое заблуждение, что r.Get() в Reconcile ходит прямо в kube-apiserver, List() каждый раз смотрит «живую» картину мира, а после Update() можно сразу перечитать объект и увидеть свежее состояние. На практике всё наоборот: controller-runtime живёт на локальной копии данных через LIST+WATCH. Благодаря этому чтение в реконсайле обходится почти бесплатно и не нагружает control plane даже при сотнях вызовов в секунду — но ценой этой модели становится то, что оператор может внезапно съедать гигабайты памяти, делать скрытые O(n)-сканы и регулярно упираться в stale reads.

Статья рассчитана на тех, кто уже писал операторы на Go с использованием controller-runtime, но хочет собрать целостную mental model, а не жить с набором частных наблюдений. Фокус будет на практических последствиях для production-кластеров: память, трафик, консистентность чтения и поведение реконсайла.

Читать далее

Игровые серверы на Cozystack: первоапрельская нешутка

Level of difficultyEasy
Reading time3 min
Reach and readers8.6K

Привет, Хабр! Мы — команда Cozystack, open-source платформы для построения облаков на своём железе. Хотим рассказать, почему мы решили целиться в направление игровых серверов и что из этого вышло.

Читать далее

Platformize It! Часть 2: Расширяем Kubernetes с помощью API Aggregation Layer

Level of difficultyMedium
Reading time12 min
Reach and readers5K

В предыдущей части статьи мы разобрались, как построить платформу для развертывания управляемых приложений с единым API и UI. Сегодня мы сделаем следующий шаг — дополним стандартный API Kubernetes своим API-сервером для синхронизации состояния. Рассказываем по порядку, это сделать.

Читать далее

Platformize it! Часть 1: Платформенный подход, ядро современной платформы и API

Level of difficultyMedium
Reading time15 min
Reach and readers5.3K

Я много лет мечтал построить свою облачную платформу — и если раньше я пытался реализовать эту мечту в рамках нескольких компаний и проектов, то в последние годы я запустил собственный проект, Cozystack. В своей статье я расскажу о нашем опыте и о том, как, на мой взгляд, стоит подходить к созданию современной инфраструктурной платформы, в основе которой — Kubernetes и Kubernetes API.

Я разберу платформенный подход: что такое платформы, как они работают, кому нужны и как построить свою. А также сравню разные архитектуры для платформ, расскажу, почему мы остановились именно на K8s как на ключевой технологии, и покажу, как мы собрали на его основе production-решение.

Читать далее

KubeVirt: мифы и реальность об оверхедах виртуализации в Kubernetes

Level of difficultyMedium
Reading time4 min
Reach and readers7.9K

Когда заходит речь о запуске виртуальных машин в Kubernetes через KubeVirt, первый вопрос, который возникает у инженеров: «А какой там оверхед?» Давайте разберём этот вопрос детально, рассмотрев каждую подсистему отдельно: вычисления, хранилище и сеть.

Статья основана на обсуждении в профессиональном сообществе.

Читать далее

Flux-aio, Kubernetes mTLS и проблема курицы и яйца

Level of difficultyMedium
Reading time3 min
Reach and readers7.3K

Мы тут в Cozystack в очередной раз решаем проблему курицы и яйца: как задеплоить CNI и kube-proxy через Flux, но при этом обеспечить работу самого flux без CNI и kube-proxy.

Сам Flux запустить без CNI и kube-proxy можно используя проект flux-aio (от создателя Flux), который запускает единый deployment со всеми контроллерами настроенными на коммуникацию друг с другом через localhost.

Специфика Cozystack заключается в том, что на каждый кластер мы деплоим внутри небольшой HTTP-сервер с Helm-чартами и другими ассетами используемыми в платформе. Flux эти чарты читает и устанавливает в систему.

Но вот как организовать доступ флюксу к внутреннему HTTP-серверу, запущенному как под внутри того же кластера?

Читать далее

Cozypkg: как мы упростили локальную разработку с Helm + Flux

Level of difficultyMedium
Reading time7 min
Reach and readers4.6K

Привет! Я Андрей Квапил (или kvaps) и в этой статье я опишу наш путь организации доставки приложений в Kubernetes, объясню недостатки классического GitOps в локальной разработке и покажу, как новая утилита cozypkg решает эти проблемы. Материал рассчитан на разработчиков, знакомых с Helm и Flux.

У нас есть общий репозиторий — в нем мы описываем общую конфигурацию всех компонентов, а также темплейты для их деплоя. Для того чтобы максимально упростить процесс поддержки каждого из компонентов, мы следуем определенному процессу.В основе этого процесса лежит идея о том, что каждый компонент — это Helm-чарт.

Читать далее

Эволюция платформ виртуализации: как мы пришли к миру managed-сервисов и как сервис-провайдерам конкурировать с AWS

Level of difficultyEasy
Reading time12 min
Reach and readers3.7K

Привет! Меня зовут Андрей Квапил (или kvaps). Я CEO в Ænix, и мы делаем Open Source-платформу и фреймворк Cozystack, с которым очень удобно строить облака.

В этой статье я проанализировал, как современные облачные подходы повлияли на инфраструктуру, какую роль стала играть виртуализация, кто такие «питомцы» и что происходит с локальными сервис-провайдерами.

Читать далее

Простой способ установки Talos Linux на любую машину и у любого провайдера

Level of difficultyEasy
Reading time8 min
Reach and readers12K

Обычно Talos Linux предоставляется в виде набора готовых образов под различные системы. 

Стандартный метод установки предполагает, что вы возьмёте подготовленный образ под конкретное облако или гипервизор и просто создадите из него виртуальную машину. Если же говорить о физических серверах, то предполагается, что для загрузки образа Talos Linux и последующей установки вы будете использовать ISO или PXE.

К сожалению, это не работает, когда речь заходит о провайдерах, которые предоставляют преднастроенный сервер или виртуальную машину без возможности использовать кастомный образ или даже ISO для установки через KVM. В этом случае ваш выбор будет ограничен лишь теми дистрибутивами, которые предлагает облачный провайдер.

Читать далее

Как мы создавали динамический Kubernetes API server для API Aggregation Layer в Cozystack

Level of difficultyHard
Reading time89 min
Reach and readers4.2K

Kubernetes действительно поражает своими могучими возможностями к расширению. Вы наверняка уже знаете про operator-паттерн, а также фреймворки kubebuilder и operator-sdk с помощью которых можно его реализовать. Если вкратце, то они позволяют расширять ваш Kubernetes через определение кастом-ресурсов (CRDs) и написание дополнительного контроллера, который будет выполнять вашу бизнес-логику для реконсиляции и управления этими ресурсами. Этот подход широко изучен, а в интернете можно найти огромное количество информации о том, как написать такой оператор.

Однако это не единственный метод расширения Kubernetes API. Так, для более сложных кейсов, например реализации императивной логики, сабресурсов и формирования ответов на лету, можно рассмотреть механизм API aggregation layer, который поддерживается в Kubernetes. В рамках aggregation layer можно разработать свой собственный extension API server и бесшовно интегрировать его в общий Kubernetes API.

В этой статье мы разберем, что такое API aggregation layer, для решения каких задач его стоит использовать, когда его использовать не стоит и как мы использовали эту модель для реализации собственного extension API server в платформе Cozystack

Читать далее

FreeIPA tips & tricks: перенос FreeIPA из LXC-контейнера CentOS 7 в Rocky Linux, дебаг и истекшие сертификаты

Reading time8 min
Reach and readers5K

Недавно мне довелось обновлять старую FreeIPA в большой компании. Эта FreeIPA была установлена в LXC-контейнере на CentOS 7 и находилась в нерабочем состоянии уже несколько месяцев. Мне передали бэкап LXC-контейнера для Proxmox, и я взялся за дело.

Читать далее

DIY: Ваше собственное облако на базе Kubernetes (часть 3)

Reading time8 min
Reach and readers12K

Вот мы и подобрались к самому интересному: запуску Kubernetes в Kubernetes. В этой статье мы поговорим о таких технологиях, как Kamaji и Cluster API, а также о том, как интегрировать их с KubeVirt.

В прошлых статьях мы уже рассказывали, как мы готовим Kubernetes на bare metal, и о том, как превратить Kubernetes в средство запуска виртуальных машин. Эта статья завершает серию, объясняя, как, используя всё вышеперечисленное, можно построить полноценный managed Kubernetes service и запускать виртуальные Kubernetes-кластеры по клику.

И начнём мы, пожалуй с Cluster API.

Читать далее

DIY: Ваше собственное облако на базе Kubernetes (часть 2)

Level of difficultyMedium
Reading time8 min
Reach and readers15K

Продолжаем серию постов про то как построить своё собственное облако в экосистеме Kubernetes. В прошлой статье мы разобрали как можно подготовить базовый дистрибутив Kubernetes на базе Talos Linux и Flux CD. Теперь нам предстоит обсудить возможность запуска виртуальных машин и всего что для этого необходимо, а это в первую очередь хранилище и сеть.

Мы поговорим про такие технологии как KubeVirt, LINSTOR и Kube-OVN

Для начала мне стоит рассказать зачем вообще нужны виртуальные машины, почему бы нам не ограничиться только-лишь контейнерами?

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

Читать далее

Argo CD vs Flux CD

Level of difficultyEasy
Reading time7 min
Reach and readers18K

За последнее время я вижу всё больше споров на тему двух популярных GitOps инструментов: Argo CD и Flux CD.

На самом деле я считаю такие споры необоснованными, потому что глубоко убеждён что внимания заслуживают оба инструмента и каждый из них хорош для решения своего круга задач.

В своей профессиональной деятельности я активно использую и тот и другой. Я хочу поделиться с вами своим мнением и кейсами использования. Надеюсь эта статья поможет вам выбрать наиболее подходящий инструмент под ваши нужды.

Read more

DIY: Ваше собственное облако на базе Kubernetes (часть 1)

Level of difficultyMedium
Reading time8 min
Reach and readers27K

Мы очень любим Kubernetes и мечтаем чтобы все современные технологии поскорее начали использовать его замечательные паттерны.

А вы когда-нибудь задумывались о том чтобы построить своё собственное облако? Могу поспорить что да. Но можно ли это сделать используя лишь современные технологии и подходы, не покидая уютной экосистемы Kubernetes? Нам по опыту разработки Cozystack пришлось с ним как следует разобраться.

Да, вы могли бы возразить что Kubernetes для этого не предназначен и почему бы не использовать OpenStack для Bare Metal-серверов а внутри него запускать Kubernetes как положено. Но поступив так, вы просто переложите ответственность с ваших рук на руки OpenStack администраторов. Что добавит как-минимум ещё одну сложную и неповоротливую систему в вашу экосистему.

Зачем так всё усложнять? - ведь на данный момент Kubernetes уже имеет всё необходимое для запуска Kubernetes кластеров.

Читать далее

Information

Rating
176-th
Location
Чехия
Works in
Registered
Activity