DevOps Brain 🧠
1.21K subscribers
127 photos
16 videos
119 links
Пишу про kubernetes, terraform, linux, сети, автоматизации и полезные тулзы. Без спама и щитпостинга.

Хотите пообщаться? @devopsbrain_chat

Автор: @itcaat
Download Telegram
🔖OOM Killer в Linux - press F to pay respects

Когда в Linux заканчивается оперативная память, система стоит перед критическим выбором: зависнуть полностью или пожертвовать одним из процессов, чтобы выжить. За это жёсткое, но необходимое решение отвечает механизм OOM Killer (Out-of-Memory Killer).

Он не убивает процессы случайно. Вместо этого для каждого вычисляется "рейтинг плохости". Процесс с наивысшим рейтингом признаётся наименее важным и подлежит уничтожению. В расчёте участвуют почти все процессы, кроме init и потоков ядра (kernel threads).

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


for p in /proc/[0-9]*; do pid=${p##*/}; [ -r $p/oom_score ] && printf "%4s %5s %8s %s\n" "$(cat $p/oom_score 2>/dev/null)" "$(cat $p/oom_score_adj 2>/dev/null)" "$pid" "$(cat $p/comm 2>/dev/null)"; done | sort -nr | column -t


Нам интересны 1 и 3 колонки, в которых oom_score и PID соответственно. Наш вывод говорит что, если придет oom kill, то первый “на вылет” fail2ban-server.


**700 0 131351 fail2ban-server**
693 0 1254 node
692 0 131649 fwupd


А теперь самое интересное...На самом деле можно принудительно вызывать oom killer командой:


$ sudo echo f > /proc/sysrq-trigger
$ sudo dmesg

[114247.906865] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/fail2ban.service,task=fail2ban-server,pid=131351,uid=0
[114247.906966] Out of memory: Killed process 131351 (fail2ban-server) total-vm:886820kB, anon-rss:19928kB, file-rss:30592kB, shmem-rss:0kB, UID:0 pgtables:628kB oom_score_adj:0


[PRESS F TO PAY RESPECTS] как говорится. Совпадение это или нет мы не знаем. Но я почти уверен, что 10 лет назад один из контибьютов в ядро Linux (mchehab) сделал отсылку к Call Of Duty намеренно. 🤯

Всем хорошей пятницы! А если тебе интересно как именно ядро считает тот самый oom_score - поставь 🔥

UPD: ошибочка вышла - это просто совпадение =(

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22❤‍🔥62
This media is not supported in your browser
VIEW IN TELEGRAM
🔖Kubernetes & terraform starter kit

Ребята, я тут вспомнил что когда-то делал репозиторий для того, что бы можно было пощупать kubernetes+terraform локально прямо в Docker Desktop. Сегодня я его немного причесал и готов показать вам.

Если вам нужна песочница, в которой вы могли бы пощупать IAC и кубер, то забирайте тут https://github.com/itcaat/terraform-kubernetes-desktop-startkit

Внутри:
• Ingress Nginx
• cert-manager выпускает валидные TLS-сертификаты локально
• echo-сервис для экспериментов

Это не продакшн-решение. Это учебная песочница, чтобы понимать, как оно работает под капотом, а не просто читать. А полноценный гайд по использованию есть в readme.

---
Telegram | Github | YouTube | X | 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1342
Нашёл интересный опенсорс-инструмент для тех, кто живёт в Proxmox / Docker / Kubernetes. Это такой “single pane of glass”.

• Инфра, ворклоады, бэкапы, сторидж – сгруппировано по задачам, а не по источникам.
• Алерты Slack / Discord / Telegram / Email из коробки.
• Есть персистентное хранение истории с retention.
• Нормальный визуальный обзор бэкапов.
• Можно подключить AI и задавать вопросы по инфраструктуре.


docker run -d \
--name pulse \
-p 7655:7655 \
-v pulse_data:/data \
--restart unless-stopped \
rcourtman/pulse:latest



Это не замена полноценному продовому мониторингу уровня большой компании. Но как операционный обзор + AI-ассистент по инфраструктуре – выглядит очень прикольно.

Live Demo: https://demo.pulserelay.pro
Repo: https://github.com/rcourtman/Pulse

---
Telegram | Github | YouTube | Twitter
🔥63❤‍🔥2
🎮 Выкатил симулятор закрытых задач iKanban

Ну его нафиг, эту улицу с -14 “за бортом”. Всё утро с кофе и ноутом: допиливал пет-проекты и новую браузерку до состояния “не стыдно показать людям”.

Идея родилась на работе, когда мы с коллегами обсуждали, что кайфово когда задачки закрываешь. Мозг же реально выдает дофамин, когда задача уходит в DONE. Получается, что мем "Секс – это круто, но пробовали ли вы закрывать таски?" – уже не шутка, а жиза.

Поэтому я собрал игру, где вы:
• Выбираете персонажа (DevOps, SRE, Backend, Frontend)
• Получаете тонны абсурдных задач
• Хватаете дофамин от их выполнения
• Угараете в чате над виртуальными коллегами и залипаете кайфовую музыку

Залипать сюда 👉 https://t.me/ikanban_bot?startapp или просто на https://ikanban.ru.

P.S. Если что-то пойдет не так или захочется поругать – велкам в комменты. Похвала тоже принимается. А если хотите чтобы я рассказал в следующих постах как быстро поднимать микро-продукты – то ставьте 🔥.

---
🚀 Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18😁1
Простите, после обеда не могу больше работать. У меня кошка заблокировала ноут. 😁
❤‍🔥20
This media is not supported in your browser
VIEW IN TELEGRAM
🔖Полезные TUI тулзы snitch

Нашел htop для сетевых соединений - назвается snitch.

Открываешь и сразу понятно:
• кто слушает порт
• какой PID
• какой процесс
• какие соединения висят в established
• куда сервис вообще ходит
• можно прибить прямо из интерфейса

Также можно фильтровать TCP/UDP, отдельно LISTEN, отдельно ESTABLISHED, искать, сортировать.

Ставится "изи-пизи":


brew install snitch

или


go install github.com/karol-broda/snitch@latest


Забрать тут: https://github.com/karol-broda/snitch

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11😁21
Информации стало слишком много и нужно что-то с этим делать. Сколько у вас там сохранных статей и видео, которые вы скорее всего никогда не прочитаете и не посмотрите?

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

И проблема даже не в том, что мы плохие и ленивые - дело в контексте. Мы думаем да - это классная статья, я сохраню и потом прочитаю. Но когда настает время прочитать появляется другая классная статья. А через какое-то время еще и еще… А ваш контекст уже переключился на что-то другое и вот в вашей коллекции еще один артифакт.

А что по поводу внезапных идей? Мы идем по улице и БАЦ к вам приходит какая то мысль: это может быть какое улучшение, новый сервис или вы поняли как решить проблему, которую не могли решить уже несколько дней. Хочется куда записать… В голосовухи? В телегу в Saved Messages который итак уже скоро разорвет от хаоса внутри? Короче, это боль. Я умею структурировать данные, я просто не хочу больше это делать. Мне надело быть “оператором ЭВМ” (в 90-е была такая профессия кстати).

И вчера вечером я немного завис над созданием Telegram-бота в роли персонального мультиагентного асситента с памятью о всех переписках и данных которые в него попадут. Я хочу мини-монстрика, в который кормишь просто любую инфу, узкопрофильные вопросы (например по автомобилю, бизнесу, ветеринарии для кошки и тд), свои календари, внутренню базу знаний и оно автоматом все структурирует. Пока цель MVP просто кидаю текст, голос, ссылку или документ в pdf формате в бота и потом могу обращаться через бота к этим данным, например также отправив голосовуху: “Напомни мою идею про то как починить прод =)”. А еще сразу хочу, чтобы если мог попросить ответить голосом, на случай если я за рулем, то оно слало голосовуху.

Почему не взять готовые инструменты? Не хочу. Да, вот так тупо. Мне интерсно поковыряться в векторных базках и построить что-то сложное на базе n8n. В итоге поставил selfhosted n8n + supabase на тестовую вмку где-то в Нидерландах, что бы накрутить MVP и сразу получил в бубен по утилизации =)).

