DevOps 413
302 subscribers
17 photos
5 videos
13 links
Опыт инженера изнутри: DevOps-практика, инфраструктура, конференции и карьера в IT

https://youtube.com/@devops413
Download Telegram
Channel created
Привет! 👋
🧩 Обо мне: в IT 8 лет, в DevOps 4 года, до инженера выросла из техподдержки. Без профильного высшего, все знания - самообучение и практика.
Работала в Yota, Skyeng, X5, Т1 💙.

Помогаю начинающим специалистам — менторю:
👉 Профиль на getmentor.dev
Также являюсь ментором в @womenintechrus.

🖼️ О чём посты
• реальные рабочие кейсы
• советы для тех, кто учится DevOps с нуля
• инциденты и разборы из практики
• заметки о карьере в IT

🎥 Дополнительные материалы:
Интервью для Slurm
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥1
В свободное от работы время я помогаю начинающим специалистам начать или продолжить погружение в DevOps.
Вот мой базовый чек-лист, который я даю каждому менти 👇

🧠 1. DevOps как методология
Стоит понимать, какие задачи решает DevOps и зачем бизнесу нужна эта культура. DevOps это методология, DevOps инженер - специалист, который внедряет эту методологию.

⚙️ 2. CI/CD
Теория, чем CDL отличается от CDP.

🐧 3. Linux
Обязательно. Без уверенного владения Linux двигаться дальше тяжело.
🔗 Полезная карта для навигации по темам: roadmap.sh/linux

🕸 4. Сети
Основы, без которых не получится понимать ни контейнеризацию, ни инфраструктуру:
• DHCP
• DNS
• TCP/IP
• NAT
• iptables
🧩 Для практики сетей рекомендую отличный симулятор: miminet.ru

📦 5. Контейнеризация и виртуализация
Важно знать разницу и когда что использовать.

🖼 6. Docker
Минимальный набор для старта:
• docker image
• docker compose
• docker run
• dockerfile
• docker volumes

🧩 Полная карта компетенций DevOps: roadmap.sh/devops

‼️ Главное — практика.
Почти каждый менти, с которым я общалась, отмечал, что без неё теория не усваивается.
Основные инструменты и технологии — это логические абстракции, и пока не “потрогаешь руками”, в голове не складывается картина.

Если этот пост оказался полезным — поставьте реакцию.
Так я пойму, что стоит подготовить подборку практических задач и список отборных статей для самообучения.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍126
👉 Кейс: Мигрируем тома в Kubernetes

Разбираем реальную задачу. Задача для middle и выше: миграция данных между томами в рамках смены CSI.

🎯 Задача: Перенести данные из старого в новый PVC, созданный уже новым CSI-драйвером. Без потерь и с минимальным временем простоя.
Как будете декомпозировать задачу и какие инструменты будете использовать? Предлагаю использовать утилиты pv-migrate и rename-pvc.

🧠 Декомпозиция:

1. Подготовка: Создать новый PVC в целевом хранилище. Убедиться, что поды, использующие старый том, остановлены.
2. Миграция: Перекачать данные из старого PVC в новый.
3. Переключение: "Подменить" старый том новым для рабочей нагрузки.
4. Финал: Протестировать и убрать старые артефакты.

🛠 Инструмент: pv-migrate

Это утилита, которая превращает сложный процесс в одну команду. Её магия в том, что она:
* Автоматически создаёт мигрирующий Pod с доступом к обоим томам (источнику и назначению).
* Сама выбирает стратегию копирования (например, mnt2 — монтирует оба тома в один под и использует rsync).
* Берет на себя: проверки, мониторинг прогресса, очистку за собой.

По сути, вы говорите "скопируй вот этот том в тот", а pv-migrate делает всё остальное. Проще не бывает!

📋 План действий и команды

⚠️ Золотое правило: "7 раз отмерь — 1 раз отрежь". Даже на dev потеря данных — это боль. Не забываем о бэкапах!

1. Останавливаем нагрузку.

kubectl scale deploy -n user-ns app --replicas=0

