Найти тему
#cilium #l2 #kubernetes Разбирался я тут с опциями цилиума и наткнулся на опцию --agent-liveness-update-interval и что-то из описания опции в документации яснее не стало. Полез разбираться и внезапно почувствовал себя мужчиной из ролика, который решил поменять лампочку (скину в комменты). Встречайте L2 анонсы в Cilium для доступа к сервисам LoadBalancer в bare-metal Kubernetes. Все как вы любите, код на go, код на C, bpf-maps, bpftrace и прочие потроха цилиума и немножко линукс ядра. --- Понравилось? Поставь лайк!
1 месяц назад
#AI Я часто слышу, что генеративные ИИ скоро заменят разработчиков... Поэтому у меня тут возникла идея попробовать разобраться можно ли написать проект полностью с помощью генеративного ИИ. Решил написать мем-бота, который использует YandexGPT для улучшения или придумывания промпта и для генерации картинок взял YandexART и Kandinsky. И оно работает! Вот, положила: @meme_ydx_bot Для генерации API внешних сервисов я копировал страницу с сайта в чат и говорил: "Вот тебе дока, напиши код". Ну и для всего остального я только выдавал текстовые команды. Итого я написал всего около 1% кода. Все остальное сделал Deepseek v3 с помощью плагинов Continue.dev и Aider.chat. Continue.dev - это плагин для VS Code. А Aider.chat - клевый инструмент для работы в терминале. Бот одновременно запускает генерацию в обоих сервисах и возвращает первый успешный результат. Из тестов выяснилось, что YandexART работает побыстрее, поэтому он почти всегда отвечает первым. Мемы получаются так себе, правда... 🙂 Надо будет дообучить на каком-нибудь корпусе мемов ИИшку. P.S. Кстати, пробовал Sonnet 3.5 - он хорош, но очень дорогой по сравнению с Deepseek. P.S. ЯндексАрт более щепетильно относится к промпту и, например, не будет генерировать картику по запросу "Гроб, кладбище, пидор". P.S. Более крутые товарищи уже написали сервис @AIMemeArenaBot. --- Если есть мысли как улучшить бота или промпт - напишите, пожалуйста :)
2 месяца назад
#это_база #kubelet #kubernetes Дело было вечером, делать было нечего, да много дел было! Писал тут лекцию по kubelet и подумал, а почему бы не рассказать про то, как работает вхождение ноды кубера по токенам. Так и получилась небольшая статейка. --- Понравилось? Поставь лайк! Они улучшают мне настроение. Есть что добавить - велком в комменты!
3 месяца назад
Собирали вручную Kubernetes-кластер без всяких там kubeadm? Я разрабатываю курс по Kubernetes и решил: что может быть лучше для практики, чем собрать кластер своими руками? Это не только помогает понять, как работает Kubernetes, но и учит не бояться его сломать. Kubernetes the Hard Way от легендарного Келси Высокая Башня — лучший туториал для этой задачи. Но вот что странно: в репозитории нет быстрого способа поднять виртуалки для начала работы. Поэтому я написал Vagrantfile, который автоматически создает все нужные виртуалки по заданной спецификации. Теперь можно забыть о ручной настройке инфраструктуры и сосредоточиться на самом важном — практике. ```bash brew tap hashicorp/tap brew install hashicorp/tap/hashicorp-vagrant vagrant plugin install vagrant-vmware-desktop vagrant up ``` P.S. В репозиторий я также добавил файл, без которого пройти упражнение на сегодняшний день невозможно. --- Ставьте лайки, пробуйте запустить и делитесь фидбеком! А еще будет интересно узнать ваши идеи, как решить подобную задачу. 👨‍💻✨
3 месяца назад
Как с помощью генеративного ИИ улучшить PR в open source проект. ## Введение Fluent Bit - это быстрый и легковесный логгер и форвардер логов, который часто используется в облачных средах для сбора и отправки данных. В этой статье я расскажу, как с помощью ИИ удалось быстро разобраться в незнакомой кодовой базе и подготовить качественный PR. ## Проблема При настройке отправки логов в Amazon Kinesis через Fluent Bit я столкнулся с ограничением - плагин не позволял указать нестандартный порт для подключения. Это было критично в нашей инфраструктуре, где из-за особенностей сетевой архитектуры мы используем нестандартные порты для доступа к kinesis. ## Первоначальное решение Мой коллега предложил простой патч, который решал проблему: Было: ctx->kinesis_client->port = 443; struct flb_upstream *upstream = flb_upstream_create(config, ctx->endpoint, 443, FLB_IO_TLS, ctx->client_tls); Стало: ctx->kinesis_client->port = ctx->port; struct flb_upstream *upstream = flb_upstream_create(config, ctx->endpoint, ctx->port, FLB_IO_TLS, ctx->client_tls); Патч работал, но для долгосрочного решения нужно было внести изменения в апстрим проекта. Пересборка Fluent Bit при каждом обновлении не самый удобный вариант. ## Работа с ИИ Для работы я использовал cursor.com - форк VSCode с интегрированным Claude AI. Главное преимущество этого редактора в том, что он "понимает" всю кодовую базу проекта. Вот как проходила работа с ИИ: 1. Сначала я показал ему существующий патч и попросил предложить улучшения. ИИ самостоятельно: - Обнаружил существующие в кодовой базе механизмы логирования (flb_plg_debug и flb_plg_error) - Предложил добавить информативные сообщения о выбранном порте - Добавил валидацию входных данных после моей просьбы. 2. ИИ самостоятельно написал тесты, проверяющие: - Инициализацию с дефолтным портом - Использование кастомного порта - Обработку некорректных значений порта 3. Когда возникли проблемы с подхватыванием порта, ИИ предложил пошаговую отладку через gdb: # Сборка с отладочной информацией cmake .. -DCMAKE_BUILD_TYPE=Debug -DFLB_DEV=On # Запуск отладчика gdb --args ./bin/fluent-bit -c /etc/fluent-bit/fluent-bit.conf # Команды отладки (gdb) break cb_kinesis_init (gdb) run (gdb) print flb_output_get_property("port", ins) (gdb) print *ins ## Результат Итоговый PR был вмержен в основную ветку проекта. На всю работу ушло около 6 часов, включая время на знакомство с кодовой базой Fluent Bit. Теперь изменение конфигурации Fluent Bit для работы с нестандартным портом Kinesis выглядит так: [OUTPUT] Name kinesis Match * region us-east-1 port 4443 # Новый параметр stream my-stream Я надеюсь в версии fluent-bit 3.2 оно уже будет работать. P.S. Я пробовал копилот от гитхаба для этой задачи - он мне показался несколько бесполезым и не шел ни в какое сравнение с sonnet 3.5.
4 месяца назад
Я перед сном смотрю разные видео и это видео я посмотрел судя по истории 11 октября, но идея этого видео не отпускает меня до сих пор. Как вам такая мысль: В нашей вселенной время и расстояние квантуются. То есть есть минимальные единицы, меньше которых нельзя либо переместиться, либо измерить время? То есть, например, нельзя переместиться на произвольное расстояние, а только на минимальное или больше него. Именно о таких понятиях это видео и оно весьма интересно.
4 месяца назад
Начальные условия: Есть кластер(а) kubernetes с cilium в режиме VxVLAN. Мастер ноды никак не входят в кластер k8s. Надо: Настроить control plane так, чтобы kube-apiserver мог общаться с k8s node(s), вебхуками и расширенным апи (например, метрик сервер), но не был нодой kubernetes. Сколько вариантов это сделать вы можете придумать используя стандартные средства (без написания чего-то своего)? Я пока вижу 3 нормальных. 1. VTEP (Virtual Tunnel Endpoint) https://docs.cilium.io/en/stable/network/vtep/    - Как работает: Поднимается vxvlan устройство на мастер-ноде, которое подключается ко всем нодам кластера, а весь трафик на поды направляется через это устройство.    - Плюсы: Легко настроить.    - Минусы: Требует обновления конфигурации при каждом изменении состава нод, увеличивает количество broadcast-пакетов, что может создавать проблемы на больших кластерах. 2. Cilium External Workloads https://docs.cilium.io/en/stable/network/external-workloads/    - Как работает: Создаётся vxvlan интерфейс для Cilium сети и подключается Cilium Agent на внешней ноде с clustermesh API.    - Плюсы: Позволяет настраивать L3-связь без broadcast, а Cilium управляет всей связностью.    - Минусы: Требуется LoadBalancer или NodePort для clustermesh API, что может добавить сложности и расходы. Требуется надежное хранение в etcd. 3. Konnectivity Service https://kubernetes.io/docs/tasks/extend-kubernetes/setup-konnectivity/    - Как работает: Konnectivity сервер разворачивается на мастер-ноде и позволяет контроллеру взаимодействовать с ресурсами нод через прокси.    - Плюсы: Работает и через NAT, поддерживает любые CNI.    - Минусы: Требуются дополнительные ресурсы на агенты и сервер Konnectivity, а также балансировщик для отказоустойчивости. Есть еще вариант с выносом вебхуков и расширенного апи на хостовую сеть, но это не удобно.
4 месяца назад
Сегодня мне задали интересный вопрос: как обнаружить ситуацию, когда YAML-файл синтаксически корректен, но его содержимое некорректно для Kubernetes, и сделать это до попытки его применения в кластере? https://gist.github.com/azalio/f2e2859258c5d1768131623775ad369c #kubernetes #lint
4 месяца назад
Сколько раз ко мне приходили ML разработчики и предлагали затащить модельку 10 Gb в образ не счесть. А тут им счастье подвезли: VolumeSource: OCI Artifact and/or Image #4639; KEP KEP добавляет в Kubernetes новый VolumeSource, поддерживающий OCI-образы и/или OCI-артефакты. Теперь пользователи смогут упаковывать файлы и шарить их в  контейнерах пода, не включая в основной образ. Это позволит снизить уязвимости и упростит создание образов. Поддержка образов OCI уже достаточно отлажена в Kubernetes и CRI. Этот KEP расширяет её на OCI-артефакты. Теперь пользователи смогут пробрасывать новые медиатипы (media types) в рантаймы контейнеров, пользуясь всеми преимуществами, реализованными в подходе OCI (кастомное управление жизненным циклом, валидация, безопасность и так далее). А если внедрить к себе в кластер что-то из p2p доставки образов, да хоть ту же Стрекозу, то вообще можно на чуть-чуть сделать инженеров ML более счастливыми :) https://habr.com/ru/companies/flant/articles/835626/
6 месяцев назад
Многие технари в приватных беседах признаются что они «душнилы». Душнилы, я к вам обращаюсь! Хотите душнить профессионально? Я тут сделал презентацию, по тому как аргументированно душнить и надеюсь она вам пригодится :) https://arguments.my.canva.site
6 месяцев назад
Возникла у меня рабочая потребность разобраться в google protobuf и как это может быть реализованно на Go. А когда я разбираюсь, я обычно залезаю очень подробно внутрь. Статей, которые на достаточно подробном уровне дали вводную и были понятны новичку я не нашел, поэтому написал свою. По сути дела это пример как сделать клиент-сервер на protobuf и gRPC с очень подробными комментариями. https://github.com/azalio/protobuf-example
6 месяцев назад
#kubelet #kubernetes #containerd Недавно столкнулся с ошибкой на проде: не стартовали static pods из-за невозможности скачать pause контейнер. Разбор этого случая привел к написанию статьи ниже. Дано: - containerD 1.6. - kubernetes 1.28. - Один приватный регистри с аутентификацией. - Абсолютно все образа загружаются с этого регистри. Вопрос: - Где необходимо и достаточно указать данные для доступа к регистри чтобы запустить под? Уверен большинство из вас правильно ответили на этот вопрос. Для тех кто сомневается ответ под катом. Необходимо и достаточно указать данные для доступа в конфиге containerD. А тем кому интересны кровавые подробности, проходите по ссылке 🙂
6 месяцев назад