Ну и вопрос к вам - вы как у себя решаете эту проблему структурирования информации и сколько оно отнимает у вас времени и сил?

---
Telegram | Github | YouTube | Twitter
🔥16❤‍🔥3😁2
В продолжении вчерашнего поста про идею создать себе AI-ассистента на базе telegram+ n8n…Решил немного поделиться с вами к чему я пришел и где я продолбался.

👏 Скажу сразу у меня получилось собрать MVP. Из плюсов – оно работает и у меня уже есть какой-то базовый ассистент. Я могу в него голосом говорить, фотки документов отправлять (кстати надо добавить туда юриста) через телегу, могу сохранять ссылки, создавать события в календаре, есть финансовый консультант и даже DBA/Sysadmin/Sre и сетевик в одном лице =) И это ОФИГЕТЬ КАК УДОБНО!

Первым делом я выпилил selfhosted supabase (нафиг он нужон то был?!) и воткнул обычный postgres + vector extension. И теперь моей виртуалочке не так больно, а то load avarage в 178 это было жоска. Ну и прикрутил туда cloudbeaver, чтобы в базку ходить и запросики выполнять. Избыточно, но просто давно хотел посмотреть на веб-версию dbeaver.

✍️ Дальше нарисовал схемку бд со слоями памяти:

