Библиотека девопса | DevOps, SRE, Sysadmin
10.4K subscribers
1.79K photos
76 videos
4 files
3.15K links
Все самое полезное для девопсера в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/25874ec4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/6798b4e4509aba56522d1787
Download Telegram
🍪 Топ-вакансий для девопсов за неделю

DevOps-инженер — от 180 000 с гибридом в Москве или на удалёнку.

MLOps\DevOps — удалёнка.

DevOps-инженер — от 250 000 ₽ на удалёнку.

➡️ Еще больше топовых вакансий — в нашем канале Devops Jobs

🐸Библиотека devops'a

#вакансия_недели
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱3👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3
💡 Диагностика сети: IP связность и маршрутизация

➡️ Предыдущая часть

Проверка базовой связности

Интерфейсы UP, ошибок нет — переходим к проверке IP связности. Команда ping — простой и эффективный тест:
ping 8.8.8.8


Google DNS 8.8.8.8 — хороший выбор для теста: стабильный, быстрый, разрешает ping. Если работает — базовая связь с интернетом есть. Если нет — копаем глубже.

Таблица маршрутизации
ip route show


Таблица маршрутизации определяет, куда система отправляет пакеты для разных сетей. Критичная запись — default gateway или маршрут по умолчанию:
default via 10.0.0.1 dev eth0


Это означает: все пакеты для неизвестных сетей отправляются через шлюз 10.0.0.1 на интерфейсе eth0.

Если этой записи нет — связь с внешним миром невозможна. Система не знает, куда отправлять пакеты.

Проверка default gateway

Убедитесь, что gateway находится в той же подсети, что и IP адрес интерфейса:
ip addr show eth0


Если IP 10.0.0.50/24, а gateway 10.0.1.1 — это конфликт. Маска /24 означает подсеть 10.0.0.0-10.0.0.255, gateway за её пределами.

Тестирование шлюза:
ping 10.0.0.1


Пингуем сам gateway. Это локальная сеть, должно работать. Если не работает:

