Дорожная карта DevOps-инженера в 2024
В условиях быстро развивающейся и меняющейся IT индустрии, где важна гибкость и надежность, роль DevOps-инженера становится все более востребованной. Данная профессия является одна из самых оплачиваемых и соответственно, нужной. Согласно Хабр Карьере средняя зарплата DevOps-инженера на 2024 год составляет 225 тысяч рублей. Согласно Head Hunter даже Junior зарабатывает около 100 тысяч рублей, а продвинутые специалисты могут получать от 250 до 400 тысяч рублей. И спрос будет в ближайшие годы только расти.
DevOps-инженеры – это многопрофильные специалисты, которые умеют автоматизировать процессы, настроить стабильную работу сервера. Им также требуется знать некоторые языки программирования, умение осваивать сложные инструменты и иметь навык Problem Solving (как не теряться перед незнакомой проблемой).
Именно из-за сложности изучения и большого стека технологий так много вакансий и так мало откликов действительно ценных специалистов. Ведь DevOps-инженер занимается не только серверной частью или программированием – эта профессия затрагивает также других специалистов, такие, как разработчики, тестировщики, системные администраторы, то есть, позволяет им вместе работать быстрее и эффективнее за счет автоматизации. Роль этой профессии является стратегической в процессе развертывания и эксплуатации современных ИТ-систем.
В этой статье мы рассмотрим подробно, что должен знать DevOps-инженер, составим дорожную карту, и расскажем, как устроиться на работу. В условиях постоянно ускоряющихся темпов развития цифровых структур, многие организации нуждаются в таких специалистах.
Согласно нашему определению, DevOps-инженер – специалист, который внедряет методологию эффективной совместной работы нескольких сфер (такие, как серверное программирование, QA и администрирование серверов) в процесс работы. Можно сказать, что эта специальность абстрактная, т.к. нет четко обозначенных границ знаний.
DevOps-инженер, косвенно или нет, отвечает за следующие этапы работы:
- Этап планирования. Какая будет архитектура проекта, как настроить его масштабируемость, определение метрик для оценки эффективности.
- Следующим шагом является настройка и администрирование серверов. Эта часть работы включает в себя развертывание и конфигурирование серверной инфраструктуры, установка и настройка необходимого системного ПО и самой системы, а также обеспечение безопасного вывода в продакшен и проверка среды.
- Автоматизация CI/CD. Continuous Integration/Continuous Delivery – это одна из практик в DevOps, подразумевающая непрерывную интеграцию и доставку. Ее цели – обеспечение последовательного и автоматизированного способа сборки, упаковки и тестирования продуктов или приложений.
- Тестирование и мониторинг. Данный этап представляет собой разработку систем мониторинга производительности и доступности, а также всевозможное тестирование.
- Взаимодействие с обратной связью от пользователя. Цель этапа – внедрять улучшения в проект.
- Решение других задач, которые позволяют анализировать эффективность разных рабочих процессов, наладить систему работы других сотрудников сферы IT.
Но почему разработчики разных этапов не могут просто работать отдельно, а после синхронизировать? Проблема возникает в том, что у каждого свое окружение, и то что работает у одних, может не работать у других. Все тратят время на решение багов, проблем совместимости и синхронизацию компонентов. Здесь и нужна профессия DevOps-инженера – тот, кто поможет всем общаться, настроить совместную работу.
Конечно данный план – идеальный проект, но таких, к сожалению, мало. Есть многочисленные проекты, где мониторинг отваливается, процесс обновления громоздкий, этап планирования был пропущен или сервера используют потенциально уязвимое ПО. И тогда задача DevOps-инженера – решить все (или хотя бы часть) существующих проблем, сделать так, чтобы все работало, и непрерывно работало и обновлялось.
Как говорит старая английская пословица – “Time is money”, время – деньги. В контексте бизнеса и IT инфраструктуры это правда. Сколько бизнес потеряет денег, если вдруг, из-за плохого тестирования или CI/CD упадет сервер? DevOps-инженер как раз и нужен для решения таких проблем.
Ключевые навыки DevOps-инженера
Научиться быть DevOps-инженером с нуля невозможно, требуется технический бекграунд. Желательно программистом или системным администратором. Но надо понимать, что DevOps-инженер не является конкретно разработчиком, сисадмином, тестировщиком или аналитиком. Но он обязан знать некоторые вещи – минимум два языка программирования, например Python и Bash, уметь работать с базами данных и серверным ПО, а также собирать данные и анализировать их для добавления фич в продукт.
Вкратце, ключевые навыки следующие:
- принципы и теорию разработки ПО, чистую архитектуру;
- инструменты совместной работы с кодом – Git;
- системное/серверное администрирование;
- виртуальные контейнеры и работу с ними – Docker и Kubernetes;
- базы данных — реляционные и нереляционные;
- системы управления конфигурацией серверов — Ansible (IaC, инфраструктура как код);
- сбор данных по нагрузке и ошибкам во всех системах.
- разбираться в системном администрировании Linux.
- уметь настраивать локальные сети и управлять ими, разбираться в сетевых технологиях;
- владеть базовыми навыками программирования, понимать общие принципы, разбираться в цикле разработки продукта. Уметь писать скрипты, например, на Python;
- знать технический английский, чтобы искать ответы на вопросы в зарубежном интернете: поскольку сфера новая, найти их на русском не получится;
- Уметь строить инфраструктуру в облаке и знать, как её настраивать и работать с ней.
- Уметь настраивать непрерывный конвейер доставки кода с помощью инструментов CI/CD, например Jenkins.
- Разбираться в управлении версиями кода с помощью GitLab.
- Знать языки разметки JSON и YAML.
- Уметь настраивать мониторинг системы для обнаружения ошибок, например с помощью Prometheus.
- Участвовать в тестировании и приемосдаточных испытаниях релиза.
- Взаимодействовать с продуктовыми и инфраструктурными командами.
В DevOps также нужно знать следующие инструменты:
- Инструменты администрирования: Puppet и Chef
- Kafka — сервис, который позволяет мгновенно передавать сообщения между разными системами
- Облачные платформы: Google Cloud, Microsoft Azur
- CI/CD: Microsoft GitHub, Atlassian Jira, Confluence, Red Hat Ansible, Prometheus и Jenkins.
Именно поэтому даже за Junior’а платят хорошо, потому что DevOps-инженер комбинирует в себе несколько сложных навыков. С некоторой точки зрения, DevOps-инженер это даже не профессия, а специальная методология, которая позволяет бизнесу создавать проекты, которые будут работать “вечно”, а также взаимодействовать разным специалистам.
DevOps-инженер позволяет разработчику не придумывать как развернуть приложение на тестовой среде, как эту среду вообще поднять (а ведь очень важно чтобы тестовая среда была всегда точно воспроизводима), как точно быть уверенным, что код не содержит уязвимостей и отвечает заданной стилистике, как загрузить приложение чтобы его мог скачать клиент и прочее, прочее, прочее…
Если в команду взяли нового, молодого разработчика, то он сразу не сможет вклиниться в разработку и погрузиться в продукт и инфраструктуру, чтобы делать все выше перечисленное на нужном уровне. Здесь и поможет автоматизация, которая минимизирует появление ошибок
Также DevOps-инженер должен иметь развитые soft skills и hard skills. Это особые умения, которые помогают расти вашей карьере. Hard skills – это как твердый фундамент и стены дома, они необходимы для входа в профессиональный мир, для выполнения прямых рабочих задач. К hard skills относятся те умения, которым можно научиться за определенное время, а их эффективность измеряется результатом проделанной работы. Это устойчивые навыки, четко обозначенные работодателем, входящие в список требований к работнику и должностные инструкции.
А вот Soft skills это умения, которые не связаны с профессиональными навыками, но очень полезны для коммуникации с людьми и решения жизненных задач. Они играют важную роль в дальнейшем продвижении, помогая преодолевать препятствия и эффективно работать в команде. Программист с отличными техническими знаниями может столкнуться с трудностями, если у него не развиты навыки коммуникации и командной работы.
DevOps инженеру, в принципе, как и остальным специалистам, требуются как и “твердые”, так и “мягкие” навыки.
Если подвести итог, то каждый DevOps инженер должен знать:
- разработку, языки программирования;
- операционные системы, в частности linux;
- облачные технологии;
- микросервисы (как работают контейнеры, досконально знает Docker и Kubernetes);
- как управлять конфигурацией нескольких серверов с помощью Ansible.
- логгинг, мониторинг состояния серверов и анализ метрик;
А сам подход можно описать так:
- все что можно автоматизировать нужно автоматизировать;
- каждый разработчик использует один и тот же софт и конфигурации;
- код должен обновляться плавно, быстро и без багов, чтобы клиенты не заметили самого процесса обновления;
- единая рабочая среда для тестирования, разработки продукта и его релиза.
DevOps, и в особенности профессия инженера – невероятно сложная специальность. Человек выступает неким “мультитулом” и центром работы проекта. Это тот профессионал, который предложит улучшение там, где другие айтишники просто проигнорируют. За такую сложную работу платят до 400 тысяч рублей, а может где-то и больше, но требуется колоссальный объем знаний и опыта. А также эта профессия влечет за собой высокую ответственность.
Дорожная карта
Для изучения сферы DevOps-инжиниринга могут быть потрачены месяцы, и даже годы учебы и работы. Надо изучать базовые концепции, разработку, системное администрирование, изучить тестирование, разное ПО – от git до Kubernetes.
В любом случае с нуля в эту профессию сложно попасть. Вам следует поработать обычным разработчиком, системным администратором или даже тестировщиком. Но эта специальность, как уже было сказано, востребована, а также популярна как и на российском рынке, так и на зарубежном.
Специально для вас мы составили дорожную карту, которая должна помочь вам устроиться на работу.
- Первый месяц-два: Разобраться в системном администрировании Linux, разобрать настройку сервера.
- Месяц на изучение базы работы сетей, сетевых протоколов, локальных и виртуальных сетей.
- Три-шесть месяца на изучения Python (можно другой или несколько языков на выбор) и Bash. Овладеть навыками программирования, понять общие принципы. Разбираться в цикле разработки продукта. Изучить чистую архитектуру и код, принципы программирования. А также изучить языки разметки JSON, YAML, TOML.
- Изучить технический английский хотя бы на среднем уровне, чтобы читать техническую литературу и документацию на английском. Время изучения очень плавающее и зависит от текущих знаний. А также практически все ПО на английском, и требуется знать его для работы с многочисленными дашбордами, панелями, графиками и так далее.
- Изучить систему контроля версий git, командную разработку, разбираться в управлении версиями и ветками кода.
- Один-два месяца на изучение облачной инфраструктуры, знать как ее настраивать, изучить облачную виртуализацию.
- Разбираться в Docker, Kubernetes и микросервисах. Уметь пользоваться и настраивать инструменты для контейнеризации приложений. Контейнеры нужны для быстрой доставки кода и масштабирования.
- Уметь строить IaC (infrastructure as code), например с помощью Ansible.
- Уметь настраивать непрерывный конвейер обновления и доставки кода, изучить CI/CD Pipelines, и научиться работать с инструментами CI/CD (например Jenkins).
- Изучить конфигурацию мониторинга системы и сервера, с быстрым доступам к отчетам.
- Практиковаться. В профессии DevOps важна практика на реальных задачах и проблемах. То есть чтобы вы знали как действовать в разных ситуациях. Попробуйте начать свою карьеру со стажировок, или попробовать поработать в команде над каким-либо проектом.
И обязательно нужно развивать soft и hard skills, ведь они сильно помогут в продвижении по карьерной лестнице. Иногда вам придется работать с фидбеком клиентов, или даже побыть больше как менеджер, чем айти-специалист.
Вопросы на собеседовании
Собеседование будет сложным, поэтому стоит подготовиться. В принципе, как и к любому собеседованию.
Проверьте – все ли вы изучили? Точно ли сможете ответить почему критичные системы (например DNS) используют UDP, а не TCP? А чем вообще отличается UDP от TCP?
Проверьте себя, знаете ли вы механизм работы DNS, HTTP и TLS протоколов? Или как парсить лог-файлы, например Apache или Nginx при помощи стандартных инструментов Linux?
В общем, вопросы будут по всему что вы изучили. От работы сетей, до виртуализации. Ниже мы привели список тем для самопроверки:
- Работа сетей и сетевых протоколов, уровни модели OSI, устройство DNS.
- Знать Unix-утилиты и Unix-системы. Умение работать с bash, shell. Желательно, даже обязательно знать как писать скрипты на Bash. Знать утилиты для парсинга логов. Как правильно работать с этими данными?
- Виртуализация, паравиртуализация, чем отличается контейнерная от гипервизорной виртуализации.
- Что такое Docker, Docker compose? Что такое контейнеры вообще? Что такое система оркестрации?
- Знать CI/CD. Как настроить Continuous Integration? Используете ли вы анализаторы кода, например известный PVS-Studio? Какие вы системы использовали для настройки CI/CD?
- Знать также систему управления конфигурациями. Как правильно сохранять пароли в Git репозиторий, как шифровать и хранить данные.
- Знаете ли вы Python? Понимаете ли как взаимодействуют сервисы, зачем нужны API? Что такое протоколы аутентификации и авторизации?
- Знаете ли вы отличие SQL от NoSQL? Как ускорить, мониторить базу данных, как ее защитить – все это нужно.
- Как работать с облачной инфраструктурой? Как ее разворачивать и масштабировать? Чем отличается Azure от AWS, GCP?
Также стоит знать следующие моменты:
- для построения инфраструктуры — Terraform или утилиты провайдера облака;
- системы управления конфигурациями — Ansible, Chef, Salt, Puppet;
- распространенные инструменты CI/CD — GitLabCI, GitHub Actions, Jenkins, TeamCity и прочие;
- для контейнеризации — Docker, Kubernetes, Nomad, OpenStack и прочие;
И если вы все это знаете – то вы сможете устроиться на работу практически со 100% шансом. Если вы что-то не знаете, то это конечно минус, но возможно вас возьмут на Junior или даже Middle позицию.
Из-за того, что DevOps новая профессия, и обхватывает сразу много областей, при приеме на работу следует сразу разграничить, какие задачи вам придется решать. Иначе вы рискуете перегореть или быть уволенным.
Заключение
DevOps-инженер – перспективная, интересная и сложная профессия. Вы можете не волноваться, что вы попадете под сокращение – компаниям нужны такие специалисты, которые смогут непрерывно поддерживать проект, минимизируя любые ошибки.
Мы надеемся, что вам понравилась эта статья, и вы заинтересовались DevOps-инжинирингом. Мы разобрали все навыки, составили дорожную карту и разобрали, что следует знать DevOps-инженеру.