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

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

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

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

РКН: https://gosuslugi.ru/snet/6798b4e4509aba565
Download Telegram
Подробное дополнение по Container Security Fundamentals к этому посту т. к. тема интересная и стоит внимания.

Linux capabilities предоставляют процессу подмножество доступных привилегий root. Это эффективно разбивает привилегии root на более мелкие и отличающиеся друг от друга единицы. Каждая из этих единиц затем может быть независимо предоставлена процессам. Таким образом, сокращается полный набор привилегий и снижаются риски эксплуатации.

Читать статью

#туториал
👏2👍1🥰1
🤔 Очередной #дайджест для DevOps-ов

Память как у пингвина — работа памяти в Linux

Strace little book — короткие заметки о том, какие опции и в каких случаях можно использовать

Визуальный редактор для terraform — создавайте свою облачную инфраструктуру без особых усилий с помощью вебморды Brain board

Helm Dashboard — графический интерфейс для управления Helm-релизами в Kubernetes

Нагрузочное тестирование — про нагрузочное тестирование для DevOps-инженеров от Yandex Cloud
😁7👍5🥰5🔥4🎉4
#вопросы_с_собеседования

Как работают сертификаты? Как подтверждается соединение?

Браузер или сервер (клиент) пытается подключиться к веб-сайту (веб-серверу), защищенному с помощью SSL.
Клиент запрашивает идентификацию у веб-сервера.
В ответ веб-сервер отправляет копию своего SSL-сертификата и публичный ключ.
Клиент проверяет, является ли этот SSL-сертификат доверенным. В него зашиты сервера с помощью которых нужно производить проверку, с помощью центров сертификации. Если это так, он сообщает об этом веб-серверу. Генерирует сеансовый ключ, шифрует публичным ключом и отправляет на сервер.
Сервер расшифровывает сообщение и сохраняет сеансовый ключ. Затем веб-сервер возвращает подтверждение с цифровой подписью и начинает сеанс, зашифрованный с использованием SSL.
Зашифрованные данные используются совместно браузером или сервером и веб-сервером.

Этот процесс иногда называют подтверждением SSL-соединения. Хотя по описанию этот процесс выглядит длительным, в реальности он занимает миллисекунды.
18👍13👏2
🧑‍💻 Особенности работы в айти: результаты опроса подписчиков

В декабре мы провели среди вас опрос, изучили результаты и сделали аналитическую статью на vc.ru.

Вот некоторые выводы:

🧔‍♂️ В основном наша аудитория состоит из мужчин — 92,1% опрошенных. Женщин, соответственно, всего 7,9%.
🐍 В ТОП-10 специальностей входят питонисты — их 12,4%. Дата-инженерами или дата-сайентистами себя назвали 3.7% респондентов.
👨‍🎓 25% аудитории — самоучки, у которых нет профильного образования, и они не заканчивали никаких платных курсов.
💲 У разработчиков с опытом менее года преобладают зарплаты до 90 000 рублей (88%). Если опыта 1-3 года, то доля получающих 150 000+ увеличивается до 53,6%.
💰 Опытные и образованные Python-разработчики (15,44%) также входят в шестёрку самых высокооплачиваемых специалистов.

🔗 Полный отчёт можно прочесть по этой ссылке

💬 Пишите, какие ещё подобные материалы вам было бы интересно почитать
👍4👏31
Недавно выяснили, что nginx позволяет нативно писать логи в json формате. Для этого в конфиг nginx.conf нужно добавить такой блок:

log_format nginx_json escape=json '{"time_local":"$time_local", "cloud_ip":"$http_x_real_ip", "ip":"$http_cf_connecting_ip", "connection":"$connection", "request_completion":"$request_completion", "status":"$status", "rtime":"$request_time", "rlenght":"$request_length", "content_type":"$content_type", "content_length":"$content_length", "bytes_sent":"$bytes_sent", "body_bytes_sent":"$body_bytes_sent", "raddr":"$remote_addr", "ruser":"$remote_user","upstream_addr":"$upstream_addr", "upstr_resp_time":"$upstream_response_time", "upstr_cache_status":"$upstream_cache_status", "upst_status":"$upstream_status", "gzip_ratio":"$gzip_ratio", "http_x_forwarded_for":"$http_x_forwarded_for", "proxy":"$proxy_host:$proxy_port", "proxy_int_body_length":"$proxy_internal_body_length", "server_proto":"$server_protocol", "rmethod":"$request_method", "uri":"$uri", "args":"$args", "http_referer":"$http_referer", "uag":"$http_user_agent"}';