2. Подготавливаем новый PVC с идентичными labels, используя новый StorageClass.
3. Запускаем миграцию.

NAMESPACE=user-ns
PVC_NAME="app-pv"

kubectl pv-migrate \
--strategies mnt2 \
--source-namespace=$NAMESPACE \
--source=$PVC_NAME \
--dest-namespace=$NAMESPACE \
--dest=$PVC_NAME-new

Ждём успешного завершения. В логах будет виден прогресс.
4. "Переключаем" тома. Переименовываем PVC, чтобы приложение начало использовать новый том.

# Переименовываем старый PVC
kubectl rename-pvc --yes -n $NAMESPACE $PVC_NAME $PVC_NAME-old

# Переименовываем новый PVC
kubectl rename-pvc --yes -n $NAMESPACE $PVC_NAME-new $PVC_NAME

5. Запускаем приложение.

kubectl scale deploy -n user-ns app --replicas=1

6. Проверяем, что под поднялся и данные на месте.
7. Удаляем старый PVC, когда уверены, что он больше не нужен.

💎 Итог

Весь процесс миграции свелся к нескольким командам. Утилита pv-migrate скрывает за собой всю сложность и позволяет делать рискованные операции предсказуемо и безопасно.

Sources: pv-migrate | rename-pvc
👍4❤‍🔥1
🖼️ Docker vs Kubernetes 🖼️

На днях ко мне обратились два инженера — обсуждали автоматизацию деплоя в их организации. После нескольких рекомендаций прозвучал классический холиварный вопрос: Docker или Kubernetes? Когда пора переходить на кубер?

Я вижу, что это до сих пор одна из самых горячих тем на конференциях. И не просто так! Я решила сравнить.

🔍 Ключевым параметры:
Кластеризация
🖼️ Да
🖼️ Да

Сложность настройки
🖼️ Низкая
🖼️ Высокая — требует экспертизы

Автомасштабирование
🖼️ Ручное или базовое
🖼️ HPA, VPA, Cluster Autoscaler

Self-healing
🖼️ Ограниченное (restart policy)
🖼️ Продвинутое (liveness, readiness)

Управление конфигами
🖼️ Docker Configs/Secrets
🖼️ ConfigMaps, Secrets + GitOps

Обновления
🖼️ Через docker-compose / скрипты
🖼️ Rolling updates / Canary / GitOps

Экосистема
🖼️ Ограниченная
🖼️ Огромная (Operators, Helm, CRD)

💰 Что насчёт стоимости?

Ведь DevOps — это в том числе про оптимизацию ресурсов.

Kubernetes:

Легковеснее при правильной настройке, оптимальная утилизация = экономия денег
Дорогой специалист: опытный K8s-инженер стоит 250-400k₽+

Docker:

Дешевле на старте: минимальные требования к инфраструктуре и экспертизе, базовые знания Docker есть у большинства
Хуже утилизация ресурсов: нет динамического распределения, часто "резервируют с запасом", ручное управление: масштабирование и балансировка требуют больше времени DevOps'а

📊 Когда пора переезжать на Kubernetes?

Одной причины недостаточно — это всегда совокупность факторов:
1. Динамическое масштабирование
2. Многокластерность и распределённость
3. Рост команды и процессов
4. Self-healing и Zero-downtime
5. Сложная сетевая топология
6. Compliance и изоляция

⚠️ Когда НЕ нужен Kubernetes?

- Монолит или 2-3 микросервиса без планов роста
- Небольшая команда
- Нет особых/специфичных требований к инфраструктуре

В таких случаях Docker + хороший мониторинг закроют 90% задач без оверинжиниринга.

Согласны?) Узнали? 😬Жду холиварные контраргументы в комментариях!!!👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🔥2🤓1
Обожаю мемасы, но годных айтишных мало, а про DevOps еще меньше 😭
Я наскребла парочку для вас, поделитесь своими 🙏
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9🤣2💅1
Forwarded from Women in Tech (WiT)
5 ноября в 18:00 MSK состоится вебинар на тему «Запуск приложений в Docker»

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

