Профессия DevOps

в 9:15, , рубрики: devops, docker, kubernetes, грейд

Введение

Dev и Ops, DevOps, DEVOPS – как много о нем сейчас разговоров. И не зря!

DevOps – это перспективное направление, которое будет продолжать развиваться и влиять на IT-индустрию в ближайшие годы, а то и десятилетия.

Это подтверждается ростом числа вакансий, связанных с DevOps, и увеличением спроса на специалистов в этой области. Например, анализ данных с hh.ru показывает, что количество DevOps-вакансий за год значительно выросло.

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

DevOps: кто это? Разработчик? Системный Администратор? Менеджер? Или все вместе?

DevOps – это не просто должность или роль, это целая методология!

Предлагаю начать с разбора понятия DevOps, продолжим с разбора профессии DevOps-инженер, и завершим его ролью и стеком технологий.

Что такое DevOps?

DevOps – это философия или культура (и даже методология), которая создает единую среду работы внутри команды разработки и поддержки. Она включает процессы и специальные технические решения. Главная цель улучшить и ускорить связь между разными специалистами IT-отдела.

Имя DevOps происходит от двух аббревиатур:

Dev – разработка и Ops – операции.

Ранее это были две разные сферы. «Почему?» – спросите вы.
Раньше было разделение между разработчиками и системными администраторами, операционными специалистам.

Dev и Ops

Dev и Ops

Чуть подробнее: разработчики были ответственны за создание программного кода, в то время как администраторы систем и операционные специалисты занимались его развертыванием, обслуживанием и мониторингом. Это приводило к разделению и даже конфликтам между этими двумя сферами. Внедрение методологии DevOps позволило объединить эти функции, сделав процессы разработки и эксплуатации более согласованными и эффективными.

Dev + Ops

Dev + Ops

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

DevOps = люди + культура + инструменты

Кто такой DevOps-инженер?

От DevOps-инженера ожидают такие навыки, которые охватывают как разработку, так и эксплуатацию. Но это не все! Также требуются навыки межличностного общения, которые помогут преодолеть разногласия между отдельными командами.

Однако согласно исследованию тенденций развития DevOps, проведенному компанией Atlassian одним из наиболее распространенных препятствий на пути внедрения DevOps является недостаток навыков у сотрудников.

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

DevOps-инженер – это ИТ-специалист широкого профиля, который должен обладать обширными знаниями как в области разработки, так и в области эксплуатации, включая кодирование, управление инфраструктурой, системное администрирование и цепочки инструментов DevOps.

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

Инженеры DevOps должны хорошо разбираться в общей системной архитектуре, настройке и администрировании, а также иметь опыт работы с набором инструментов для разработчиков и практиками (такими как использование системы управления версиями, предоставление и получение обзоров кода, написание модульных тестов и знакомства с принципами agile) (по agile читай статью: Agile: суть, принципы, плюсы и минусы, особенности внедрения).

А что по задачам?

Частые задачи для DevOps-инженеров:

  1. Автоматизация процессов. DevOps-инженеры создают и поддерживают инструменты для автоматизации разработки, тестирования и развертывания программного обеспечения, что позволяет ускорить и оптимизировать рабочие процессы.

  2. Непрерывная интеграция и непрерывное развертывание (CI/CD). Разработка и поддержка систем CI/CD, которые позволяют организациям быстро и надежно выпускать новые версии приложений.

  3. Мониторинг и логирование. Настройка и управление системами мониторинга и логирования для обеспечения стабильности и оперативного реагирования на инциденты в приложениях и инфраструктуре.

  4. Безопасность и управление доступом. Реализация мероприятий по обеспечению безопасности для инфраструктуры и приложений, включая управление доступом, шифрование и обеспечение соответствия требованиям безопасности.

  5. Оптимизация ресурсов. Анализ и улучшение использования ресурсов для повышения эффективности и снижения затрат на инфраструктуру.

  6. Управление конфигурацией. Администрирование и настройка серверов, устройств и программных приложений для удовлетворения специфических требований проекта или операционной среды.

  7. Контейнеризация и оркестрация. Развертывание и управление контейнерами, например, с использованием Docker и Kubernetes, для упрощения разработки, тестирования и производства.

  8. Поддержка разработки и эксплуатации. Содействие в коммуникации и сотрудничестве между командами разработки и эксплуатации для улучшения качества продукции и операционной эффективности. 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;
2) Настройка простого конвейера CI на основе существующей CI;
3) Использование менеджера пакетов (pip, NPM, apt)

1) Определение разницы между Continuous Integration и Delivery Integration;
2) Проектирование и постановка конвейера непрерывной интеграции на основе требований;
3) Использование ряда менеджеров пакетов