access_log /var/log/nginx/access.log nginx_json;
error_log /var/log/nginx/error.log;


Получаем максимальную информацию о клиенте в json формате, которую пробиваем средствами nginx. И теперь все это можно легко скармливать всяким эластикам и т.п. без парсинга и прочего.

Хранить логи в файлах не айс — хорошо бы запихать их в system journal.

Добавим пару строк в nginx.conf и всё логирование будет перенаправлено в system journal.

error_log syslog:server=unix:/dev/log;
access_log syslog:server=unix:/dev/log nginx_json;


А можно комбинировать, писать одновременно логи в файл в дефолтном шаблоне nginx’а и параллельно писать в system journal в json:

log_format nginx_json ...
log_format nginx_default ...

access_log /var/log/nginx/access_json.log nginx_json;
access_log /var/log/nginx/access_default.log nginx_default;


Чтобы посмотреть логи в system journal, воспользуйтесь командой: journalctl -f
👍24❤‍🔥21👏21
🫡🫡 Отладка дедлока FUSE в ядре Linux

Проблема, описываемая в статье, была связана с ndrive — внутренней файловой системой, реализованной с помощью FUSE. Автор расскажет, как он копался в /proc в поисках причины, и узнал, как на самом деле работает wait в ядре.

Читать статью

#гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
25👍6👏1
Самые полезные каналы для программистов в одной подборке!

Сохраняйте себе, чтобы не потерять 💾

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы

#️⃣C#

Библиотека шарписта
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel

☁️DevOps

Библиотека devops’а
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования

🐘PHP

Библиотека пхпшника
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты

🐍Python

Библиотека питониста
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты

Java

Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков

👾Data Science

Библиотека Data Science — полезные статьи, новости и обучающие материалы
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту

🦫Go

Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go

🧠C++

Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++

💻Другие профильные каналы

Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика

💼Каналы с вакансиями

Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности

📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈

🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT

Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *

* Организация Meta запрещена на территории РФ
👍4
🧑‍🎓🧑‍🎓 Лекторий по SRE: Примеры сбоев

Плавное введение в тематику SRE.
Реальные примеры сбоев, которые повлияли на работу целых компаний, и как с этими сбоями работали.

Это целый курс по теории SRE. Пока там 14 видосов от основ, до детектирования и устранения сбоев, построения отказоустойчивых систем и прочего.
В общем — классная вещь! 👍

#туториал
🙏15🤩104👏2
🤔 Очередной #дайджест для DevOps-ов

♦️ Terraform module — Self-Hosted масштабируемые GitHub Actions на AWS

♦️ Рекомендации по масштабированию внедрения AWS SDK в вашей организации — стратегии и лучшие практики для ускорения внедрения CDK в вашей организации

♦️ 8 Лучших советов и хитростей по Docker — VirtioFS, Docker Build cache и прочее

♦️ Bitwarden в действии — автоматизация смены ключей и паролей для AWS

♦️ hadolint — интеллектуальный компоновщик Dockerfile, который помогает создавать Docker-образы
7🥰5😁4👍3🔥3
MinIO Multi-Node Multi-Drive

Объектное хранилище — название отражает принцип работы, хранение данных в виде объектов с уникальным индексом.

Автор расcкажет о своем опыте работы с одним из них, а конкретно о MinIO, из‑за достаточно простой установки, настройки и не плохого функционала. Есть несколько вариантов инсталляции MinIO:

Single‑Node Single‑Drive
Single‑Node Multi‑Drive
Multi‑Node Multi‑Drive

Далее кратко о первых двух и подробно о последнем варианте.

#почитать
4🔥1
🤨🤨 Чем отличается su от sudo?

su «substitute user» — заменить пользователя
sudo «substitute user and do» — подменить пользователя и выполнить

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

Например, мы сидим под пользователем user и хотим войти под John:

user@dev:/$ su john


Будет запрошен пароль, нужно ввести пароль именно от учетной записи john, а не от user.

А вот пример с sudo:

user@dev:/$ sudo -u john whoami


А здесь нужно ввести пароль от учетной записи user, а не от John или рута. Но для этого случая сперва необходимо добавить пермишены для пользователя user в файл /etc/sudoers.