conversations (рабочая память) – всё что я говорил и что отвечал ассистент. Используется для контекста текущего и прошлых разговоров. С вектором embedding можно семантически искать релевантные прошлые сообщения.

user_rules(правила пользователя) – это для оркестратора. Если ассистенту сказали “Запомни, меня надо называть МОЙ ПОВЕЛИТЕЛЬ”, то он будет так обращаться. Еще для примера можно сказать “Запомни, всегда отвечай кратко”. Суть вы поняли – через эту штуку можно корректировать поведение.

agent_memories(память конкретных агентов) – это отдельный слой, который ты спрашиваешь. Каждый агент (путешественник, финансист, айтишник и т.д.) хранит свои наблюдения о пользователе – например, психолог запомнит "у пользователя тревожность по поводу работы”.

По итогу был о накручено некоторое количество ворклошек в n8n. К счастью тут мы ограничены только нашей фантазей, так как агенты со специализацией это по сути копипаста. И мы можем уже на их основе добавлять новых агентов-специалистов.

☔️ Ну а теперь где я продолбался. И это (барабанная дробь …) single-hop архитектура. Я протупил в самом начале и теперь оркестратор выбирает одного агента и на этом цепочка заканчивается. Таким образом агенты изолированы – ни один из них не может вызвать другого.

Разберем на реальном примере: "Найди когда нам надо на прививку коту и создай запись в календаре". Orchestrator может выбрать только одного. Если выберет Ветеринара – тот ответит датой, но не создаст событие. Если выберет Календарь – у него нет знаний о прививках. А это явно не то что хочется получить в конце.

Система полностью stateless, нет multi-turn диалога. Если я попрошу создать в календаре событие – агент просто это сделает. Он не проверяет, свободно ли 15:00. По хорошему надо добавить (добавить List Events перед Create) и агент должен сказать: "В 15:00 занято, создать всё равно?". Принять следующее сообщение "да" / "нет" / "тогда в 16:00" в контексте этого вопроса и действовать от этого. Что бы это решить надо pending_actions табличку чтобы контекст не терялся. Ну и прикрутить какой то таймаут для контекста.

Короче, получается как в известном меме: “Миша, всё … – давай по новой” (с)

PS И ребят, если вам интересно что в итоге получится – пролайкате пост 😕, мне хочется понять, что небольшой перекос в продуктовые эксперименты вам тоже ок.

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥43😁4
🔖 Приватная сеть в ZeroTier за пару минут

Ребята, решил я недавно поиграться с Dokploy в рамках экспериментов n8n и AI-ассистента. Ну и пока настраивал, заодно решил показать вам ZeroTier.

ZeroTier – это сервис, который позволяет объединить устройства через интернет так, будто они находятся в одной локальной сети.

На самом деле очень крутая штука, тем более что в рамках free-тарифа можно добавить до 10 устройств. Таким образом у нас будет крутая overlay-сеть и мы можем изи-пизи объединить все наши VPS, ноутбуки и телефоны. И самое главное, что будет не важно, что они сидят за NAT. А вся настройка отнимет у вас минут 10:

1. Регаемся на сайте https://www.zerotier.com и прыгаем в личный кабинет.

2. Там создаем новую сеть. Cохраняем себе Network ID. Он понадобиться чтобы к сети присоединиться. У меня это 3b19b3a716137783.