1) Способность различать Continuous Delivery и Continuous Deployment и советовать, какой из них лучше;
2) Способность предложить и настроить CI (много конвейеров) на основе потребностей команды разработчиков;
3) Способность указать на распространенные ошибки в использовании менеджера пакетов и оптимизация его использования

Мониторинг (настраивание окружения, логирования и мониторинга для существующих и будущих информационных систем)

1) Знание, какие преимущества есть у логирования и умение его использовать;
2) Использование визуализации метрик (логов) для устранения проблем;
3) Знание, как реагировать на ошибки с помощью существующей Readme + обновление/создание новых Readme

1) Построение системы агрегации журналов, используя собственное решение на основе предоставленного дизайна;
2) Построение визуализации метрик в инструменте;
3) Определение разницы между log и metric + объяснение их различий для команды

1) Предоставление вариантов агрегирования журналов + объяснение плюсов и минусов вариантов;
2) Разработка рекомендаций по метрикам системы или приложения, отслеживание которых предотвратит проблемы;
3) Может посоветовать команде разработчиков предупреждения (prometeus rules), которые помогут им отреагировать на возникшие проблемы;
4) Настраивание системы логирования

Опыт работы с платформой управления контейнерами

1) Понимание, что такое контейнеры и как они работают + запуск приложения в контейнере;
2) Понимание, что такое оркестратор и что он делает;
3) Понимание разницы между контейнером Docker и образом Docker;
4) Понимание разницы между контейнером и виртуальной машиной

1) Знание, как работает среда выполнения контейнера (подключение volumes, networks, dns, конфигурация контейнера, проверка работоспособности и т.д.);
2) Настройка оркестратора и управление им

1) Может посоветовать команде разработчиков, как создавать и запускать контейнеры;
2) Может разработать платформу на основе оркестратора, которая лучше всего подходит в зависимости от требований;
3) Понимание, что контейнер — это просто процесс Linux с некоторой степенью изоляции + понимание, как происходит данная изоляция

Operations (умение писать скрипты на bash)

1) Написание простого сценария на Bash;
2) Проверка состояния процессов в системе;
3) Знание системных сигналов + знание, как использовать эти сигналы

1) Может писать сложные сценарии, используя условные операторы и циклы;
2) Умение отлаживать процесс(-ы): просмотр журналов, использование ресурсов и т.д.;
3) Может посоветовать команде разработчиков, как обрабатывать системные сигналы в приложении

1) Знание, когда нужно использовать bash, а когда – другой язык программирования;
2) Может предложить исправления в коде на основе сигналов

Networks and cloud (Опыт внедрения и настройки решений по ИБ контейнеризации)

1) Знание, как работает DNS;
2) Понимание концепции RBAC;
3) Знание концепции прокси и балансировщика нагрузки;
4) Знание разницы между IaaS, PaaS и SaaS

1) Настройка правил RBAC в соответствии со спецификацией (минимально возможные разрешения);
2) Настройка прокси-сервер с помощью инструментов (Nginx и т.д.);
3) Знание различных классов облачных предложений, т. е. хранилища объектов, балансировщик нагрузки + знание, как их использовать

1) Понимание влияния DNS на производительность в большом кластере;
2) Способен спроектировать настройку RBAC (роли, политики, группы) для всей системы, т.е. кластера;
3) Использование предложений PaaS/SaaS

Понимание концепции и особенностей подхода Infrastructure-as-Code

1) Знание концепции IaC и ее преимущества;
2) Понимание, что сервер должен управляться автоматически с помощью какого-либо инструмента;
3) Использование различных способов настройки приложения (например, env vars, файлы)

1) Предотвращение типичных ошибок при настройке IaC с помощью инструментов или процессов;
2) Может автоматически управлять сервером с помощью какого-либо инструмента;
3) Может настроить доставку конфигурации с помощью существующего инструмента (например, оркестратора или некоторого ПО с открытым исходным кодом, или SaaS)

1) Может сообщить о недостатках своей/облачной инфраструктуры;
2) Понимание, что инструменты (docker-compose и т.д.) не подходят для облачной инфраструктуры. Может посоветовать, как мигрировать в облако;
3) Может разработать систему управления конфигурацией;
4) Может обучать команды разработчиков для использования и настройки их приложений в облачной инфраструктуре

Делаем шаг в мир разработки Devops

Предлагаю вам окунуться в один рабочий процесс Devops-инженера и прочувствовать всю его значимость работы. Давайте рассмотрим работу Devops-инженера:

Интерфейс Kubernetes

Интерфейс Kubernetes

Что тут изображено?

Изображение иллюстрирует работу Devops-инженера, который следит за работой кластера Kubernetes и процессом сборки Docker-образов.