user ALL=(ALL:ALL) ALL


Редактировать этот файл можно по средствам команды visudo. А свалидировать конфиг можно командой visudo -c. Редактирование этого файла через visodu хорошо тем, что если вы допустите ошибку, то при сохранении, оно сообщит о ней.


А для чего нужен дефис после su?

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

Авторизуемся под пользователем user и экспортируем переменную:

ssh user@pc
export a="test"


Теперь у пользователя user есть переменная "a" которая = test.

Переключаемся на пользователя John и смотрим переменную "a"

su john
echo $a


Вывелась строчка test. То есть все что мы задали под user, перекочевало в оболочку john. А теперь добавим дефис:

su - john
echo $a


Переменная $a больше не выводится. Чистая оболочка. Кстати с этим дефисом часто косячат и потом долго не могут понять в чем причина. Переменные вроде были заданы, а потом куда-то пропали.

su (с дефисом) — сначала переключается пользователь, а затем запускается shell, зачищаются все переменные.


su (без дефиса) — переключает пользователя, оставляя переменные окружения старого пользователя.


У sudo есть подобные ключи -s -i

user@pc:/$ sudo -s


Запустится оболочка с правами root

user@pc:/$ sudo -i


Запустится оболочка, но уже с чтением файлов root/.profile/.bashrc и т.п. Можно попробовать добавить экспорт переменной в .profile, сделать sudo -s/-i и увидеть что с ключом -i переменная выведется на экран.

По сути sudo -i = команде sudo su -. Но обычно за sudo su - в приличных местах можно получить по шапке. Это плохая практика! Так как это порождает дополнительный процесс и больше гемора с набором самой команды.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍61🥰1
Чем отличается StatefulSet от Deployment?

Deployment — ресурс Kubernetes предназнваенный для развертывания приложения без сохранения состояния. При использовании PVC все реплики будут использовать один и тот же том, и ни один из них не будет иметь собственного состояния.

StatefulSet — поддерживают состояние приложений за пределами жизненного цикла отдельных модулей pod, например для хранилища. Используется для приложений с отслеживанием состояния, каждая реплика модуля будет иметь собственное состояние и будет использовать свой собственный том.
🔥21🎉14👍51
🤔 Как добавить, использовать и обновить .terraform.lock.hcl без боли

В Terraform 1.4.0 были внесены изменения, которые нарушают прежнее непреднамеренное поведение. Раньше моно было игнорировать lockfile и использовать кэшированных провайдеров, если ограничения версий в коде соответствовали локальному кэшу. Начиная с версии 1.4.0, Terraform всегда проверяет lockfile перед тем, как зайти в каталог кэша. На практике это означает, что если вы проигнорируете файл блокировки или полностью удалите его, Terraform запустит полный init, независимо от того, что находится в вашем TF_CACHE_DIR или в каталоге .terraform.

Более подробно читайте здесь

#гайд
🤩274👍3
🤔 Очередной #дайджест для DevOps-ов

↘️ Stack Lifecycle Deployment — опенсорсный проект, определяющий и управляющий полным жизненным циклом ресурсов, используемых в облаке

↘️ Управление несколькими средами в Terraform — создание каталога для каждой среды и организацию кода инфраструктуры в этих каталогах

↘️ Демистификация OOM Killer в Kubernetes — отслеживание проблем с памятью

↘️ Б значит не Безумие, а Безопасность — кибербезопасность сейчас в тренде, безопасность инфраструктуры и ПО, располагаемого в ней, тоже — об этом и пойдет речь

↘️ 10 советов по управлению крупными инцидентами — просмотрите логи, поковыряйте мониторинг, обратитесь в службу поддержки и т. д.
👍7😁6🎉6👏54
#вопросы_с_собеседования

Что такое контейнеризация? Чем она отличается от виртуализации?

При виртуализации машины создаются с помощью гипервизора и все аппаратные составляющие создаются через него. Затем на него накатываются операционные системы. Соответственно, ресурсы машины будут уходить на поддержание работы запущенной операционной системы.

При контейнеризации аппаратные ресурсы выделяются с помощью ядра операционной системы, и изолируются пространством имен. Следовательно, они потребляют меньше ресурсов, и быстрее пересоздаются.
❤‍🔥33🔥3👍2