К списку

Как освоить DevOps и не потеряться: ключевые знания и рекомендации

26 сентября 2024

Мы живем в мире, где ваша работа может быть высокооплачиваемой, но при этом никто не видит и не понимает, чем вы занимаетесь. Самое интересное в том, что вы не можете объяснить маме, чем вы занимаетесь, а если в школе вашего ребенка спросят о вашей работе, проще обобщить и сказать, что вы работаете в IT.

Сегодня поговорим о DevOps: как попасть в эту сферу, что нужно знать и о чем мы спрашиваем.

DevOps остается областью, которую многие понимают по-разному, и существует множество мнений о том, чем должен заниматься DevOps-инженер. Одни рекомендуют изучать Linux, другие – Windows, а кто-то советует углубиться в облачные технологии. Знания, необходимые в DevOps, довольно специфичны: можно занять свою нишу с широкими, но поверхностными знаниями, либо с глубокими знаниями в узкой области или технологии. Найти правильное понимание непросто, так как нет однозначного ответа на вопрос, что именно нужно знать и насколько глубоко, чтобы соответствовать требованиям конкретной должности. Многое зависит и от soft skills, так как DevOps также связан с коммуникацией.

На практике компании часто проводят предварительные собеседования (например, демо-интервью) и полные интервью, которые варьируются в зависимости от уровня кандидата. Тем не менее можно выделить основные темы и технологии, знание которых поможет найти работу и оставаться конкурентоспособным на рынке DevOps.

Навыки и знания

Первое, что стоит обсудить – это то, что в 90% случаев DevOps не бывает джуниором. То есть человек может быть джуниором в сфере DevOps, но при этом иметь опыт работы в других областях IT, часто как системный администратор, тестировщик, программист. Если вы хотите стать великим и могучим инженером DevOps с нуля, вам предстоит нелегкий путь.

Давайте составим список того, что нужно знать, а затем углубимся в детали:

  • Базовые знания
  • Сети
  • Облако
  • IaC
  • CM
  • Скриптинг
  • Репозиторий кода
  • Мониторинг
  • CICD
  • Контейнеры
  • Базы данных
  • Операционные системы

Этот список представлен без приоритета для изучения. Нужно просто следовать логике. Если вы учите IaC, без облака не обойтись, так как IaC – это то, что настраивает облако. Если изучаете мониторинг, нужно что-то мониторить: контейнеры в Kubernetes (привет, знание Kubernetes), виртуальные машины (привет, знание Windows и Linux). Если говорим о CICD, нам нужно куда-то деплоить. Целью может быть отдельный сервис в облаке, Kubernetes или виртуальная машина.

Естественно, на интервью нужно видеть и понимать человека. Очень плохо, когда интервьюеры находят слабое место и начинают сыпать солью, задавая один и тот же вопрос 20 раз. Все должно быть прозрачно и спокойно, чтобы человек мог показать себя, но при этом понимал, что это не просто чек-лист, а разговор о том, что он делал.

Базовые знания

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

Сети

Вопрос о необходимости глубоких знаний в сетях остается спорным. Однако даже базовый опыт работы с сетями позволяет специалисту понимать, как функционирует DNS и в чем разница между Application и Network Load Balancer. Некоторые специалисты без труда справляются с задачами динамической маршрутизации, когда такие протоколы, как RIP, EIGRP и BGP, становятся не просто терминами, а понятными инструментами.

Облако

Каждое облако предлагает множество сервисов, и перечислять их все нет необходимости. Инженеру DevOps важно иметь опыт работы с основными сервисами, такими как сети и подсети, виртуальные машины, хранилища, балансировщики нагрузки, управление доступом, интеграция CICD, развертывание PaaS или SaaS, базы данных, а также стандартный мониторинг и оповещения, которые предоставляются большинством облачных провайдеров «из коробки».

Часто задается вопрос: какое облако лучше? Нет однозначного ответа, поскольку облако – это инструмент, который используется в зависимости от конкретной задачи. Важно понимать, подходит ли ваш опыт работы с инструментом под текущие требования. Изучение сразу двух облаков может быть нецелесообразным, но глубокие знания одного облака дадут возможность легко освоить других провайдеров в будущем.

