Azalio_tech
531 subscribers
8 photos
1 video
3 files
47 links
Разные заметки о kubernetes, linux и IT
https://www.linkedin.com/in/azalio/
Download Telegram
#docker

Вы когда-нибудь задумывались почему docker pull python работает и на amd64 и на arm? И даже на прости господи, s390x? Я когда-то об этом читал, но никогда не делал для своих образов.

Я недавно наткнулся на KEP-4216: Image pull per runtime class и подумал что будет интересно об этом рассказать.

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

Посмотреть легко:

docker manifest inspect python
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 2007,
"digest": "sha256:49f4118027f9494ebe47d3d9b6c7a46b6d7454a19a7ba42eca32734d8108b323",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 2007,
"digest": "sha256:089081c12425406b89f78493e32ae5672d442ed426b3965fc8cffe17992947f4",
"platform": {
"architecture": "arm",
"os": "linux",
"variant": "v5"
}
},


Сделать тоже в принципе не сложно.
👍2
#kubernetes #spot

Предположим, что ваш СЕО сошел с ума и решил посчитать число Pi в kubernetes без всякого стораджа.
Но бюджет как всегда ограничен и вы решили использовать только спотовые инстансы.
Как же это сделать?

Что удивительно этим вопросом задавались не только воспалённые мозги человека, который спит по 3 часа в сутки, но и вполне серьезные компании.

Все вы скорее всего знаете проект Virtuozzo.
От него отпочковался проект CRIU.
А на основе него уже появился crik.

И он позволяет судя по описанию реализовать эту задачу, о чем рассказал на последнем kubecon его основатель.

Где же это можно применить в реальной жизни? В голову сразу приходят 2 варианта:
- батчевые задачи
- ML!

Представьте, можно запускать долгие задачи на спотовых инстансах и здорово экономить!

Сам разработчик говорит что они это применяют для запуска 2кк тестов.

Я сомневаюсь, что облака встроят эту функциональность для клиентов, но что мешает самим клиентам это сделать?
#kubelet #kubernetes #containerd

Недавно столкнулся с ошибкой на проде: не стартовали static pods из-за невозможности скачать pause контейнер. Разбор этого случая привел к написанию статьи ниже.

Дано:
- containerD 1.6.
- kubernetes 1.28.
- Один приватный регистри с аутентификацией.
- Абсолютно все образа загружаются с этого регистри.

Вопрос:
- Где необходимо и достаточно указать данные для доступа к регистри чтобы запустить под?

Уверен большинство из вас правильно ответили на этот вопрос.
Для тех кто сомневается ответ под катом.

Необходимо и достаточно указать данные для доступа в конфиге containerD.

А тем кому интересны кровавые подробности, проходите по ссылке 🙂
🔥2
#kubernetes #kube-scheduler

Огромный пост от инженера OpenAI про то, как осуществляется preemption в kube-scheduler.
2🔥2
#kubernetes #security

Интересный проект для защиты подов. Основная фишка - недоверие облачному провайдеру, но запуск нагрузки на облачном провайдере :)

https://docs.edgeless.systems/contrast/

Основан на kata-containers и Confidential Containers

Contrast is designed to keep all data always encrypted and to prevent access from the infrastructure layer. It removes the infrastructure provider from the trusted computing base (TCB). This includes access from datacenter employees, privileged cloud admins, own cluster administrators, and attackers coming through the infrastructure, for example, malicious co-tenants escalating their privileges.
👍1
Возникла у меня рабочая потребность разобраться в google protobuf и как это может быть реализованно на Go.
А когда я разбираюсь, я обычно залезаю очень подробно внутрь.
Статей, которые на достаточно подробном уровне дали вводную и были понятны новичку я не нашел, поэтому написал свою.
По сути дела это пример как сделать клиент-сервер на protobuf и gRPC с очень подробными комментариями.

https://github.com/azalio/protobuf-example
👍11
Я уже немного перестал следить за развитием опенсорсных генерилок картинок, но в одном из чатов зашла речь о том, как это делать и я написал краткую инструкцию.

По большому счету все что вам нужно это ваше желание и совсем немного времени.

https://telegra.ph/Voploshchaem-fantazii-v-cifrovoj-realnosti-07-06
🔥3😁1
Многие технари в приватных беседах признаются что они «душнилы».
Душнилы, я к вам обращаюсь!
Хотите душнить профессионально?
Я тут сделал презентацию, по тому как аргументированно душнить и надеюсь она вам пригодится :)

https://arguments.my.canva.site
🔥6
Сколько раз ко мне приходили 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/
👍7🔥2
А что, если в действительности написать такую программу, которая содержит в себе сравнение всех uint32 чисел? Какие сложности нас ожидают?

(hint: компилятор скомпилировать такую программу не смог и пришлось выкручиваться…

hint2: превосходство питона над другими жалкими языками программирования, но не так как вы подумали)



https://andreasjhkarlsson.github.io//jekyll/update/2023/12/27/4-billion-if-statements.html
🔥3
Сегодня мне задали интересный вопрос: как обнаружить ситуацию, когда YAML-файл синтаксически корректен, но его содержимое некорректно для Kubernetes, и сделать это до попытки его применения в кластере?

https://gist.github.com/azalio/f2e2859258c5d1768131623775ad369c

#kubernetes #lint
👍6
#cilium #external_nodes #kubernetes

Начальные условия: Есть кластер(а) 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, а также балансировщик для отказоустойчивости.

Есть еще вариант с выносом вебхуков и расширенного апи на хостовую сеть, но это не удобно.
2
Я перед сном смотрю разные видео и это видео я посмотрел судя по истории 11 октября, но идея этого видео не отпускает меня до сих пор.
Как вам такая мысль:

В нашей вселенной время и расстояние квантуются.

То есть есть минимальные единицы, меньше которых нельзя либо переместиться, либо измерить время?
То есть, например, нельзя переместиться на произвольное расстояние, а только на минимальное или больше него.

Именно о таких понятиях это видео и оно весьма интересно.
4🤔2
#AI #opensource

Как с помощью генеративного ИИ улучшить 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.
👍41
Собирали вручную 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. В репозиторий я также добавил файл, без которого пройти упражнение на сегодняшний день невозможно.

---
Ставьте лайки, пробуйте запустить и делитесь фидбеком! А еще будет интересно узнать ваши идеи, как решить подобную задачу. 👨‍💻
👍72🔥1
#это_база #kubelet #kubernetes

Дело было вечером, делать было нечего, да много дел было!

Писал тут лекцию по kubelet и подумал, а почему бы не рассказать про то, как работает вхождение ноды кубера по токенам.

Так и получилась небольшая статейка.

---
Понравилось? Поставь лайк! Они улучшают мне настроение.
Есть что добавить - велком в комменты!
👍6🔥4🦄3
#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.

---
Если есть мысли как улучшить бота или промпт - напишите, пожалуйста :)
👍1
#cilium #l2 #kubernetes

Разбирался я тут с опциями цилиума и наткнулся на опцию --agent-liveness-update-interval и что-то из описания опции в документации яснее не стало.

Полез разбираться и внезапно почувствовал себя мужчиной из ролика, который решил поменять лампочку (скину в комменты).

Встречайте L2 анонсы в Cilium для доступа к сервисам LoadBalancer в bare-metal Kubernetes.

Все как вы любите, код на go, код на C, bpf-maps, bpftrace и прочие потроха цилиума и немножко линукс ядра.

---
Понравилось? Поставь лайк!
👍16🔥4
Kubernetes Network Policies Done the Right Way by Isovalent.pdf
7.9 MB
Прочитал новую книжку от #cilium про то как надо делать сетевые политики в #kubernetes.
Сначала дают теорию, рассказывают как с 0 организовать сетевые политики, дают пошаговое руководство, потом переходят к практике, но практике сильно урезанной.
Захватывают все свои фишки типа:
- свое переосмысление на чем надо основываться при выборе эндпоинтов (identities)
- избирательный defaultDeny
- hubble UI и cli
- генерацию политик в редакторе
- L3/L4, L7 политики
В целом если вы давно в этой теме - вам эта книжка ничего не даст, если же вы не работали или работали эпизодически с сетевыми политиками (особенно с сетевыми политиками cilium), то рекомендую эту книжку - отличный старт.
👍20
Говорят, в этом канале собрались очень умные люди.
Поэтому поступило предложение рассказать про митап, который устраивает Магнит OMNI и я не нашел поводов отказаться.


23 апреля встречаемся на митапе в Магнит OMNI!

Ивент, на котором инженеры, администраторы и разработчиками обсудят, как сделать инфраструктуру устойчивой к сбоям, как развивать Observability в условиях распределенной инфраструктуры и какие внутренние протоколы помогают, когда все идет совсем не по плану.

🔸 Что будет:
— Спикеры из Магнит OMNI, Лаборатории Касперского, Авито, Cloud.ru и других компаний
— Разбор болей, кейсов и решений, которые работают.
— Розыгрыш призов от Магнит OMNI.
— Живой нетворкинг.

Митап можно посетить:
— Офлайн в московском офисе Магнита,
— Онлайн

📅 Дата: 23 апреля
🕔 Время: 17:30

Не упускайте возможность узнать новое и пообщаться с профессионалами!

Подробности и регистрация — по ссылке.

#OMNI_events

@magnit_omni_team
5🔥3🤩1