В роли спикера выступит Юлия Брунер:
DevOps инженер в компании T1
Автор телеграм канала об IT @devops413
Ментор

На вебинаре:
👉 Разберем базовые абстракции докера
👉 Соберем образ и запустим свое приложение в контейнере
👉 Разберем частые ошибки и лучшие практики

🔗Подключайтесь по ссылке
🗓 Добавляйте в календарь

Если вам не хватило места в Zoom, подключайтесь к трансляции в Telegram @wit_streams

⏺️ Запись будет

#DataScience #QA #DevOps
9👍2💅2🔥1🏆1👀1
У меня есть несколько идей для
постов, но не могу выбрать. Нужен
ваш совет!🤓
Anonymous Poll
24%
Виртуализация VS контейнеризация
36%
Linux. База
40%
Мои рабочие факапы
45%
Вопросы с собеседований
36%
Kubernetes
👀2🔥1
⁉️Вопросы с собеседований

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

📚 Общая теория
1. Что такое CI/CD? Где заканчивается CI и начинается CD?
2. Чем CDL отличается от CDP, когда какой подход использовать?
3. Чем контейнеризация отличается от виртуализации?
4. Что такое канареечный и blue-green деплои?
5. *Как реализовать zero-downtime deploy?
6. *Назовите четыре золотых сигнала?


🐧 Linux

📁 Файловая система
1. Что такое индексные дескрипторы и какую информацию они содержат?
2. Что такое лимиты и какими они бывают?
3. Разница между hard link и soft link?
4. Как посмотреть открытые файлы?
5. Что происходит при удалении файла, если он открыт другим процессом?
6. Какие типы файлов в Linux вы знаете?
7. Какие права должны быть у файла, чтобы его удалить? (вопрос с подвохом)


⚙️ Процессы
1. Какой процесс в Linux имеет первый PID?
2. Что такое системные вызовы?
3. Как отследить системные вызовы работающей программы?
4. Что такое systemd?
5. Что такое load average?
6. В каких состояниях могут находиться процессы? По каким причинам процесс может находиться в статусе D (uninterruptible sleep)?
7. Что такое зомби-процесс и чем он опасен?


🌐 Сеть
1. Что такое iptables?
2. Как посмотреть открытые порты?
3. Как проверить настройки сетевого интерфейса?
4. Можно ли изменить SSH-порт? Как?
5. Что такое SSH-туннель?
6. *За что отвечает протокол ARP?


🖥️ Bash
1. Что делает пайп?
2. Что возвращает переменная "$?" ?
3. В каких ситуациях может пригодиться xargs?
4. Что произойдёт при выполнении export env=test?
5. Что произойдёт при выполнении source ~/.bashrc? В каких ситуациях использовать?
6. Что делает этот однострочник и каков будет результат?


kubectl get po | awk 'NR != 1 { print $1 }' | xargs -n1 kubectl delete po && echo "done" || echo "no pods"


🖼️ Kubernetes
1. Назовите компоненты control plane и worker нод?
2. Какой компонент запускает контейнеры и управляет их жизненным циклом?
3. Где хранится вся информация о кластере?
4. Чем pod отличается от контейнера?
5. Что такое sidecar и init контейнеры и чем отличаются?
6. Какова разница между PV и PVC?
7. Чем DaemonSet отличается от StatefulSet?
8. Что такое limits и requests?
9. Что происходит, если pod упирается в лимиты по CPU и памяти?
10. Какие есть QoS классы?
11. Какие есть пробы и за что они отвечают?
12. Что такое tolerations и taints?
13. Назовите причины, по которым может не запланировать под?
14. Какова разница между delete и rollout?
15. Что произойдёт, если удалить namespace, в котором висят finalizer’ы?
16. *Как работает VPA и HPA?