1. Проблема с физической связностью (вернитесь к посту #2)
2. Проблема с ARP (проверьте ip neighbour show)
3. Шлюз недоступен или выключен

Проблемы с ARP:
ip neighbour show


Ищите запись для gateway IP. Должна быть строка типа:
10.0.0.1 dev eth0 lladdr aa:bb:cc:dd:ee:ff REACHABLE


Состояния ARP:
- REACHABLE — всё хорошо
- STALE — запись старая, но рабочая
- FAILED — не удалось определить MAC адрес
- INCOMPLETE — процесс определения не завершён

Если FAILED — gateway не отвечает на ARP запросы. Возможно, он выключен или есть проблемы на L2.

Специфичные маршруты

Кроме default gateway могут быть статические маршруты для конкретных сетей:
ip route show
10.20.0.0/16 via 10.0.0.5 dev eth0


Это говорит: для сети 10.20.0.0/16 используй другой шлюз — 10.0.0.5. Ошибка в таком маршруте может сломать связность с конкретным сегментом инфраструктуры.

Добавление маршрутов вручную

Временно (до перезагрузки):
ip route add default via 10.0.0.1 dev eth0
ip route add 10.20.0.0/16 via 10.0.0.5


Удаление маршрута:
ip route del 10.20.0.0/16


Для постоянных маршрутов редактируйте конфигурацию сети в /etc/sysconfig/network-scripts/route-eth0 (RHEL) или netplan конфиг (Ubuntu).

Traceroute — путь до цели:
traceroute 8.8.8.8


Показывает каждый хоп до цели. Полезно, когда ping не работает — увидите, где именно пакеты теряются.

Если traceroute зависает на определённом хопе — проблема там. Если все хопы показывают * * * — ICMP блокируется firewall.

mtr — улучшенный traceroute:
mtr 8.8.8.8


Комбинация ping и traceroute. Показывает latency и packet loss на каждом хопе в реальном времени. Более информативно, чем обычный traceroute.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🚀 9 способов найти заказы без бирж

Малый бизнес до сих пор не знает, где искать разработчиков. Кто-то спрашивает у знакомых, кто-то ищет на Авито, кто-то пишет в Telegram-чатах. Будьте на их пути — и первые заказы найдутся сами.

➡️ Самые топовые способы в статье

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤨 Прошу, прочти конфиг

Классическая ситуация: вы правите конфиг, применяете изменения, проверяете логи — а там всё по-старому. Приложение просто не знает, что конфигурация изменилась.

Когда под стартует, он монтирует ConfigMap как volume. Kubernetes обновляет содержимое этого volume автоматически, но:

• Большинство приложений читают конфиг один раз при запуске

• Они не следят за изменениями файлов

• Перечитывание конфига в рантайме — это дополнительная логика, которую надо реализовывать

Команда, чтобы конфиг точно перечитался:
kubectl rollout restart deployment <deployment-name>


Никакой магии — просто обычный rolling update, но без изменения версии образа.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#root_prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍1
⚙️ top для systemd

systemd-cgtop — это инструмент из systemd для просмотра топа control groups по использованию CPU, памяти и I/O. Он обновляется каждую секунду и похож на классический top, но фокусируется на группах процессов.

Что показывает top:
PID  USER     CPU%  MEM%  COMMAND
1234 www-data 45.0 12.3 /usr/bin/php-fpm
5678 www-data 32.1 8.7 /usr/bin/php-fpm


Что показывает cgtop:
Control Group          Tasks  %CPU  Memory
/system.slice/nginx 12 78.2 2.1G
/system.slice/postgresql 8 23.4 1.8G
/system.slice/redis 4 12.1 512M


Разница критична: nginx может порождать сотни worker'ов, и в top вы увидите хаос из процессов. В systemd-cgtop — одна строка с суммарным потреблением.

Примеры команд:
# Что тормозит сервер?
systemd-cgtop --order=cpu

# Кто съел всю память?
systemd-cgtop --order=memory

# Кто нагружает диск?
systemd-cgtop --order=io

# Следить только за веб-сервисами
systemd-cgtop | grep -E '(nginx|apache|php)'


Полезные клавиши

В интерактивном режиме:

p / t / c / m / i — сортировка по path/tasks/cpu/memory/io
% — показать CPU в процентах или абсолютных значениях
+ / - — развернуть/свернуть дерево cgroups
q — выход

Если вы используете systemd и хотите понять, какой сервис потребляет ресурсы, а не тонуть в списке процессов — systemd-cgtop ваш инструмент.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#aрсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🥰1
LLM в проде: как мониторить и деплоить агентов?

Разработчики научились писать агентов, но вопрос эксплуатации остаётся открытым. Курс «Разработка ИИ-агентов» стартовал, и в нём мы уделяем внимание не только коду, но и Ops-составляющей.

Что полезного для инженера:

AgentOps: инструменты для трассировки и мониторинга цепочек вызовов;
— безопасность: как избежать инъекций и утечек данных;
— оптимизация: работа с токенами, кэширование и стоимость запросов;
— деплой мультиагентных систем (архитектура, интеграции).

Курс на Python, но понимание принципов работы LangGraph и векторных БД критически важно для современной инфраструктуры.

Записаться на курс

Смотреть первую лекцию
Вопрос с собеса

На собесах спрашивают про лимиты памяти в контейнерах, и знать про --memory хорошо, но нужно вспомнить про --memory-swap.

Вопрос:
Как работает memory-swap в Docker?


Ключевой момент: swap — это не дополнительная память, а ответ в канале с вопросами

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#задача_со_звёздочкой
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🛠 Новый уровень контроля готовности узлов в k8s

В стандартном Kubernetes готовность узла определяется единственным бинарным условием. Это работает для простых случаев, но создает проблемы в прод-окружениях, где узлам требуется множество зависимостей перед запуском подов:

• Сетевые агенты и CNI-плагины
• Драйверы систем хранения (CSI)
• GPU-драйверы и специализированная прошивка
• Кастомные health-проверки и мониторинг агенты

Текущий механизм не позволяет гарантировать, что все эти компоненты работают корректно до того, как планировщик начнет размещать поды на узле.

Node Readiness Controller вводит декларативный механизм управления node taints на основе кастомных условий готовности. Контроллер работает с API NodeReadinessRule, который позволяет определить специфические требования для разных типов узлов.

Коротко о возможностях:

• Автоматическое управление node taints на основе кастомных условий

• Два режима: постоянный контроль или только при инициализации

• Интеграция с Node Problem Detector и кастомными health-check агентами

• Разные правила готовности для разных типов узлов: GPU, storage, standard

• Декларативная настройка через Kubernetes API

Контроллер предоставляет декларативный способ управления сложными многоэтапными процессами инициализации узлов с полной наблюдаемостью через стандартные Kubernetes API.

➡️ Блог разработчиков

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
3
👨‍💻 Дебаг файрволла и фильтрация пакетов

➡️ Предыдущая часть

Маршрутизация настроена правильно, ping gateway работает, но связь всё равно не работает. Вероятно, виноват файрволл. Он может молча блокировать пакеты, не оставляя очевидных следов.

Linux может использовать несколько систем: iptables, nftables, firewalld.

iptables — классическая система:
iptables -L -n -v


Флаги:

-L — list, показывает правила
-n — numeric, не резолвит имена
-v — verbose, показывает счётчики пакетов

Вывод показывает три основные цепочки:

- INPUT — входящие пакеты
- OUTPUT — исходящие пакеты
- FORWARD — транзитные (для маршрутизатора)

Политика по умолчанию:
Chain INPUT (policy DROP)


Policy DROP — всё блокируется по умолчанию, разрешено только то, что явно указано в правилах выше. Безопасно, но легко сломать связность.

Policy ACCEPT — всё разрешено по умолчанию, блокируется только указанное. Менее безопасно, но проще в отладке.

iptables -L -n -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1523 128K DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22


Смотрите на колонку pkts (packets). Если правило с DROP/REJECT показывает большое количество — оно активно блокирует трафик.

В примере выше: 1523 пакета на порт 22 (SSH) были отброшены.

Временное отключение файерволла:
iptables -F  # Очистить все правила
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT


Если после этого всё заработало — проблема точно в правилах. Восстановите их и ищите конкретное блокирующее правило.

firewalld — современная альтернатива:
firewall-cmd --list-all


Показывает активную зону и все правила в ней. Firewalld работает с концепцией зон: public, internal, trusted, dmz и т.д.

Проверьте:

- Какая зона активна для вашего интерфейса
- Какие сервисы разрешены в этой зоне
- Какие порты открыты

Какие зоны активны и на каких интерфейсах:
firewall-cmd --get-active-zones


Добавление правил firewalld

Разрешить сервис (HTTP):
firewall-cmd --add-service=http --permanent
firewall-cmd --reload


Разрешить порт:
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload


Флаг --permanent делает правило постоянным. Без него — только до перезагрузки firewalld.

Если правил много, найти виновника сложно. Добавьте логирование для отброшенных пакетов:

iptables:
iptables -I INPUT -j LOG --log-prefix "DROPPED: "


Теперь все отброшенные пакеты будут логироваться в /var/log/messages с префиксом "DROPPED:".

firewalld:
firewall-cmd --set-log-denied=all


📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Кто будет деплоить и мониторить этих агентов? Вы

Разработчики напишут логику агента, но заставить это работать в продакшене 24/7 — задача инженера. Как мониторить расход токенов, отлавливать галлюцинации в логах и скейлить векторные кластеры?

На курсе мы разбираем не только код, но и инфраструктуру 2026 года. На вебинарах решаем реальные вопросы: как обеспечить безопасность (Guardrails), настроить observability для цепочек рассуждений и упаковать всё это в Kubernetes.

DevOps-составляющая курса:

AgentOps: инструменты мониторинга и трассировки (Tracing).
Deploy: контейнеризация агентов и микросервисная архитектура.
Storage: работа с векторными БД под нагрузкой.
FinOps: контроль и оптимизация затрат на инференс.

Освоить MLOps/AgentOps практики
Продолжать цикл постов про дебаг сетевых проблем
Anonymous Poll
86%
Да
6%
Нет
9%
Наверное
🔄 Последний Linux 6-ой версии

Линус Торвальдс выпустил стабильный релиз Linux 6.19. Это последняя версия 6.x, следующий релиз будет 7.0. Ничего страшного не случилось, просто пофиксили баги.

Что починили и улучшили

• Улучшили драйверы ice и enetc

• Поправили микрофоны на Acer и HP ноутбуках.

• btrfs и ceph не крашатся из-за утечек памяти.

• nouveau и AMD display работают лучше

➡️ Источник

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
📎 Просмотр файлов в терминале

Команда less помогает листать большие текстовые файлы в терминале, не загружая их целиком в память.

Запуск: less filename

Клавиши для движения

• Стрелка вниз/Enter/j – на строку вперёд

• Стрелка вверх/k – на строку назад

• Пробел/Page Down – страница вперед

• Page Up/b – страница назад.

• g – в начало, G – в конец.

Поиск: /текст для поиска вперед, ?текст для поиска назад. n – следующий, N – предыдущий.

Полезные флаги:

• -N – номера строк

-s – сжимает пустые строки

-i – поиск без учета регистра

+F – следит за изменениями, как tail -f

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
🛠 Дебажим DNS

➡️ Предыдущая часть

ping 8.8.8.8 работает, но ping google.com выдаёт "Name or service not known" — это проблема с DNS. Современные приложения используют доменные имена для всего, поэтому DNS критичен.

Файл /etc/resolv.conf:
cat /etc/resolv.conf


Содержит адреса DNS серверов:
nameserver 8.8.8.8
nameserver 8.8.4.4


Если файл пустой или содержит неправильные адреса — резолвинг не работает.

Проверьте доступность DNS сервера:
ping 8.8.8.8
nc -zv 8.8.8.8 53


Порт 53 — это DNS. Если порт закрыт или недоступен — сервер не может отвечать на DNS запросы.

dig — детальная DNS диагностика:
dig google.com


Показывает весь процесс разрешения имени:

• Какой DNS сервер ответил
• Сколько времени занял запрос
• Полученные A записи — IP адреса

Типичные ошибки в dig:

status: NXDOMAIN — домен не существует. Опечатка или домен удалён

status: SERVFAIL — DNS сервер столкнулся с ошибкой. Проблема на стороне DNS

status: REFUSED — сервер отказался обрабатывать запрос. ACL блокирует ваш IP

connection timed out — DNS сервер недоступен. Проверьте firewall

nslookup — альтернатива dig:
nslookup google.com


Проще, чем dig, но менее информативен. Полезен для быстрой проверки.

Проблемы с DNS в контейнерах

В Kubernetes и Docker DNS часто предоставляется внутренним сервисом.

Kubernetes:

• CoreDNS или kube-dns
• Проверьте: kubectl get pods -n kube-system | grep dns
• Логи: kubectl logs -n kube-system coredns-xxx

Docker:

• Встроенный DNS на 127.0.0.11
• Проблемы при неправильной конфигурации сети контейнера

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
🌐 Браузер для маленького интернета

Вышел Offpunk 3.0 — терминальный браузер для Gemini/Gopher/Web с фокусом на офлайн-режим.

Философия: серфинг без отвлекающих факторов, кеширование всего, чтение без интернета.

Главные изменения в 3.0

➡️ Offpunk теперь говорит на нескольких языках:

• Испанский
• Галисийский
• Голландский
• Английский (по умолчанию)

➡️ Новая команда websearch с дефолтом на wiby.me. Wiby.me — это поисковик по старому вебу.

➡️ Социальные фичи

• Команда share — отправить страницу по email.

• Команда reply — написать автору страницы:

➡️ Теперь работают HTTP cookies через команду cookies. Для тех редких случаев, когда они действительно нужны.

🖇 Официальный сайт

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#пульс_индустрии
Please open Telegram to view this post
VIEW IN TELEGRAM
😁 Боб Патчкордли

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#пятничный_деплой
Please open Telegram to view this post
VIEW IN TELEGRAM
😁6❤‍🔥21👍1
🛠 Автоматизация монтирования в Linux

В Linux и Unix-подобных системах файловые системы необходимо примонтировать, чтобы они стали доступны.

Команда mount подключает файловую систему с устройства к каталогу — точке монтирования.

Файл /etc/fstab — сердце автоматизации

Каждая строка файла описывает одну файловую систему с параметрами:

• Устройство: путь, UUID или метка (например, /dev/sdb1, UUID=xxxxxxxx)
• Точка монтирования: каталог назначения (/mnt/data, /home)
• Тип файловой системы: ext4, xfs, ntfs, nfs, cifs
• Опции: defaults, rw, ro, noauto, nofail и др.
• Dump: для утилиты резервного копирования (обычно 0 или 1)
• Pass: порядок проверки через fsck (0 — отключена, 1 — корневая ФС, 2 — остальные)

Пример:
UUID=a1b2c3d4-e5f6-7890 /mnt/backup ext4 defaults,nofail 0 2


Команда mount -a (mount all) монтирует все файловые системы из /etc/fstab, которые:

• Имеют опцию auto
• Ещё не смонтированы

Записи с опцией noauto пропускаются — они монтируются только вручную.

Зачем это нужно

Init-система запускает mount -a, автоматически монтируя все необходимые файловые системы: корневую, /home, /var, сетевые шары.

После правки /etc/fstab не нужно перезагружаться или монтировать всё вручную — достаточно одной команды.

Добавление нового раздела:
# Создаём точку монтирования
sudo mkdir /data

# Добавляем в /etc/fstab
/dev/sdc1 /data ext4 defaults 0 2

# Применяем изменения
sudo mount -a

# Проверяем
df -h /data


mount -a — избавляет от рутины и обеспечивает применение конфигурации монтирования.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#root_prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
👨‍💻 Дебажим доступность портов

➡️ Предыдущий пост

DNS работает, IP связность есть, но сервис всё равно недоступен? Проверяем конкретный порт.

netcat (nc) — универсальный тестер
nc -zv example.com 80


Флаги:
-z — только проверка, без отправки данных
-v — подробный вывод

Результаты:

Connection to example.com 80 port [tcp/http] succeeded! — порт открыт, сервис слушает

Connection refused — порт закрыт, сервис не запущен

Connection timed out — пакеты не доходят, firewall или сеть

Проверьте, слушает ли приложение:

ss -tulpn | grep :80


или старая версия:
netstat -tulpn | grep :80


Должны увидеть строку типа:
tcp   LISTEN  0.0.0.0:80    0.0.0.0:*    users:(("nginx",pid=1234))


0.0.0.0:80 означает слушает на всех интерфейсах. 127.0.0.1:80 — только локально и не доступен снаружи.

Если ничего нет — сервис не запущен или слушает на другом порту.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#арсенал_инженера
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍2
📈 Топ-вакансий для девопсов за неделю

DevOps-инженер — Удалёнка

SRE/DevOps — от 4 000 до 7 000 $. Удалёнка

DevOps Engineer (Стриминг) — от 5 000 €. Переезд на Кипр

➡️ Еще больше топовых вакансий — в нашем канале Devops Jobs

🐸Библиотека devops'a

#вакансия_недели
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤔3