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

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

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

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

РКН: https://gosuslugi.ru/snet/6798b4e4509aba565
Download Telegram
🤔 Очередной #дайджест статей и инструментов по DevOps

✔️ Контейнеры: Rootful, Rootless, Privileged and Super Privileged — различные типы, как они создают свою изоляцию, возможностях ядра, оверлейных файловых системах, seccomp и SELinux

✔️ System Design 101 — рассматриваются протоколы коммуникации, DevOps, CI/CD, архитектурные паттерны, базы данных, кэширование и прочее

✔️ Затраты на микросервисы — как правильно начать создавать микросервис, что учесть и как действовать

✔️ Prometheus и централизованное хранилище — когда вам это нужно, как это работает и что такое Mimir

✔️ Руководство по тестированию в Terraform — поддержание порядка в тестах, валидациях, проверках и политиках
👍183🔥1
🤔✏️ Как надо (и как не надо) разрабатывать REST API

Используйте существительные во множественном числе для обозначения коллекций
Не добавляйте ненужные сегменты пути
Не добавляйте .json или другие расширения к URL-адресу
Не возвращайте массивы в качестве ответов верхнего уровня
Не возвращайте map-структуры
Используйте строки для всех идентификаторов
Применяйте префикс в своих идентификаторах
Не используйте 404 для обозначения «не найдено»
Будьте последовательными
Используйте структурированный формат ошибок

Подробное объяснение с примерами кода тут

#туториал
🔥18👍51
iptables-tracer

Утилита, позволяющая использовать точки трассировки в текущей конфигурации, чтобы отслеживать путь пакетов по цепочкам iptables.

$ iptables-tracer -f "-s 192.0.2.1 -p tcp --dport 443" -t 30s
14:42:00.284882 raw PREROUTING 0x00000000 IP 192.0.2.1.36028 > 203.0.113.41.443: Flags [S], seq 3964691400, win 29200, length 0 [In:eth0 Out:]
14:42:00.287255 mangle PREROUTING 0x00008000 IP 192.0.2.1.36028 > 203.0.113.41.443: Flags [S], seq 3964691400, win 29200, length 0 [In:eth0 Out:]
14:42:00.288966 nat PREROUTING 0x00008000 IP 192.0.2.1.36028 > 203.0.113.41.443: Flags [S], seq 3964691400, win 29200, length 0 [In:eth0 Out:]
14:42:00.290545 mangle FORWARD 0x00008000 IP 192.0.2.1.36028 > 198.51.100.8.443: Flags [S], seq 3964691400, win 29200, length 0 [In:eth0 Out:eth1]
14:42:00.292123 filter FORWARD 0x00008002 IP 192.0.2.1.36028 > 198.51.100.8.443: Flags [S], seq 3964691400, win 29200, length 0 [In:eth0 Out:eth1]
14:42:00.293164 mangle POSTROUTING 0x00008002 IP 192.0.2.1.36028 > 198.51.100.8.443: Flags [S], seq 3964691400, win 29200, length 0 [In: Out:eth1]
14:42:00.293780 nat POSTROUTING 0x00008002 IP 192.0.2.1.36028 > 198.51.100.8.443: Flags [S], seq 3964691400, win 29200, length 0 [In: Out:eth1]
👍11
Что означает 2>&1?

Это про стандартные потоки вывода. Они имеют файловые дескрипторы:

stdout — 1 (общий поток вывода)
stderr — 2 (поток с ошибками)

Получается (2>&1) = stderr > stdout — направляем поток с ошибками, в стандартный поток вывода. Ошибки будут выводиться на экран в терминале.

Логичным было бы сделать конструкцию: 2>1. Но увы, эта схема отработает другую логическую операцию. Поток с ошибками stderr будет писать все данные в файл, у которого название будет 1.

Для этого и требуется указать символ & (амперсанд) перед stdout. Это будет интерпретировано как файловый дескриптор, а не обычный файл.

А почему тогда не &2>&1 ?
Символ & интерпретируется как файловый дескриптор только в контексте перенаправления.

Операция command &2>&1 анализируется так: command & 2>&1 — команда command будет выполнятся в фоновом режиме. А затем начнет выполнятся команда 2 с перенаправлением на стандартный вывод stdout.

Есть альтернатива с оператором |&.

|&
это сокращенный вариант от 2>&1 |

Пример:

script.sh |& tee -a /var/log/script.log

Все что script.sh выведет в потоки stdout и stderr, будет перенаправлено в файл script.log.

В официальной документации можно подробнее изучить эту штуку.
👍28🔥1
#memes

Я на собеседовании
😁11
🧑‍✈️☸️ Kubernetes 1.27: политики pod topology теперь в бета-версии

Распространение Pod-топологии имеет параметр maxSkew, определяющий степень, в которой модули могут быть распределены неравномерно.

Не было способа контролировать количество доменов, на которые мы должны распространяться. Некоторые пользователи хотят принудительно распределить поды по минимальному количеству доменов, и если их уже недостаточно, заставить кластер-автоскалер выделить их.

В версии 1.24 Kubernetes появился параметр minDomains для ограничений распространения Pod-топологии в качестве альфа-функции. С помощью параметра minDomains можно определить минимальное количество доменов.

Например, предположим, что есть 3 ноды с достаточной пропускной способностью, и созданный набор реплик имеет следующие topologySpreadConstraints в своем Pod-шаблоне.

...
topologySpreadConstraints:
- maxSkew: 1
minDomains: 5 # требуется как минимум 5 нодов (поскольку каждая нода имеет уникальное имя хоста).
whenUnsatisfiable: DoNotSchedule # minDomains действителен только при использовании DoNotSchedule.
topologyKey: kubernetes.io/hostname
labelSelector:
matchLabels:
foo: bar


Читать далее

#туториал
🔥3👍2
🔍Вопросы с собеседований и задачи по DevOps

У нас появились новые каналы по DevOps, в которых мы готовимся к собеседованиям и проверяем себя на практических задачках 🚀

Подписывайтесь:
👉Библиотека собеса по DevOps — тут мы готовимся к интервью
👉Библиотека задач по DevOps — тут решаем задачи, проходим тесты и изучаем код
Please open Telegram to view this post
VIEW IN TELEGRAM
6
🧑‍🎓🧑‍🎓 November 2023 FreeBSD Vendor Summit

В начале ноября состоялся ивент, предоставляющий коммерческим пользователям FreeBSD возможность встретиться лицом к лицу с разработчиками и участниками. Была крутая дискуссия по улучшению операционной системы. В программе были выступления от NetApp, Netflix, ARM и других компаний.

Записи видосов:

День 1
День 2

#видео
👍51
🤔 Очередной #дайджест инструментов и полезностей для DevOps

🎯 sshx — безопасный веб-терминал для совместной работы

🎯 eBPF: разблокировка ядра — документалка об истории появления eBPF

🎯 Ansible Semaphore — удобная веб-морда для работы с Ansible

🎯 ttop — инструмент мониторинга системы с историей, триггерами и TUI, похожим на top

🎯 grub2-themes — несколько прикольных тем для Grub2
🤩6👍5🔥4👏4😁4
❗️Мы запускаем серию исследований — и вы можете нам в этом помочь!

«Библиотека программиста» выпустит несколько статей, в которых мы проведем полноценные исследования.

Помогите нам выбрать интересные темы: может быть, вы давно хотели узнать, как изменилась зарплата у тех, кто релоцировался? Или гадаете, сколько лет нужно, чтобы стать миддлом?

Присылайте интересующие вас темы в комментарии — интересные мы возьмем в работу и поделимся с вами результатами 💙
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41
💥🔌 Архитектурные паттерны: Circuit-Breaker

Circuit Breaker предназначен для обнаружения сбоев и инкапсуляции логики предотвращения выполнения системой операции, которая может сбоить. Вместо того чтобы повторно обращаться к службе, которая, вероятно, недоступна, Circuit Breaker на некоторое время останавливает все попытки, давая проблемной службе время на восстановление.

Как это работает

Для предотвращения сбоя, Circuit Breaker состоит из трех возможных состояний, позволяющих системе понять, что случился сбой и отреагировать соответствующим образом:

🔹 закрытое состояние — состояние по умолчанию
🔹 разомкнутое состояние — предотвращение любых запросов к сбойной службе
🔹 полуоткрытое состояние — разрешается несколько тестовых запросов для определения работоспособности и статуса сбойной службы

Подробнее здесь

#туториал
🔥23👍21🥰1
💥⚠️ Рекомендации по безопасности: высокая степень уязвимости Curl

Разработчики curl, популярного инструмента командной строки и библиотеки для передачи данных выпустили релиз 8.4.0 11 октября 2023 года. Эта версия включает исправление для двух распространенных уязвимостей, одну из которых разработчики curl оценивают как «ВЫСОКУЮ» степень серьезности и описывают как «вероятно, худший недостаток безопасности curl за долгое время».

Айдишники CVE:

CVE-2023-38545: переполнение буфера кучи SOCKS5, высокая степень серьезности (влияет как на libcurl, так и на инструмент curl)
CVE-2023-38546: внедрение cookie без файла, степень серьезности НИЗКАЯ (влияет только на libcurl, а не на инструмент)

Подробная информация о том, как используются эти CVE, опубликована вместе с рекомендацией. Разработчик curl опубликовал пост с более подробной информацией о том, как возникла уязвимость в результате конкретной реализации поддержки SOCKS5.

В данной статье объясняется, как можно использовать Docker Scout, чтобы понять, есть ли зависимость от curl в образах контейнеров, а также представлено руководство о том, где была введена зависимость и как обновить curl до версии 8.4.0.

Подробности тут

#гайд
👍42👏2
🧖🧖 System Design 101

Объясняются сложные системы, используя наглядные материалы и простые термины.

Готовитесь ли вы к собеседованию по системному дизайну или просто хотите понять, как системы работают, эта массивная шпаргалка будет полезна. Много полезных тем в сжатом виде — от протоколов до нюансов безопасности.

Шпаргалка

#туториал
6👍1
#вопросы_с_собеседования

Что такое RAID? Какие основные типы RAID существуют?

В работе с дисками есть две проблемы:

✏️ Низкая скорость чтения\записи
✏️ Выход дисков из строя и потеря данных

И это всё решается с помощью технологии RAID — избыточного массива независимых дисков.

Существуют следующие уровни спецификации RAID: 1, 2, 3, 4, 5, 6, 0. Кроме того, существуют комбинации: 01, 10, 50, 05, 60, 06. Существуют аппаратные и программные RAID-массивы.

Программные массивы создаются уже после установки ОС средствами программных продуктов и утилит, что и является главным недостатком таких дисковых массивов.
Аппаратные RAID’ы создают дисковый массив до установки ОС и от неё не зависят.
RAID 0 — чередование
RAID 1 — зеркалирование
RAID 5 — чередование с четностью
RAID 6 — чередование с двойной четностью
RAID 10 — совмещение зеркалирования и чередования
🔥9👍3🌚1
Forwarded from Библиотека программиста | программирование, кодинг, разработка
❤️🙏 Путь к мечте: как инвалидность не помешала стать разработчиком и продолжить борьбу за здоровье

Автор «Библиотеки программиста» Станислав Герасимов, инвалид с детства, делится жизненной историей становления профессиональным разработчиком.

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

🔗 Читать статью
🔗 Зеркало
👍5
Маск навел суеты вокруг ИИ, поэтому и вам предлагаем немного погрузиться в эту тему. Поможет #дайджест бесплатных курсов по ИИ и ChatGPT:

🚀 Генеративный ИИ для всех — как работает генеративный искусственный интеллект и как использовать его в своей жизни и на работе

🔥 Введение в генеративный ИИ от Google — что такое генеративный искусственный интеллект, как он используется и чем отличается от традиционных методов машинного обучения

🔵 Гарвардский курс CS50 «Введение в искусственный интеллект с помощью Python» — учимся использовать машинное обучение на Python

✈️ Знакомство с ответственным ИИ от Google — что такое ответственный ИИ, почему это важно и как Google внедряет ответственный ИИ в свои продукты

👨‍💻 Оптимизируем работу с помощью Microsoft Bing Chat — как Bing Chat может выполнять широкий спектр задач и помочь вам оптимизировать весь рабочий процесс
3👍2
🤔 Что ты такое, dhclient?

Сетевой стек Linux не прост даже на первый взгляд: приложение — в юзерспейсе, а всё, что после сокета, — в ядре операционки. И там тысяча реализаций TCP. Любое взаимодействие с сетью — системный вызов с переключением контекста в ядре.

Один из самых простых протоколов с точки зрения сетевого взаимодействия — UDP 67+68. Это всего четыре сообщения: DHCPDISCOVER, DHCPOFFER, DHCPREQUEST, DHCPACK. И даже не будем усложнять себе жизнь, используя DHCP Relay.

Остальная часть истории здесь

#почитать
❤‍🔥173🔥3👍1