3. Идем на страницу загрузки клиентов https://www.zerotier.com/download. Копируем команду установки и ставим на VPS сервер:

curl -s https://install.zerotier.com | sudo bash


4. Теперь подключимся сразу к новой сети pets. После выполнения получите 200 join OK.


sudo zerotier-cli join 3b19b3a716137783


5. Переходим в админку в нашу сеть pets и авторизуем клиента.

6. Теперь я добавлю локальную машинку. Качаю клиента под свою ОС чтобы оказаться в приватной сети с VPS. Там ввожу Network ID для подключения и делаю апрув в админке.

7. Zerotire нам выдаст рандомный ойпешник в приватной сети. Давайте слегка это исправим. Нырнем в админке в устройство 8b26a132b7 (это VPS) и пропишем в Managed IPs красивый ойпешник 10.75.142.1.

На этом базовая настройка завершена. Устройства будут видеть друг друга в рамках приватной сети 10.75.142.0/24.

Но для большей безопасности и удобства (иначе зачем это всё?) надо настроить firewall. У меня стоит Dokploy, поэтому я хочу сделать открытыми порты 80 и 443. А всё остальное будет открыто только в сети ZeroTier. (ens3 - это внешний интерфейс на VPS, zt+ - это интерфейсы ZeroTier)

8. Подключимся к VPS 10.75.142.1ЭТО ВАЖНО и забекапим текущие правила на всякий.

iptables-save > /root/iptables.backup.$(date +%F_%H%M).rules


9. Закрываемся от мира. Обратите внимание – после применения этих правил доступа к ssh по внешнему интерфейсу не будет. Но так и задумано!


# Сначала базовые allow (в начало)
iptables -I INPUT 1 -i zt+ -j ACCEPT
iptables -I INPUT 2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT 3 -i lo -j ACCEPT

# Публично только 80/443 через ens3
iptables -I INPUT 4 -i ens3 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT 5 -i ens3 -p tcp --dport 443 -j ACCEPT

# Всё остальное входящее — DROP
iptables -P INPUT DROP

iptables -F DOCKER-USER

# Разрешаем ответы
iptables -A DOCKER-USER -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# ZeroTier полный доступ
iptables -A DOCKER-USER -i zt+ -j ACCEPT
iptables -A DOCKER-USER -o zt+ -j ACCEPT

# Контейнерам можно инициировать соединения наружу
iptables -A DOCKER-USER -i docker0 -j ACCEPT

# Снаружи (ens3) только 80/443
iptables -A DOCKER-USER -i ens3 -p tcp --dport 80 -j ACCEPT
iptables -A DOCKER-USER -i ens3 -p tcp --dport 443 -j ACCEPT

# Остальное снаружи в docker — DROP
iptables -A DOCKER-USER -i ens3 -j DROP

iptables -A DOCKER-USER -j RETURN


Установим iptables-persistent и сохраним правила, чтобы не отрыгнуло после ребута


apt-get update && apt-get install -y iptables-persistent && netfilter-persistent save


В итоге мы получаем приватную сеть с нашими девайсами, которые видят друг друга напрямую. А для внешнего интерфейса открыт только 80 и 443 – в моем случае это Traefik в docker. И теперь на VPS если я сделаю гадость вот так:


docker run -d --name my-redis -p 6379:6379 redis:latest


То порт 6379 будет доступен только в приватной сети:


$ nmap 138.124.75.165 -p6379 -PN
PORT STATE SERVICE
6379/tcp filtered redis

$ nmap 10.75.142.1 -p6379
PORT STATE SERVICE
6379/tcp open redis


ZeroTier подходит и для более сложных кейсов. Но это уже другая история...

А статью со скриншотами можно почитать тут.

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥8🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
🔖Полезные TUI тулзы termshark

Иногда кажется, что сообщество просто постепенно переписывает весь GUI в терминал 🙂

В продолжении цикла постов про крутые TUI-тулзов сегодня на очереди инструмент termshark. Это по сути Wireshark в терминале.

Что умеет:

• открывать pcap-файлы
сниффить интерфейсы в реальном времени
• использовать display filters из Wireshark
• смотреть TCP/UDP стримы
• анализировать network conversations по протоколам
• копировать диапазоны пакетов прямо из терминала