Звучит сложно? Сейчас мы с вами попробуем детально разобраться с каждым понятием! Выделим «сложные» слова: Kubernetes, контейнер, узлы с соединениями, Docker-образ, слои.

  • Теперь мысленно разделите рабочий стол на две части: левую и правую.

  • Слева – интерфейс Kubernetes Dashboard.

  • Kubernetes (K8s) — это такая система контейнеров, которая позволяет автоматически разворачивать, масштабировать и управлять приложениями в контейнерах.

  • Kubernetes можно сравнить с управлением многоквартирным домом. Владельцы квартир (приложения) живут в доме (кластере Kubernetes) и пользуются общими ресурсами, такими как вода, электричество и системы безопасности.

На «простом» языке графически представим Kubernetes:

Графическое представление работы Kubernetes на примере многоквартирного дома

Графическое представление работы Kubernetes на примере многоквартирного дома

Kubernetes, как управляющая компания, обеспечивает работоспособность и безопасность всего дома, управляет доступом к ресурсам, разрешает конфликты и обеспечивает, чтобы все жильцы (приложения) могли жить в доме (кластере) комфортно и безопасно. На языке «посложнее» графически представим Kubernetes:

Графическое представление работы Kubernetes

Графическое представление работы Kubernetes

Итак, слева отображается графическое представление запущенных контейнеров, представленных в виде узлов с соединениями, отображающими их взаимосвязи и текущий статус.
А вот теперь давайте поподробнее разберемся с терминами: контейнеры и узлы!

Контейнер можно сравнить с квартирой в многоэтажном доме.
Вот как это работает:
Многоэтажный дом — это аналог сервера. Он имеет определенное количество ресурсов: пространство, электричество, воду и т. д.
Квартира — это аналог контейнера. Она имеет свои собственные «ресурсы»: комнаты (пространство), электричество, воду и т.д., которые изолированы от других квартир. Все квартиры в доме делят общие ресурсы дома, но каждая квартира использует их независимо.
Жители квартиры — это аналог приложений, работающих в контейнере. Они используют ресурсы квартиры (контейнера) для своих нужд.
Таким образом, контейнеры позволяют изолировать приложения и их зависимости друг от друга, а также обеспечивают эффективное использование ресурсов сервера.
Квартиры связаны между собой через узлы, а узлы – это соединения между квартирами путем труб, лифтов и проводов.

Графическое представление терминов «Контейнер» и «Узлы»

Графическое представление терминов «Контейнер» и «Узлы»

Справа – терминал с логами процесса сборки Docker-образа.

Тут, с правой стороны интерфейса, представлен процесс сборки Docker-образа на основе указанных слоев и инструкций в Dockerfile.

Docker-образ простыми словами — это шаблон или «контейнер», который содержит все необходимое для запуска приложения, включая код, зависимости, библиотеки и другие компоненты.

Docker-образы состоят из слоев, каждый из которых представляет изменения относительно предыдущего состояния образа.

Если придерживаться нашей аналогии с многоэтажным домом, то справа происходит комплексный ремонт квартиры (черновая отделка). Здесь слои, это как этапы ремонта в помещении, представляют собой проведение электропроводки, шпаклевку стен, поклейку обоев и установку сантехники.

Таким образом, Docker – это приложение. Мы это приложение устанавливаем на серверах (то есть в нашу «черновую отделку»), а программа выполняет собой функцию труб, лампочек + решение, какого цвета будут обои в квартире.
Программисты занимаются этой частью.

А как развернуть всю эту работу в квартире – это работа Devops-инженера.

Резюмируя, DevOps-инженер занимается созданием инфраструктуры для разработки и развертыванияпрограммного обеспечения.

Также вы могли заметить в нижней части Kubernetes Dashboard сообщение об ошибках типа «Back‑off restarting failed container» в нижней части Kubernetes Dashboard:

Интерфейс Kubernetes

Интерфейс Kubernetes

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

5 причин стать DevOps`ом

Вот пять причин, почему стоит стать DevOps-инженером:

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

  2. Высокий уровень заработка Зарплата DevOps-инженера обычно выше средней по отрасли. DevOps-инженеры часто занимают одни из самых высокооплачиваемых позиций в IT-сфере, что делает эту профессию привлекательной с экономической точки зрения.

  3. Развитие софт-скиллов Работа DevOps-инженером предполагает не только технические навыки, но и развитие софт-скиллов. Это включает в себя навыки коммуникации, управления временем, решения проблем и многие другие. DevOps-инженеры сдруживают инфраструктуры. Ведьих задачей является интеграция различных систем и технологий в единое целое, чтобы обеспечить эффективное и надежное функционирование IT-инфраструктуры компании.

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

  5. Карьерный рост и … … и развитие в «сторону». 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

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js