Введение
Dev и Ops, DevOps, DEVOPS – как много о нем сейчас разговоров. И не зря!
DevOps – это перспективное направление, которое будет продолжать развиваться и влиять на IT-индустрию в ближайшие годы, а то и десятилетия.
Это подтверждается ростом числа вакансий, связанных с DevOps, и увеличением спроса на специалистов в этой области. Например, анализ данных с hh.ru показывает, что количество DevOps-вакансий за год значительно выросло.
Несмотря на растущий спрос, на рынке наблюдается дефицит квалифицированных специалистов в области DevOps. Это связано с тем, что работа в DevOps требует широкого спектра навыков, включая знание различных инструментов автоматизации, умение работать в команде и адаптироваться к быстроменяющимся условиям.
DevOps: кто это? Разработчик? Системный Администратор? Менеджер? Или все вместе?
DevOps – это не просто должность или роль, это целая методология!
Предлагаю начать с разбора понятия DevOps, продолжим с разбора профессии DevOps-инженер, и завершим его ролью и стеком технологий.
Что такое DevOps?
DevOps – это философия или культура (и даже методология), которая создает единую среду работы внутри команды разработки и поддержки. Она включает процессы и специальные технические решения. Главная цель улучшить и ускорить связь между разными специалистами IT-отдела.
Имя DevOps происходит от двух аббревиатур:
Dev – разработка и Ops – операции.
Ранее это были две разные сферы. «Почему?» – спросите вы.
Раньше было разделение между разработчиками и системными администраторами, операционными специалистам.
Чуть подробнее: разработчики были ответственны за создание программного кода, в то время как администраторы систем и операционные специалисты занимались его развертыванием, обслуживанием и мониторингом. Это приводило к разделению и даже конфликтам между этими двумя сферами. Внедрение методологии DevOps позволило объединить эти функции, сделав процессы разработки и эксплуатации более согласованными и эффективными.
Идея DevOps заключается в том, чтобы сблизить эти сферы и установить эффективное взаимодействие между ними.
Исходя из анализа можно вывести формулу DevOps:
DevOps = люди + культура + инструменты
Кто такой DevOps-инженер?
От DevOps-инженера ожидают такие навыки, которые охватывают как разработку, так и эксплуатацию. Но это не все! Также требуются навыки межличностного общения, которые помогут преодолеть разногласия между отдельными командами.
Однако согласно исследованию тенденций развития DevOps, проведенному компанией Atlassian одним из наиболее распространенных препятствий на пути внедрения DevOps является недостаток навыков у сотрудников.
Одной из ключевых ролей в методологии DevOps является инженер DevOps. Этот человек должен обладать широким спектром навыков, охватывающих как разработку, так и эксплуатацию, а также навыками межличностного общения, позволяющими преодолеть разногласия между отдельными командами.
DevOps-инженер – это ИТ-специалист широкого профиля, который должен обладать обширными знаниями как в области разработки, так и в области эксплуатации, включая кодирование, управление инфраструктурой, системное администрирование и цепочки инструментов DevOps.
DevOps-инженеры также должны обладать навыками межличностного общения, поскольку они работают в разных подразделениях компании, чтобы создать среду для более тесного сотрудничества.
Инженеры DevOps должны хорошо разбираться в общей системной архитектуре, настройке и администрировании, а также иметь опыт работы с набором инструментов для разработчиков и практиками (такими как использование системы управления версиями, предоставление и получение обзоров кода, написание модульных тестов и знакомства с принципами agile) (по agile читай статью: Agile: суть, принципы, плюсы и минусы, особенности внедрения).
А что по задачам?
Частые задачи для DevOps-инженеров:
-
Автоматизация процессов. DevOps-инженеры создают и поддерживают инструменты для автоматизации разработки, тестирования и развертывания программного обеспечения, что позволяет ускорить и оптимизировать рабочие процессы.
-
Непрерывная интеграция и непрерывное развертывание (CI/CD). Разработка и поддержка систем CI/CD, которые позволяют организациям быстро и надежно выпускать новые версии приложений.
-
Мониторинг и логирование. Настройка и управление системами мониторинга и логирования для обеспечения стабильности и оперативного реагирования на инциденты в приложениях и инфраструктуре.
-
Безопасность и управление доступом. Реализация мероприятий по обеспечению безопасности для инфраструктуры и приложений, включая управление доступом, шифрование и обеспечение соответствия требованиям безопасности.
-
Оптимизация ресурсов. Анализ и улучшение использования ресурсов для повышения эффективности и снижения затрат на инфраструктуру.
-
Управление конфигурацией. Администрирование и настройка серверов, устройств и программных приложений для удовлетворения специфических требований проекта или операционной среды.
-
Контейнеризация и оркестрация. Развертывание и управление контейнерами, например, с использованием Docker и Kubernetes, для упрощения разработки, тестирования и производства.
-
Поддержка разработки и эксплуатации. Содействие в коммуникации и сотрудничестве между командами разработки и эксплуатации для улучшения качества продукции и операционной эффективности. 9 основных навыков инженера DevOps Технические навыки, требуемые от DevOps-инженера, будут варьироваться в зависимости от структуры команды, используемых технологий и наборов инструментов. Тем не менее, сильные навыки общения и совместной работы необходимы. Для DevOps-инженера также важно иметь четкое представление обо всех компонентах конвейера доставки и знать плюсы и минусы доступных инструментов и сервисов.
Навыки:
А теперь давайте подытожим необходимые навыки и опыт DevOps относительно грейда в виде таблицы:
Компетенции |
Грейд DevOps |
|
||
Junior |
Middle |
Senior |
|
|
Опыт в разработке |
1) Знание основ языка программирования; 2) Знание, что такое "Жизненный цикл разработки программного обеспечения"; 3) Использование основных команд git (commit, pull, push) |
1) Свободное владение одним из языков программирования; 2) Владение и использование ветвления в git; 3) Поиск и устранение проблем в существующем жизненном цикле разработки программного обеспечения; 4) Использование Agile, Waterfall и т.д. Их преимущества, недостатки + последствия |
Активное участие в написании сложной системы; Применение знаний git-flow; Участие в оптимизации жизненного цикла разработки программного обеспечения |
|
Опыт построения CI/CD |
1) Понимание основ CI/CD; |
1) Определение разницы между Continuous Integration и Delivery Integration; |
1) Способность различать Continuous Delivery и Continuous Deployment и советовать, какой из них лучше; |
|
Мониторинг (настраивание окружения, логирования и мониторинга для существующих и будущих информационных систем) |
1) Знание, какие преимущества есть у логирования и умение его использовать; |
1) Построение системы агрегации журналов, используя собственное решение на основе предоставленного дизайна; |
1) Предоставление вариантов агрегирования журналов + объяснение плюсов и минусов вариантов; |
|
Опыт работы с платформой управления контейнерами |
1) Понимание, что такое контейнеры и как они работают + запуск приложения в контейнере; |
1) Знание, как работает среда выполнения контейнера (подключение volumes, networks, dns, конфигурация контейнера, проверка работоспособности и т.д.); |
1) Может посоветовать команде разработчиков, как создавать и запускать контейнеры; |
|
Operations (умение писать скрипты на bash) |
1) Написание простого сценария на Bash; |
1) Может писать сложные сценарии, используя условные операторы и циклы; |
1) Знание, когда нужно использовать bash, а когда – другой язык программирования; |
|
Networks and cloud (Опыт внедрения и настройки решений по ИБ контейнеризации) |
1) Знание, как работает DNS; |
1) Настройка правил RBAC в соответствии со спецификацией (минимально возможные разрешения); |
1) Понимание влияния DNS на производительность в большом кластере; |
|
Понимание концепции и особенностей подхода Infrastructure-as-Code |
1) Знание концепции IaC и ее преимущества; |
1) Предотвращение типичных ошибок при настройке IaC с помощью инструментов или процессов; |
1) Может сообщить о недостатках своей/облачной инфраструктуры; |
|
Делаем шаг в мир разработки Devops
Предлагаю вам окунуться в один рабочий процесс Devops-инженера и прочувствовать всю его значимость работы. Давайте рассмотрим работу Devops-инженера:
Что тут изображено?
Изображение иллюстрирует работу Devops-инженера, который следит за работой кластера Kubernetes и процессом сборки Docker-образов.
Звучит сложно? Сейчас мы с вами попробуем детально разобраться с каждым понятием! Выделим «сложные» слова: Kubernetes, контейнер, узлы с соединениями, Docker-образ, слои.
-
Теперь мысленно разделите рабочий стол на две части: левую и правую.
-
Слева – интерфейс Kubernetes Dashboard.
-
Kubernetes (K8s) — это такая система контейнеров, которая позволяет автоматически разворачивать, масштабировать и управлять приложениями в контейнерах.
-
Kubernetes можно сравнить с управлением многоквартирным домом. Владельцы квартир (приложения) живут в доме (кластере Kubernetes) и пользуются общими ресурсами, такими как вода, электричество и системы безопасности.
На «простом» языке графически представим Kubernetes:
Kubernetes, как управляющая компания, обеспечивает работоспособность и безопасность всего дома, управляет доступом к ресурсам, разрешает конфликты и обеспечивает, чтобы все жильцы (приложения) могли жить в доме (кластере) комфортно и безопасно. На языке «посложнее» графически представим Kubernetes:
Итак, слева отображается графическое представление запущенных контейнеров, представленных в виде узлов с соединениями, отображающими их взаимосвязи и текущий статус.
А вот теперь давайте поподробнее разберемся с терминами: контейнеры и узлы!
Контейнер можно сравнить с квартирой в многоэтажном доме.
Вот как это работает:
Многоэтажный дом — это аналог сервера. Он имеет определенное количество ресурсов: пространство, электричество, воду и т. д.
Квартира — это аналог контейнера. Она имеет свои собственные «ресурсы»: комнаты (пространство), электричество, воду и т.д., которые изолированы от других квартир. Все квартиры в доме делят общие ресурсы дома, но каждая квартира использует их независимо.
Жители квартиры — это аналог приложений, работающих в контейнере. Они используют ресурсы квартиры (контейнера) для своих нужд.
Таким образом, контейнеры позволяют изолировать приложения и их зависимости друг от друга, а также обеспечивают эффективное использование ресурсов сервера.
Квартиры связаны между собой через узлы, а узлы – это соединения между квартирами путем труб, лифтов и проводов.
Справа – терминал с логами процесса сборки Docker-образа.
Тут, с правой стороны интерфейса, представлен процесс сборки Docker-образа на основе указанных слоев и инструкций в Dockerfile.
Docker-образ простыми словами — это шаблон или «контейнер», который содержит все необходимое для запуска приложения, включая код, зависимости, библиотеки и другие компоненты.
Docker-образы состоят из слоев, каждый из которых представляет изменения относительно предыдущего состояния образа.
Если придерживаться нашей аналогии с многоэтажным домом, то справа происходит комплексный ремонт квартиры (черновая отделка). Здесь слои, это как этапы ремонта в помещении, представляют собой проведение электропроводки, шпаклевку стен, поклейку обоев и установку сантехники.
Таким образом, Docker – это приложение. Мы это приложение устанавливаем на серверах (то есть в нашу «черновую отделку»), а программа выполняет собой функцию труб, лампочек + решение, какого цвета будут обои в квартире.
Программисты занимаются этой частью.
А как развернуть всю эту работу в квартире – это работа Devops-инженера.
Резюмируя, DevOps-инженер занимается созданием инфраструктуры для разработки и развертыванияпрограммного обеспечения.
Также вы могли заметить в нижней части Kubernetes Dashboard сообщение об ошибках типа «Back‑off restarting failed container» в нижней части Kubernetes Dashboard:
Эти сообщения указывают на проблемы с запуском контейнера, что может потребовать дополнительного изучения и решения со стороны команды разработки или DevOps.
5 причин стать DevOps`ом
Вот пять причин, почему стоит стать DevOps-инженером:
-
Важность DevOps-инженера в команде DevOps-инженер играет ключевую роль в команде разработки. Он обладает уникальными знаниями и навыками, которых нет у других членов команды. Зачастую, DevOps-инженер - это единственный специалист такого рода в отделе или даже во всей компании. Он в курсе всех проектов и работает над многими из них одновременно.
-
Высокий уровень заработка Зарплата DevOps-инженера обычно выше средней по отрасли. DevOps-инженеры часто занимают одни из самых высокооплачиваемых позиций в IT-сфере, что делает эту профессию привлекательной с экономической точки зрения.
-
Развитие софт-скиллов Работа DevOps-инженером предполагает не только технические навыки, но и развитие софт-скиллов. Это включает в себя навыки коммуникации, управления временем, решения проблем и многие другие. DevOps-инженеры сдруживают инфраструктуры. Ведьих задачей является интеграция различных систем и технологий в единое целое, чтобы обеспечить эффективное и надежное функционирование IT-инфраструктуры компании.
-
Большое комьюнити DevOps-инженеры также имеют доступ к большому и активному сообществу. Это означает, что они могут обмениваться знаниями и опытом с коллегами по всему миру, участвовать в обсуждениях и получать поддержку при решении сложных задач.
-
Карьерный рост и … … и развитие в «сторону». DevOps-инженеры востребованы на рынке труда, что открывает возможности для карьерного роста и развития. Но есть нюанс! Развитие специалистов довольно интересно. Несомненно, есть рост как вертикальный, так и горизонтальный, а также есть развитие DevOps`а с точки зрения IT и с точки зрения идеологии DevOps. А что это значит – читайте ниже!
Идеальный мэтч команды по методологии DevOps
Развитие DevOps`а с точки зрения IT:
● Архитектор
В этой роли он будет заниматься проектированием и планированием IT-инфраструктуры, а также определением стандартов и методологий для команды разработки.
● ML-Ops специалист
Он занимается развертыванием и поддержкой моделей машинного обучения в производственной среде, обеспечивая их надежную и эффективную работу. Методология MLOps включает в себя практики DevOps, а также специфические процессы, связанные с разработкой и эксплуатацией моделей машинного обучения.
● DevSecOps специалист
В этой роли специалист будет заниматься внедрением практик безопасности на всех этапах жизненного цикла разработки программного обеспечения.
Развитие DevOps с точки зрения идеологии DevOps обозначает, что есть роли, которые пиарят методологию DevOps.
Давайте кратко поговорим о них:
● Евангелист DevOps (IT-евангелист)
Это эксперт по DevOps, который продвигает и развивает практику DevOps в организации. Евангелист DevOps, как правило, имеет хорошую техническую подготовку, но основное внимание в этой роли уделяется межличностному общению и совершенствованию процессов.
💡 Например, когда говорят, что кто-то программист – это обобщение, и на самом деле программисты могут быть специализированы в различных областях, таких как фронтенд-разработка, бэкенд-разработка и т.д. Аналогично, в мире DevOps говорят о «евангелистах DevOps», которые специализируются на продвижении и внедрении концепций DevOps в различных командах и организациях.
● Менеджер по выпуску/консультативный совет по изменениям
Организации, которые еще не перешли на DevOps или все еще находятся на ранних стадиях перехода, могут иметь отдельную группу, называемую консультативным советом по изменениям или отдельную должность менеджера по выпуску. Цель таких ролей — гарантировать, что любое новое прикладное программное обеспечение, выпускаемое в производство, соответствует стандартам качества и безопасности и имеет соответствующие разрешения руководства.
Эти роли были особенно важны, когда выпуск программного обеспечения был сопряжен с большим риском. Однако эти роли становятся менее важными (если не устаревшими) с использованием таких стратегий, как автоматизированное тестирование и скрытое развертывание.
● Эксперт по автоматизации
Ожидается, что каждый DevOps-инженер будет обладать опытом в области автоматизации. Тем не менее в организации нередко существует отдельная должность эксперта по автоматизации или инженера по автоматизации. Это может быть человек, который занимается управлением инструментами CI/CD или разработкой и обслуживанием автоматизированных наборов тестов.
● Разработчик программного обеспечения
В большинстве случаев звание разработчика программного обеспечения присваивается людям, которые пишут либо интерфейсный, либо серверный код приложения, либо и то, и другое. Это люди, которых исторически называли «компьютерными программистами» до появления гибкого
● QA
Группа обеспечения качества (QA) отвечает за выявление сбоев в программном обеспечении. Инженеры по контролю качества исторически фокусировались на ручном тестировании нового кода приложения, чтобы убедиться, что оно немедленно не выйдет из строя («дымовое тестирование»), не нарушит существующую функциональность («регрессионное тестирование») или не вступит в конфликт с любыми другими новыми функциями («интеграционное тестирование»).
Заключение
Помните, что DevOps – это не просто набор инструментов, это культура, способ организации работы и взаимодействия в команде, направленный на улучшение процессов разработки и поставки ПО. Используйте полученные знания, стремитесь к автоматизации, сотрудничеству и непрерывному улучшению.
В методологии DevOps инженеры DevOps, несомненно, занимают ключевую роль. Ведь это люди, увлеченные поиском новых решений, готовые к постоянному развитию и стремящиеся к созданию более надежных и эффективных систем. Пусть ваш путь в области DevOps будет полон достижений и новых высот! 🎉
Используемые источники
Кто такой инженер DevOps? | Atlassian
Культура DevOps | Atlassian
Статья разработана
Корчагиным Ильей @workitlive
Богданович Елизаветой
Автор: l_bogdanovich