🖼️ Docker
1. Чем Dockerfile отличается от образа?
2. Чем отличаются команды COPY и ADD?
3. Чем отличаются команды CMD и ENTRYPOINT?
4. Что такое слои?
5. Что происходит с образом, когда на его базе запускается контейнер? Изменяется ли он?
6. Перечислите практики оптимизации сборки образа (минимум 4).
7. Как вытащить файл из остановленного контейнера, не запуская его?
8. *Как передать пароли/секреты в Dockerfile во время сборки?


Есть еще много специфичных тем, которые варьируются от вакансии к вакансии, но при этом есть общий набор, перечисленный выше 🙂
Собираю свою личную коллекцию вопросов для тех интервью, которые провожу. Если у вас есть классные, нестандартные вопросы - присылайте! 😎
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥6❤‍🔥33
Дорогие коллеги по цеху и подпищеки!
Крайне сердечно поздравляю вас с наступающим 2️⃣0️⃣2️⃣6️⃣ годом!
Зеленых пайплайнов, спокойных дежурств, стоячего прода, легких повышений и исполнения загаданного! Любви, здоровья и деняк!
С последнего поста в канале прошло много времени и этому есть причины. Подводя итоги уходящего года, хочу поделиться своими целями на следущий.👇
За этот год я:
очень много работала: засетапила 10 куб кластеров, мигрировала данные одного CSI на другой, внедрила kubelogin для всех юзеров, внедрила kyverno, пилила мониторинг с нуля, мигрировала монолит в куб, писала автоматизацию для инфры, дебажила, поднимала упавшее, много наставничала на работе и вне и много другого
провела 19 консультаций для начинающих инженеров, вот несколько отзывов с платформы
Общение с Юлией было прямое и открытое, сама она приятная в разговоре и хороший слушатель. Как мне показалось, мы нашли общий язык и в целом время пролетело незаметно. Наметили план, по которому я буду развиваться, а она помогать в исполнении по мере возможности. Мне понравилось, обращусь снова.

Прекрасный человек, настоящий эксперт в своей области. Вдохновляет не испугаться много умных слов, я обходила тему Сетей стороной, думала, что никогда в ней не разберусь сама, но Юлия в меня вселила надежду и что-то даже пошло 🙂 Так что спасибо ей большое, было бы круто, конечно, таких менторов иметь на постоянной основе, даже за денежку, чтобы было прям обучение. Еще раз спасибо ей и платформе!

Огромное спасибо Юле за невероятно полезную сессию! Юля не просто помогла разобрать ошибки, но и доступно объяснила несколько новых технологий (Kubernetes), о которых я только слышал. Чувствую, что мой профессиональный горизонт значительно расширился. Очень мотивирующая и продуктивная встреча! Однозначно рекомендую Юлю как экспертного и отзывчивого ментора.

Понравилось, что ментор была инициативна в разговоре и сама развивала темы. Классно, что она имеет обширный опыт в сфере.

закончила участие в одном потоке Mentor in Tech и сейчас участвую в другом
побывала на классных конференциях и познакомилась с классными инженерами
съездила в Японию 😭😍🫰
относила брекеты
пробежала микромарофон
начала изучать Go
начала вести тг канал 😅
переехала в Москву
нашла новую работу

И вот в связи с последними двумя пунктами в следующем году меня ждут новые приключения 😁
Из новых целей на будущий год я ставлю:
съездить в отпуск
готовиться и попробовать сдать CKA
написать свой оператор
начать свой пет проект
записать подкаст для канала с приглашенным гостем
податься с докладом на конфу
Насчет последнего я, конечно, не уверена🤪, но с остальным точно справлюсь!