Работает это всё через tshark, так что под капотом тот же Wireshark-движок. Особенно удобно, когда ты сидишь на удалённом сервере, а рядом лежит pcap на пару десятков гигабайт, и идея тащить его к себе через scp выглядит сомнительно.

Просто скармливаешь pcap и спокойно разбираешь трафик прямо по SSH:


termshark -r dump.pcap


https://github.com/gcla/termshark

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8😁21
Не смотря на то, что ИИ вылез уже из каждой дырки, а важность знаний обесценивают с каждым днем – я считаю, что чтение хороших книг дает тот самый важный фундамент, на котором может и должна строиться карьера инженера.

Пусть все говорят «можно спросить у ИИ». Но это как списывать решения, не понимая, как они получены. Книга в первую очередь заставляет думать. Медленно, местами больно, иногда с возвращением назад и перечитыванием.

Но именно в этот момент и происходит магия🪄формируется мышление. Не просто набор ответов, а способность задавать правильные вопросы, видеть причинно-следственные связи и понимать, где у решения границы применимости. Так что ИИ – это ускоритель. Книги – это база. Без базы ускорять нечего.

Я тут подумал – давайте разыграем одну из книг, которые лично мне помогали формировать ту самую базу. Единственное, что мне надо будет чуть времени, чтобы разобраться как делают розыгыши в телеге. А пока выберите какую книгу – через пару минут я скину голосовалку :loading:

• «Высоконагруженные приложения. Программирование, масштабирование, поддержка» — Мартин Клеппман.
• «Site Reliability Engineering. Надежность и безотказность как в Google» – Б. Бейер, К. Джоунс, Дж. Петофф, Н. Р. Мёрфи.
• «Основы инженерии данных» – Джо Райс, Мэтт Хаусли.
• «Распределенные данные» – Алекс Петров.
• «System Design: подготовка к интервью» – Алекс Сюй.
• «System Design: пережить интервью» – Чжиюн Тань.
• «Чистая архитектура. Искусство разработки программного обеспечения» – Роберт Мартин.
• «Семь баз данных за семь недель» – Эрик Редмонд, Джим Уилсон.

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9❤‍🔥6
Отпуск закончился, а вместе с ним и семейная поездка в Шанхай. Хочу поделиться с вами фотографиями и поделиться нюансами, если вы тоже решите туда сгонять. Long story short: “стоит ли туда вообще лететь? Однозначно да!”.

💳 Обязательно ставим AliPay. Я регистрировался просто по email, так как SMS не приходила. Вообще alipay must have в Китае. Вы сможете там и на наличку жить, но это очень неудобно. Например, меню большинства рестиков это qr-код на столе. Сканите прямо в alipay, закаываете, тут же платите и заказ приносят. Обязательно пройдите KYC. В интернетах есть инструкции.

Бабки загонять можно через крипту p2p в приложении HTX. Процесс максимально простой: переводите свою крипту на кошелек в HTX и дальше просто выбираете CNY → Размещаете ордер → Кидаете свой QR в чат с покупателем → Он вам переводит на алик, а вы подтверждаете получение. Ни разу не подводило.

🏝 Обязательно ставим trip.com. Супер нужное приложение для путешествия по Китаю и не только. Там вы можете за рубли купить ESIM, билеты на любые достопримечательности, поезда, авиабилеты, выставки. Также вы сможете почитать опыт других путешественников. Это такой комбайн с соцсетью внутри - прям мастхев.

ESIM активируйте до вылета в Китай. Там конечно будет WIFI в аэропорту Шанхая, но мало-ли - лучше сделать заранее. И включите роумнинг на esim, а то я затупил и ходил ругался что ничего не работает. =)

Также за день до вылета заполните арривал кард. В принципе можно и прилету сделать, но в домашней обстановке как то поспокойнее.

Я не буду описывать все достопримечательности - их вы найдете на том же trip.com, где и сможете себе выбрать что-то по душе от зоопарков до прышков с парашютом. Кстати, там же я рассказал как можно прокатиться на беспилотном такси.

🎧 В общем - не забывайте ходить, ездить или ползти в отпуска. А то тут видел недавно твит: чел радовался айфону в качестве компенсации, что он 2 года в отпуске не был.

А мой отпуск всё и я побежал делать свои задачки и пойду готовить для вас интересные посты. Кстати книгу скоро разыграем тоже - я помню =)

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17