IaC

Terraform, CloudFormation, ARM, Bicep, Pulumi — каждый из этих инструментов имеет свои достоинства и недостатки. Terraform, например, широко используется, но это не делает его идеальным решением – это просто один из инструментов. Важно понимать его основные принципы работы, например, что происходит при выполнении команд init или apply. Также полезно ознакомиться с лучшими практиками организации каталогов в проекте, так как ошибки на ранних этапах могут привести к необходимости переписывать конфигурации с нуля в Terraform.

CM

Этот раздел посвящен автоматическому развертыванию необходимых конфигураций на множество целевых систем. Основные инструменты здесь — Ansible, Chef и Puppet. Важно понимать, как работает каждый из них, включая модель Push/Pull, процесс тегирования целей, использование различных конфигураций и требования для их корректного функционирования. Также необходимо знать, как интегрировать эти инструменты в цепочку CICD для обеспечения непрерывности процессов.

Скриптинг

Необходимо четко понимать, какие инструменты вы используете и почему. Часто можно услышать, что BASH отличается от Powershell или Python только потому, что он предустановлен, но это поверхностное понимание. Если кто-то утверждает, что использует скрипты, возникают важные вопросы: как передаются учетные данные? Как работает с переменными? Как структурируются циклы? Как организовано логирование в скрипте? Возможен ли запуск задач параллельно? Как обрабатываются конкретные ошибки? Это ключевые аспекты, которые нужно знать. Важно помнить: если вы попросили AI написать скрипт и просто запустили его, это не означает, что вы действительно владеете навыками скриптинга.

Контейнеры

Этот раздел считается одним из самых сложных и объемных. Он охватывает множество аспектов, и лишь немногие специалисты могут дать на него исчерпывающие ответы. Все начинается с Docker и создания Dockerfiles, где важно знать лучшие практики написания. После создания образа возникает задача его развертывания, обычно с использованием Helm и Kubernetes.

Основные вопросы, связанные с Helm, включают понимание работы с файлами tpl, которые помогают решать различные сложности при разработке Helm chart. Поскольку развертывание происходит в Kubernetes, необходимо знать, какие объекты используются — Deployment, DaemonSet или другие. Важно уметь описывать развертывание: на какой узел отправляется приложение, какие ресурсы оно потребляет, как оно масштабируется, кто имеет доступ к pod, и как обрабатывается внешний трафик. Умение ответить на эти вопросы свидетельствует о хорошем старте и уверенном движении в освоении Kubernetes.

Базы данных (БД)

Базы данных часто оставляют напоследок. Ранее предполагалось, что для работы с ними необходимо глубокое знание, однако сегодня все стало значительно проще. Облачные провайдеры берут на себя большинство задач: резервное копирование, безопасность, доступность ресурсов, распределение производительности и многое другое. Основные задачи заключаются в настройке базы данных, планировании DRP (плана восстановления после катастроф) и эффективном управлении затратами. При правильном подходе это обеспечит стабильную и оптимизированную работу с базами данных.

CICD

И, наконец, одна из самых интересных и сложных тем в DevOps. На первый взгляд может показаться, что процесс сборки кода и его доставки на целевую систему прост, но на самом деле он требует глубокого понимания. Для настоящего профессионала DevOps важно знать разницу между CD (Continuous Delivery) и CD (Continuous Deployment), понимать принципы CI (Continuous Integration), разбираться в различных стратегиях ветвления и знать, почему канареечный деплой так ценится среди DevOps-специалистов.

Итак, все знания освоены, и наконец наступает долгожданное собеседование в компанию мечты. Уверенность в своих силах присутствует, но первый же вопрос касается того, как кандидат справляется с конфликтными ситуациями в команде или с клиентом. Иногда технические навыки уступают по значимости soft skills, и к этому нужно быть готовым. Важно помнить, что универсальных шаблонов вопросов на интервью не существует, и подготовиться ко всему невозможно.

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

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

Да прибудет с вами DevOps!