Автор статьи - Сергей Попов
Предистория
Мало кто из инфраструктурщиков на просторах России не сталкивался с «Великим и Ужасным» ОДИН-ЭС. Многие после этой встречи безвозвратно уходят в мир *nix, чтобы никогда больше не пересекаться с ним, и не жалеют об этом, остальным приходится устанавливать, обслуживать и поддерживать этого монстра многие...
Кто такой DevOps-инженер, чем он занимается и как им стать
Visitors have accessed this post 7494 times.
Хайповая профессия с неоправданно высокой зарплатой – такое мнение про DevOps-инженеров можно часто встретить в сети. Давайте попробуем разобраться, что это за зверь такой высокооплачиваемый и можно ли им стать без участия в рискованных генетических экспериментах и вживления в голову суперкомпьютера.
Что такое DevOps?
Методология DevOps появилась еще в 2008 году. Прежде всего, как ответ на постоянно возникавшую проблему – во взаимодействии отделов разработки и эксплуатации. Классическая ситуация – разработчики пилят код, локально у них все работает, а вот при запуске в продакшн возникают неведомые проблемы и ошибки. С точки зрения команды эксплуатации проблема, конечно, на стороне разработки, а для разработчиков – в «кривых руках» службы эксплуатации, у них же все работало. Итог – один релиз допиливается и выпускается долго, что не может не сказаться на конечном качестве продукта.
На пике этой ситуации и появилась методология DevOps (сокращение возникло от Development Operations). Она позволила связать в единый процесс разработку, тестирование и эксплуатацию. А главное – прийти к тому, чтобы продукт можно было обновлять чаще без потери в качестве.
Кто такой DevOps-инженер, и чем он занимается
Как видно уже из названия, DevOps-инженер как раз выступает в роли того самого «связного» между разработкой и эксплуатацией (то есть он разбирается и в Development, и в Operations). Так как его деятельность находится на стыке нескольких специальностей сразу, то он зачастую и выполняет несколько ролей:
- Build Engineer/Release Engineer — специалист, ответственный за сборку кода (build) и его доставку в тестирование и продакшн (собственно, release).
- Automation Engineer — главный по автоматизации всего, что только возможно. Кстати, именно автоматизация – одна из важнейших составляющих методологии DevOps.
- Security Engineer (или SecOps) — ответственный за информационную безопасность — PCI compliance, CIS compliance, patching, поиск уязвимостей и прогон тестов на безопасность.
При этом на практике отчасти за выполнение функций, например, Build Engineer отвечает разработчик, часть автоматизации ложится на могучие плечи сисадмина. А DevOps-инженер автоматизирует сборку и доставку кода от разработчиков в продакшн.
Так кто же такие DevOps-инженеры, и чем они отличаются от системных администраторов?
Переход из сисадминов в DevOps-инженеры – частое явление. Прежде всего потому, что у них похожий бэкграуд в части знаний и навыков.
Но если мы представим стандартную цепочку разработки программного решения, разница между девопсом и системным администратором станет очевидна.
Как правило, наше решение идет по такому пути:
- В отделе разработки разработчики пишут код.
- Отдел тестирования прогоняет результат через тестовые стенды, выявляя баги.
- А после устранения всех недостатков, выявленных при тестировании, системные администраторы из отдела эксплуатации разворачивают наши новоразработанные возможности решения на продакшн-серверах.
То есть, сисадмин включается в процесс только на последнем этапе – собственно, запуск в эксплуатацию.
У DevOps-инженера функции существенно шире, по сути, он связывает все три этапа в единое целое за счет автоматизации. Собирает код, описывает инфраструктуру, автоматически разворачивает тестовые среды и обновляет продакшн без потери качества.
И вот тут мы встали лицом к лицу с ключевой задачей DevOps-инженера – найти способы автоматизировать все, что можно (а желательно – и что нельзя), чтобы бизнес мог обновлять свой программный продукт быстро, качественно и стабильно.
А для того, чтобы справиться с такой масштабной задачей, нужен широкий технологический кругозор.
Поэтому переходим к следующему этапу разбора специальности, чтобы понять, как стать специалистом по DevOps.
Минимальные знания, необходимые DevOps-инженеру
Стоит сразу отметить, что при поиске DevOps-инженера работодателям не так важен диплом, как практический опыт — кейсы успешных проектов, сертификаты о прохождении обучения по востребованным технологиям, карта технологических компетенций.
По данным hh.ru, наиболее востребованными являются навыки работы с Linux, Git, Python, Bash, Docker, Azure, RabbitMQ, Kubernetes.
Но для входа в профессию вам понадобится еще ряд базовых навыков, а именно:
- знание окружения, с которым предстоит работать (Windows, Linux и др. на уровне Middle, а лучше Senior System Administrator);
- знание сетей на базовом уровне — Networking — CCNA;
- общее понимание принципов разработки на уровне Junior developer;
- умение работать с базами данных на уровне Junior DBA.
Знать окружение
Чтобы разбираться на достойном уровне в среде работы приложений, уметь устранить ошибку, понять, на каком этапе она произошла, правильно использовать команды и инструменты, понимать принципы управления процессами. На реальном проекте без этих знаний не обойтись.
Где получить базовые знания:
Хорошее понимание ОС Linux – если у вас его пока нет, стоит озаботиться поиском обучающего курса. Например, мы предлагаем пользователям изучить эту ОС сразу на «боевых» кейсах и практике – на практикуме Linux by Rebrain.
Многие тонкости можно узнать, только с головой погрузившись в тему и попробовав сделать своими руками. Если нет возможности сделать это сразу на практике, стоит уделить внимание тематическим форумам и каналам в Телеграм.
Понимать, как работает сеть
Без понимания принципов сетевого взаимодействия DevOps-инженеру придется, мягко говоря, непросто, например, при поиске причин ошибки Connection Refused. Стоит изучить, как работают IP, TCP/UDP, DNS, OSI Model, HTTP, HTTP/2. HTTP, HTTPS, FTP, SSL, TLS.
Где получить базовые знания:
Пройти обучение по CCNA и самостоятельно потренироваться в настройках сетей при помощи эмулятора для изучения сетевых технологий GNS 3.
Понимание принципов разработки на уровне Junior Developer
Тут речь идет не о том, что вы должны уметь писать код. Но вам точно стоит разобраться, как это делается, начиная от базовых понятий объектно-ориентированного программирования до того, как создается конкретное приложение. Чем глубже вы разберетесь в вопросе, тем проще вам будет автоматизировать процессы его сборки, тестирования и запуска в эксплуатацию. А понимание возможных проблем и узких мест в его архитектуре сродни профилактике возможного заболевания и может уберечь от серьезных проблем.
Если перейти к конкретным пунктам, которым стоит уделить время в первую очередь, это:
- Знание основных типов данных и алгоритмов, которые могут использоваться.
- Понимание основных принципов программирования.
- Не помешает и более глубокое погружение в какой-нибудь из языков программирования, это может быть Python или golang.
Знание баз данных
Обязательный пункт, потому что на любом реальном проекте не обойтись без работы с базами данных. Поэтому DevOps-инженеру стоит научиться не только писать SQL-запросы, но и уметь работать с noSQL-решениями, понимать принципы работы с индексами, уметь пользоваться explain.
Где получить базовые знания:
Пройти курс по популярным БД или самостоятельно изучить документацию и попробовать на практике поработать с базами.
После того, как мы обсудили минимально необходимые DevOps-инженеру знания, стоит остановиться еще и на некоторых дополнительных навыках, которые точно пригодятся тому, кто хочет развиваться в сфере DevOps.
- Навык постоянно учиться и совершенствоваться. Постоянно выходят новые утилиты, методики и подходы. Чтобы уметь быстро и эффективно решать задачи — необходимо постоянно изучать что-то новое.
- Умение общаться. Чтобы выявить и решить проблему, зачастую необходимо провести целое расследование — поговорить с заинтересованными лицами, узнать, где, что и как должно работать, и, собственно, решить саму проблему (а не только ее последствия).
- Умение траблшутить. Это навык, который используется каждый день. Постоянно что-то не работает, падает — и в этом приходится разбираться.
- Умение разбираться (и жить) со старой архитектурой. Никому не нужны спецы, которые могут что-то сделать с нуля, но при этом не могут поддерживать уже существующие решения. Бизнесу невыгодно постоянно переделывать все с помощью новых технологий.
- Умение мыслить масштабно. Умение видеть всю систему в целом, а не отдельную ее часть, — очень важное качество — благодаря ему, можно находить самые оптимальные решения, не зацикливаясь на деталях конкретной проблемы.
- Кругозор. Все тоже — чтобы выбрать правильный инструмент, необходимо знать его аналоги, их плюсы и минусы. По долгу службы и девопсы знают множество софта и технологий, которые так или иначе облегчают жизнь. Соответственно, они могут выбрать подходящий инструмент в незнакомой ситуации.
Кто такой DevOps и как им стать: план обучения
На первую часть вопроса мы уже ответили, но еще раз отметим, что история с DevOps-практиками – она больше про кругозор, тягу к новым знаниям и технологиям, их применение на своем опыте, чем про строгий набор программ, которые можно изучить раз и навсегда и на этом остановиться. Поиск новых решений, изучение новых технологий, постоянные улучшения проекта с их помощью – для этого требуется и хорошая база знаний в голове, и постоянная тяга к ее расширению.
Если путь постоянного самообучения вас не пугает, то вам стоит смотреть в сторону профессии DevOps-инженера.
Давайте обозначим условный путь, как стать DevOps-инженером. За точку отсчета берем, что знания по четырем пунктам из предыдущего раздела у вас уже есть.
Итак, начинаем путь DevOps-инженера по конкретным шагам.
- Для начала изучаем API, что это такое, какие виды бывают и как с ним работать. Потом полученные знания реализуем в написании приложения, например, для интернет-магазина.
- Теперь работаем с базой данных – добавляем БД MySQL или Postgress и настраиваем работу с запросами. Список пользователей лежит в базе, они могут проходить авторизацию. Настраиваем базу так, чтобы приложение могло синхронизироваться с ней при внесении изменений.
- Следующий этап – это начало автоматизации работы с кодом. Для этого мы выбираем хостинг GIT-репозитория – это может быть GitHub, Bitbucket, Gitlab – и заливаем туда наш код.
- Переходим к автоматизации сборки, для этого нам нужны будут Jenkins / TeamCity / Gitlab CI. Настраиваем их таким образом, чтобы приложение автоматически собиралось из БД. На этом же этапе мы занимаемся заготовкой для будущего паплайна.
- Следующий этап автоматизации касается уже сборки кода. Этот функционал будет, чтобы оперативно реагировать на внесение изменений в код. Тут можно или заставить CI/CD систему опрашивать Git-репозитории на наличие изменений, или воспользоваться web-хуками облачных провайдеров.
- Переходим к настройке автоматической проверки кода. Для этого можно добавить тесты в jenkins.
- Используем подход Infrastructure as a code – описываем инфраструктуру с помощью Ansible, Puppet, Chef.
- На следующем этапе нужно настроить автоматическое разворачивание тестовых или продакшн сред при помощи Vagrant или Terraform, чтобы инфраструктуру можно было поднять нажатием одной кнопки.
- Следующий шаг нашей автоматизации касается уже создания виртуальных машин. Используем для этого выбранный CI/CD инструмент.
- Пора переходить к поиску Best practices по деплою выбранного вами языка программирования. Как правило, их можно найти на сайте нужного языка.
- Воплощаем найденные best practices в нашем проекте.
- Для QA нам понадобится smoke-тест, который будет контролировать успешный или нет запуск приложения. И конечно, если приложение не работает, об этом нужно оперативно сообщать разработчикам.
- Добавляем функцию мониторинга в приложение – тут не обойтись без взаимодействия с разработчиками.
- Интегрируем с мониторингом дополнительные сервисы, которые позволят нам следить на происходящим в приложении, — pagerduty, slack, opsgenie.
- Подключаем к нашей автоматизации Docker – пишем файл для сборки образа приложения и выкатки в registry.
- На следующем этапе нам понадобятся системы оркестрации и Docker compose, чтобы поднимать и объединять несколько контейнеров в один. Это пригодится, если нужно, к примеру, поднять для вашего окружения базу данных.
- На последнем этапе мы переведем наш пайплайн на Docker. Для этого собираем приложение в контейнер, сохраняем образ в registry, запускаем его при помощи Kubernetes, прогоняет через smoke и нагрузочное тестирование. И после этого запускаем в продакшн.
Мы рассмотрели базовые шаги по автоматизации, которые проходит DevOps-инженер. Как видите, тут упоминается большое количество технологий и инструментов. И это далеко не все, что может понадобиться вам в работе. Именно поэтому мы говорим о том, что DevOps-инженеру нужен широкий кругозор и постоянное изучение новых возможностей.
Думаем, после изучения стека технологий, необходимых в работе DevOps-инженера, вам стало гораздо понятней, почему эта вакансия, как правило, так высоко оплачивается. Но давайте уже посмотрим на конкретные цифры.
Сколько платят DevOps-инженерам
Вакансия DevOps-инженера последние 3 года стабильно входит в ТОП-10 самых востребованных, по версии hh.ru. Кстати, согласно данным одного из крупнейших мировых сайтов по поиску работы Glassdoor, DevOps-инженер также в числе Top 10 tech jobs in America и 20 best jobs in America в 2019 году.
Давайте же посмотрим интересное — сколько получает DevOps-инженер.
На hh.ru разброс зарплат по интересующим нас вакансиям составляет от 75 до 355 тысяч рублей. Естественно, уровень зарплат зависит от требуемого опыта работы, компании, нужных навыков.
Условно DevOps-инженеров можно разделить на 3 категории (и 3 уровня зарплат, соответственно):
- Начинающие специалисты (опыт работы — до года, Junior) c зарплатой 80-100 тысяч рублей.
- Более опытные DevOps-инженеры (опыт работы — от 1 года до 3 лет, Middle) – это уже 120-150 тысяч рублей.
- Опытные специалисты (опыт работы — более 3 лет, Senior) зарабатывают от 150 тысяч рублей в месяц.
Если обратимся к данным из отчета международного рекрутингового центра Hays за 2019 год, то увидим, что средняя зарплата DevOps-инженера в Москве и МО составляет 230 тысяч, а DevOps-архитектора – 210 тысяч.
Еще для примера приведем уровень зарплат DevOps-инженера в США.
Подытожим. Профессия DevOps-инженера – одна из наиболее востребованных и, что скрывать, хорошо оплачиваемых в сфере ИТ. Но связано это с тем, что DevOps-инженер – практически универсальный солдат, при помощи автоматизации связывающий между собой процессы разработки, тестирования и внедрения. А для этого ему нужно знание очень многих инструментов и технологий.
Если вы хотите стать DevOps-инженером, путь будет долгим и, вероятно, непростым. Но если вам нравится постоянно учиться, разбираться в новых фичах и инструментах, копаться в настройках – нет ничего невозможного. Для тех, кто хочет освоить самые актуальные навыки DevOps-инженера на практике — мы создали практикум DevOps by Rebrain.
А еще каждую неделю мы в live режиме решаем кейсы на наших открытых онлайн-практикумах, присоединяйтесь к нашему каналу в Телеграм, вся информация там.
Вам также может понравится
Один из основных принципов DevOps – автоматизируйте все. Конечно, для автоматизации того широкого круга процессов, которые затрагивает методология, - разработка, тестирование, внедрение, внесение изменений – нужны эффективные инструменты. В этой статье мы рассмотрим, какие инструменты DevOps используются на разных этапах работы DevOps-инженера....
«Когда ты это выяснишь, юный Билл, ты сможешь осознать Три Пути, – говорит он. – Первый Путь помогает нам понять, как наладить быстрый поток работы, соединяющий отдел разработки и IT-сопровождения, потому что именно он лежит между бизнесом и клиентами. Второй Путь показывает нам, как сократить и усилить цикл обратной связи, чтобы можно было сразу...