Как стать DevOps в 2024 году
Узнали у senior и middle специалистов, как стать DevOps-инженером в 2024 году и какие инструменты нужно освоить.
3К открытий20К показов
Узнали у senior и middle специалистов, как стать DevOps-инженером в 2024 году и какие инструменты нужно освоить.
Вот, что они ответили.
Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.
Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на experts@tproger.ru, мы расскажем, как это сделать.
Александр Егерев
DevOps-инженер IT Test
DevOps – это дисциплина на стыке разработки и администрирования серверов. Основная цель – упростить и ускорить доставку нового функционала пользователям.
DevOps-инженер строит серверную архитектуру приложения, готовит инструменты для совместной работы, связи приложений и микросервисов между собой. А еще снимает много работы с разработчиков и дает им возможность сконцентрироваться на реализации бизнес-логики.
Для того, чтобы начать карьеру DevOps-инженера, первым делом нужно изучить основные инструменты и технологии системного администрирования. Основные инструменты: kubernetes, get, helm, gitlab, docker, docker-compose, jenkins, CI/CD. Также важно понимать язык SQL-запросов и bash для написания скриптов автоматизации, уметь работать с сетевыми приложениями (nginx,php,python).
Если говорить про взаимодействие с другими отделами, то разработка начинается с общения с тимлидом, который объясняет основную задачу по настройке инфраструктуры приложения, что позволяет далее подумать о размещении, выделяемых ресурсах и способах сборки и развертывания.
Далее необходима коммуникация с разработчиками. Они подскажут, какие действия нужны для сборки или компиляции разработанного ими приложения, чтобы автоматизировать процесс сборки. Если же на сервере приложение не работает корректно, а локально у разработчика все хорошо, значит, нужно искать причину неполадки на этапах проектирования сервера, сборки и доставки.
При взаимодействии с тестировщиками можно узнать, какие инструменты тестирования можно добавить в процессы CI/CD, чтобы до релиза приложения получать все ошибки и необходимые сведения. Именно они первые скажут, что не так с приложением.
Для одной задачи всегда существует несколько разных подходов – это держит в тонусе и не дает заскучать. В этом для меня и заключается прелесть профессии.
Александр Чумаков
Руководитель группы разработки компании-разработчика ПО МойОфис
DevOps — это методология, при которой специалисты разработки, тестирования и эксплуатации не ограничиваются своей зоной ответственности, а умеют работать в смежных областях. Другими словами, это и программист, который может задеплоить свой код в прод, и системный инженер, который может писать код.
Сегодня, когда говорят о DevOps-инженере, в основном имеют в виду именно системного инженера или инженера инфраструктуры, который работает по методологии DevOps.
Считается, что работа разработчика заканчивается на отправке кода в репозиторий. За весь остальной процесс, от сборки до деплоя в прод, отвечает DevOps-инженер. При необходимости в процесс еще включаются тестировщики.
Запуск и поддержка сервера CI/CD, который будет выполнять пайплайн — однозначно задача DevOps. А вот кто будет писать Dockerfile, код пайплайна, манифесты для деплоймента — пограничная область. Хорошо бы разработчику делать это самому, обращаясь за консультациями к специалисту DevOps.
DevOps стирает границы ответственности и уменьшает число блокеров, которые возникают у специалиста при движении к цели, а это, в свою очередь, сокращает Time To Market (TTM).
Правильный пайплайн начинается с того, что код проверяется на общую корректность. Может быть использован и лентер, и статический анализатор кода. Далее идет проверка на возможность этот код собрать. Затем подключаются юнит- и интеграционные тесты. Опционально добавляют этап ручного и/или автоматизированного тестирования.
Все эти шаги позволяют очень быстро обнаруживать возможные проблемы в коде и оперативно их устранять, повышая общее качество кода.
Самая большая проблема — нежелание некоторых специалистов выходить за рамки того, в чем они хорошо разбираются. Руководителям нужно поощрять выход сотрудников за границы своей ответственности, t-shaping, а также способствовать обучению новым технологиям.
В общем случае достаточно знать основы DevOps и бенефиты, которые этот подход приносит, чтобы захотеть его внедрять. И в этом направлении самое важное — популяризация, тимлиду важно донести ценности до коллег.
Очень важно оставаться в тренде, следить за новыми разработками, подходами, решениями. Я бы выделил два способа, которые дополняют друг друга: сильные коллеги и профильные конференции. С первыми все просто — нужно искать для себя команду экспертов, у которых будет чему поучиться. У нас в МойОфис, например, как раз такая. А вот конференций довольно много. Я бы выделил HighLoad++, DevOpsConf и DevOops.
В основе всего DevOps лежат Linux и Docker.
Для конфигурирования чаще всего используют Ansible. Реже — Chef и Puppet.
Для описания инфраструктуры кодом применяют Terraform, иногда добавляя к нему Terragrunt.
Когда приложение разрастается и появляется необходимость в оркестраторе, обычно берут Kubernetes, хотя в некоторых случаях целесообразнее использовать Nomad.
Для CI/CD чаще всего используются Jenkins и Gitlab CI. Реже GitHub Actions и Gitea Actions, TeamCity, Atlassian Bamboo и Drone CI.
В сфере Observability стоит посмотреть на OpenTelemetry Collector. За сбор и хранение метрик отвечают Prometheus и его аналог VictoriaMetrics. А для визуализации метрик, логов и трейсов фактически сегодня существует только одно решение — Grafana.
Лучше всего начать с книги «Проект “Феникс”», она станет довольно легким и ненавязчивым введением в тему. В мире Ansible на слуху geerlingguy (Jeff Geerling), стоит познакомиться с его Ansible for DevOps, а также с Ansible-ролями, которые он написал.
По Kubernetes есть прекрасные курсы на Udemy за авторством Mumshad Mannambeth. Но не так важна теория, как практика. Если нет DevOps задач, на которых можно потренироваться, их нужно находить самостоятельно. Автоматизировать рутину, поднимать серверы для бытовых нужд, запускать pet-проекты.
Михаил Малиновкин
Руководитель группы обеспечения надёжности систем Группы НЛМК
Термин DevOps состоит из двух понятий: development (разработка) и operations (эксплуатация). Он обозначает как методологию работы, так и саму профессию — как правило, она называется DevOps-инженер.
DevOps-подход предполагает совместную работу разработчиков и сисадминов, чтобы повысить ее эффективность. Когда между ними нет взаимодействия, это отражается на результате: разработчики пишут код, админы занимаются поддержкой, а в итоге что-то зачастую не работает, возникают проблемы. Культура DevOps была придумана как раз для того, чтобы этого избежать. А уже потом из нее появилась профессия DevOps-инженера.
Ключевые инструменты DevOps предназначены для автоматизации этапов разработки, тестирования и использования приложений.
Фундаментальным элементом процессов DevOps являются системы управления версиями программного кода наподобие Git. Инструменты CI/CD автоматизируют сборку и тестирование кода. Контейнеризация в Docker и оркестрация с K8s позволяют упросить релизы и масштабирование программ. С системой управления инфраструктурой как кодом (IaC) можно разрабатывать, менять и версионировать инфраструктуру так же легко, как и исходный код. В этом помогут инструменты Ansible и Terraform. Для мониторинга и ведения логов существуют возможности ELK Stack (Elasticsearch, Logstash, Kibana) и Prometheus+Grafana. С их помощью можно наблюдать за системами в режиме реального времени.
Процесс разработки сложно представить без DevOps-подхода, поскольку с его помощью координация между разработкой и эксплуатацией становится гораздо эффективнее, а релизный цикл ускоряется. Развивая культуру сотрудничества, автоматизируя процессы и внедряя инструменты CI/CD, компания более гибко и быстро реагирует на рыночные изменения — а значит, создание и доработка продуктов происходят быстрее, качество сервиса повышается благодаря ранней диагностике ошибок – чем меньше ошибок, тем больше довольны пользователи. Кроме того, внедрение DevOps-подхода способствует культуре постоянного развития и обучения, а рабочие процессы становятся понятными и прозрачными.
DevOps влияет на культуру команды разработчиков. Во-первых, появляется стимул сотрудничать и нести общую ответственность за качество продукта на всех этапах разработки и эксплуатации. Взаимосвязь между специалистами Dev, OPS, QA становится теснее, и это положительно влияет на рабочую среду. В культуре DevOps важную роль играет автоматизация и непрерывность процессов, что приводит к снижению ошибок, минимизирует ручной труд и позволяет программистам больше времени уделять инновационным разработкам и совершенствованию продукта. Кроме того, рутинность задач снижается и за счет автоматизации развертывания и селфхилинга систем. Философия постоянного обучения и экспериментов способствует открытости и доверию в команде, а быстрая обратная связь от пользователей позволяет быстрее улучшать продукт. Благодаря прозрачному и быстрому результату своей работы растет мотивация сотрудников.
Эта профессия предполагает глубокую и сложную специализацию и обширную экспертизу сразу в нескольких направлениях. Поэтому чаще всего программист приходит в DevOps не с нуля, а имея какой-то опыт в IT — админа или разработчика. Если же человек только планирует попасть в IT-среду, то не стоит начинать с онлайн-курсов. На них можно выучиться, к примеру, на тестировщика — но точно не на DevOps-инженера.
Первое, с чего следует начать, — это изучить инструменты DevOps. Также пригодится портфолио: если у программиста еще небольшой опыт, в качестве примера работы можно использовать репозиторий на Github со своим pet-проектом. Стажировка в известной компании — тоже неплохой способ начать карьеру в этой среде.
Для успешной работы в DevOps не помешает опыт администрирования базовых Linux-сред и знание оркестраторов: несмотря на популярность Kubernetes, опыт работы с инструментами типа Docker Swarm пойдет только на пользу. Желательно знать языки программирования: Python, Bash и Go. Конечно, не все инженеры пишут код сами, но, если вы знаете даже какой-нибудь язык типа Java, это может пригодиться в работе. Важно научиться работать с CI/СD-инструментами: Jenkins, Teamcity, Gitlab Ci. Также пригодится знание инструментов мониторинга: Elastic или Loki, Prometheus, Grafana, VictoriaMetrics. Необязательно изучать все подробно, но владеть парой инструментов будет нелишним.
Для развития в DevOps пригодятся и софт-скиллы: умение коммуницировать, слышать людей, объяснять сложные вещи доступным языком.
DevOps-инженеры могут заниматься различными задачами. Во-первых, это специалисты, которые работают над продуктовой автоматизацией и помогают разработчикам настраивать продукт под разные среды, тестировать его и проверять гипотезы. Другой тип инженеров осуществляет поддержку профессиональных инструментов и платформ DevOps, которые предоставляют возможности разработчикам и специалистам из предыдущей категории.
В зависимости от специализации DevOps-инженера меняется круг его задач. Специалист по продуктовой автоматизации отвечает за организацию рабочих сред на CI/CD-инструментах и настройку pipeline. Кроме того, специалисты работают с DevOps-платформами — тем же Kubernetes или облачными инструментами. В целом задачи любого инженера — работать с различными специализированными инструментами и обеспечивать их устойчивую работу исходя из целей заказчика или работодателя.
В DevOps-культуре программисты Dev и OPS-специалисты работают совместно, стирая границы между разработкой и развертыванием кода. С использованием CI/CD-инструментов разработка и тестирование кода происходят быстрее, а процессы деплоя и управления релизами заметно упрощаются. Тестировщики внедряют автотесты в общее CI/CD-пространство, что повышает качество продукта за счет раннего обнаружения и устранения багов. Специалисты по эксплуатации помогают разрабатывать инфраструктуру как код, тем самым облегчая управление, восстановление и масштабирование систем.
DevOps-подход позволяет быстрее найти и устранить баги, благодаря чему они реже попадают в итоговый релиз. Внедрение систем управления инфраструктурой как кодом (IaC) упрощает управление разными средами, делает разработку прозрачнее и минимизирует человеческие ошибки. Качество продукта повышается и за счет непрерывного сотрудничества команд, которые обмениваются друг с другом опытом и знаниями, вырабатывая единое понимание рабочих задач и целей. В среде DevOps много внимания уделяется мониторингу продукта и ведению логов, чтобы не только быстро реагировать на недочеты, но и превентивно их предотвращать. Культура DevOps также подразумевает, что каждый рабочий этап и каждый созданный продукт — это возможность для развития, получения опыта и, как следствие, улучшения качества работы.
Основные сложности при внедрении DevOps — это сопротивление сотрудников изменениям, технические проблемы с интеграцией новых инструментов, недостаток опыта и экспертизы специалистов. Чтобы преодолеть эти сложности, систему DevOps стоит внедрять поэтапно, начав с наиболее важных и критичных участков работы. Кроме того, нужно уделить внимание процессу обучения и поддержке сотрудников. Команда должна понимать ценности DevOps и развивать необходимые для работы навыки. В этом поможет применение MVP и POC-проектов: на их примере можно без риска продемонстрировать преимущества нового подхода. Наиболее значимую роль играет поддержка со стороны руководителей, а постоянная обратная связь от сотрудников позволит эффективнее адаптировать культуру DevOps в компании.
Профессия DevOps-инженера, как и большинство других IT-профессий, имеет несколько грейдов: начальный junior, средний middle, старший senior.
Если говорить о вертикальном развитии, то уровень senior является пределом — после него можно либо уйти в менеджмент, либо заняться менторством. В менеджменте это может быть рост до тимлида, руководителя направления или даже CTO. Не всем подходит этот путь развития, поэтому в большинстве случаев DevOps-инженеры, достигнув уровня senior, уходят в менторство или выбирают горизонтальный путь роста, развиваясь в смежных направлениях.
Для горизонтального развития в DevOps важно регулярно обновлять и расширять свои знания. Это могут быть профессиональные тренинги, онлайн-курсы, получение специализированных сертификатов. Инженеру полезно принимать участие в конференциях, хакатонах и митапах. Можно присоединиться к профессиональным сообществам в соцсетях и платформах вроде GitHub или Stack Overflow. Такой нетворкинг способствует получению новых знаний и обмену опытом с другими специалистами DevOps. Чтобы повысить профессиональную репутацию и развить практические навыки, стоит активно участвовать в проектах open-source. Быть в курсе лучших современных практик поможет изучение профессиональной литературы и экспертных блогов.
Алексей Казин
DevOps-инженер ГНИВЦ
Тут сложно сказать что-то новое. Методология DevOps - это подход к организации разработки продукта, при котором разработка, тестирование и эксплуатация работают едино.
Методология DevOps предназначена для высокоэффективной работы, а ее важность обусловлена следующими преимуществами: снижение затрат на разработку, ускорение выпуска новых версий и всестороннее тестирование новых релизов.
Методология DevOps позволяет сократить время Time To Market. То есть внедрение DevOps напрямую выгодно бизнесу. Ускоряются выпуски новых версий продукта с новыми фичами. При этом достигается максимальная автоматизация всех процессов, от сборки продукта, его тестирования и до выкатки релиза до конечного пользователя.
Можно рассказывать долго и много. DevOps-инженер это универсальный, многогранный специалист.
Из основных задач можно выделить три группы: управление инфраструктурой проекта, автоматизация процессов разработки и тестирования и сокращение времени выпуска новых релизов.
Раньше it-специалисты делились на системных администраторов, сетевых инженеров, разработчиков, тестировщиков и т.д. И при разработке продукта они мало взаимодействовали друг с другом. Но все поменялось после прихода подхода DevOps. Этот подход объединил эти отделы и помог им совместно работать и выпускать новые продукты.
За счет автоматизации сборки, тестирования и выкатки релизов достигается высокое качество итогового продукта и за счет этого же достигается быстрая реализация нового функционала.
Стоит выделить три основные проблемы при внедрении DevOps, а именно культурные, технические и организационные. Под культурными сложностями имеется ввиду сопротивление изменениями и отсутствие взаимопонимания между разработчиками и остальными специалистами. В данном случае необходимо уделить внимание общению и обучению, а также созданию культуры, которая поддерживает непрерывное улучшение и сотрудничество. Технические проблемы могут включать в себя отсутствие автоматизации и сложность интеграции новых инструментов. А среди организационных проблем можно выделить отсутствие поддержки со стороны руководства и нечеткость ролей. Чтобы преодолеть эти проблемы, необходимо обеспечить вовлеченность руководства и четко определить роли и обязанности каждого участника команды.
По моему личному мнению, тут опять же все сводится к автоматизации.
С внедрением методологии DevOps уходит одна важна проблема. Теперь разработчики не занимаются ручной сборкой релизов, ручным тестирование и выкаткой релизов. Если раньше разработчикам приходилось собирать свой код, идти к сисадминам, просить их дать сервера и запустить на них продукт, затем долго и муторно его тестировать, то теперь все эти этапы почти полностью автоматизированы.
В первую очередь вы должны хорошо разбираться в среде, в которой будут работать ваши приложения. Если это Linux, то будет огромным плюсом пройти хотя бы базовый курс по Linux. Изучить работа с терминалом, атак же изучить как происходит запуск программ, что делать, если в логах увидели ошибку и как диагностировать ошибки.
Обязательно знать основы сетей. Как работает IP, TCP/UDP. Как работает HTTP. Тут лично моя рекомендация — это пройти курс CCNA.
DevOps инженер в своей работе использует огромное количество инструментов, но среди них можно выделить базовые, без знаний которых никак не обойтись. Давайте рассмотрим их списком.
Начнем с управления и настройки инфраструктуры. Тут безусловное лидерство удерживают инструменты под названием Terraform и Ansible. С их помощью можно удобно и быстро разворачивать и настраивать окружение.
Следующим в нашем списке идет инструмент для управления исходным кодом. Тут все просто это Git. А будет это GitHub, GitLab или что-то еще уже не важно. Принципы Git везде одинаковые.
Затем идут инструменты для непрерывной интеграции (один из принципов DevOps). Тут выбор больше. Это может быть Jenkins, GitLab CI или великий и ужасный Azure DevOps.
Для хранения готовых артефактов можно использовать JFrog Artifactory, Sonatype Nexus или Docker Registry.
Ну и завершая список необходимых к знанию технологий нельзя не упомянуть про системы управления контейнеризацией. А именно Docker, Kubernetes и Read Hat OpenShift.
DevOps как и любая другая it специальность требует постоянного обучения и развития. Будьте последовательны в своем развитии. Изучайте смежные с DevOps технологии. Если вы работаете с Nexus, то изучите еще и JFrog и это касается всех инструментов.
Обязательно посещайте конференции по DevOps, нетворкинг лучше всего позволяет оставаться на волне всех новинок!
Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.
Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на experts@tproger.ru, мы расскажем, как это сделать.
3К открытий20К показов