С новым годом, друзья!🎉❤️‍🔥🎅❄️☃️🎆
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍10🎉86🔥1👨‍💻1
Media is too big
VIEW IN TELEGRAM
Всем привет!
Перед тем, как мы все ворвемся в рабочую рутину, решила записать небольшое хоум видео и рассказать про свои факапы и рекомендации, как их избежать, чтобы начать год без ошибок ;)
P.S. жду ваши истории 😈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9💅3🔥21
Я тут записалась на инженерную конфу от тинька T-sync conf, новый формат, обещает быть интересным.
Сейчас увидела, что будет хакатон с призом в 500к. Срочно ищу команду 😂😂😂
А вообще мне очень приглянулась программа, интересно узнать какой инцидент будет на разборе, демо по сборке какого то сервиса да и вообще весь блок Observability.
Буду там - пришлю видео отчет :)
👍10🔥3🤔1👀1
Я к вам с небольшим анонсом 👉
В скором времени планирую записать серию подскастов/интервью с практикующими DevOps/SRE инженерами, в которых они расскажут о рабочих реалиях, о трудностях и как они попали в айти.
Из животрепещущих тем будем обсуждать:
- рост
- деньги
- hard & soft skills
- собесы
- личный опыт
Это даст классную возможность для начинающих инженеров узнать про реальную будничную работу без купюр от реального девопса, а не блогера продавана курсов 😭. А для опытных расширить горизонт и понять, как бывает у других, куда можно двигаться и что для этого нужно.

Если у вас есть интересные вопросы или темы, которые вы бы хотели услышать, пожалуйста, напишите их в комментариях 🙏
Please open Telegram to view this post
VIEW IN TELEGRAM
12❤‍🔥6👍4🔥1👏1
Давно не было постов, так как занималась съемками и монтажом первого подкаста-интервью 😳
Готовьтесь к новым порциям интересного контента, не зря же в названии канала http status 4️⃣1️⃣3️⃣

🛠 Дебаг веб сервиса

Проблема:
nginx не отдает метрики по эндпоинту.
Пререквизиты:
есть под с nginx в кубере, есть сервис, который слушает на порту 9000, по этому порту должны быть доступны прометеус метрики по эндпоинту /metrics.
Симптомы:
curl отдает Connection refused. В данном случае refused отдает ингресс контроллер.

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

Первое, что я проверила, основываясь на опыте, — слушается ли приложением порт.
В манифесте пода порт объявлен:
kubectl get po pod -o yaml | grep 9000
# containerPort: 9000

Я решила проверить доступность порта внутри контейнера, и curl вернул 404.
Тут важно понимать, что если вебсервер (в данном случае nginx) вернул 404, это значит, что он получил запрос, но не смог его обработать, потому что для него нет правила.
И здесь это ключевое: значит, что порт слушается, но по этому эндпоинту приложение ничего не отдает, потому что не сконфигурировано.
Дальше стоит идти в настройки вебсервера. 🔍



💥 Сломанный helm релиз

Проблема:
невозможно установить релиз командой helm upgrade.
Пререквизиты:
разработчик сообщил, что он отменил в гитлабе джоб на раскатку релиза helm upgrade в самый разгар выполнения, чуть позже снова запустил деплой, но теперь helm upgrade каждый раз отдает:
Error: UPGRADE FAILED: another operation (install/upgrade/rollback) is in progress

Для тех, кто работает с кубом, это знакомая ситуация, и я сразу знала, в чем причина.
Но мой коллега инженер столкнулся с таким впервые.
Сразу вопрос: что вы знаете о финалайзерах? 🙂

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

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

Чтобы быстро найти тот самый ресурс, я написала простенький однострочный bash-скрипт:
for i in $(kubectl -n ns get all | awk '{print $1}' | grep -v NAME); do if kubectl -n ns get $i -o yaml | grep -q final; then echo $i; fi; done

Команда kubectl -n ns get all даст нам список всех ресурсов в неймспейсе, среди которых мы и будем искать.
Это удобно, когда ищешь иголку в стоге 🙂
В результате выполнения скрипт вернет список ресурсов, в которых нашел финалайзеры.

Ну и как последний шаг — удаляем финалайзер:
kubectl -n ns patch resource --type='json' -p='[{"op": "remove", "path": "/metadata/finalizers"}]'
# вместо resource тут указываете вывод из предыдущей команды

Обычно изучая инструменты и технологии мы узнаем как они должны работать, но не как их чинить. Процесс траблшутинга это то, что развивается только на практике и делает специалиста ценным кадром в команде, к которому идут все за помощью ;)
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍65🔥5