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

Образ DevOps

DevOps — разработка + эксплуатация
Это что?
Чтобы понять, что такое DevOps, нам нужно понять, как программное обеспечение доставлялось пользователям до того, как DevOps стал чем-то особенным.

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

Такой подход к доставке программного обеспечения часто называют водопадом. Команда разработчиков должна выполнить все требования перед доставкой в ​​отдел эксплуатации. Следовательно, могут пройти месяцы, прежде чем программное обеспечение станет доступным. — Кроме того, если во время разработки происходят какие-либо изменения в требованиях пользователей, их часто бывает трудно включить в текущий цикл. Новым требованиям придется подождать… до тех пор, пока не будут запланированы следующие изменения.

  • Команда разработчиков может также включить функцию, для которой у отдела эксплуатации нет инфраструктуры для ее запуска. Команды в конечном итоге работают обособленно, не зная, что делают другие… обвиняют друг друга в том, почему продукт терпит неудачу или недоступен для клиентов…
    Это был мир до DevOps…
    Введите DevOps…
    DevOps начинался как способ решения проблем, связанных с традиционными методами доставки программного обеспечения. Можно ли выпускать программное обеспечение быстрее, выпускать обновления даже несколько раз в день и одновременно поддерживать миллионы пользователей (т. е. масштабируемость)?

  • Чтобы обеспечить желаемый тип доставки программного обеспечения, Google запустил так называемую Site Reliability Engineering-SRE (около 2003 г.). (См. электронные книги) в конечном итоге превращаясь в роли DevOps и SRE, которые становятся четко определенными ролями в индустрии программного обеспечения. Цель состояла в том, чтобы обеспечить более слаженную совместную работу команд разработки и эксплуатации, предоставляя при этом качественное и надежное программное обеспечение.

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

  • CI/CD (непрерывная интеграция и непрерывная доставка/развертывание)
  • Конфигурация программного обеспечения и автоматизация
  • Услуги облачной инфраструктуры
  • Контейнеризация и оркестрация контейнеров
  • Мониторинг и оповещение

CI/CD — непрерывная интеграция и непрерывная доставка/развертывание

  • Часто несколько разработчиков работают над одним и тем же программным продуктом. Как они эффективно сотрудничают, избегают конфликтов кода, гарантируют выпуск кода без ошибок (также известное как тестирование) и развертывают программное обеспечение в инфраструктуре, в которой к нему обращаются пользователи? Они используют непрерывную интеграцию и конвейер непрерывной доставки.
  • Хорошо написанная статья здесь на Kodekloud хорошо разбирается в том, что такое конвейер CICD.
  • Популярные инструменты, используемые для создания пайплайнов CI/CD — Jenkins, действия Github, Gitlab, CircleCI.

Автоматизация

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

  • Популярные инструменты для автоматизации предоставления инфраструктуры: Terraform (самый популярный), AWS cloudFormation, Pulumi.

  • Популярные инструменты для управления конфигурацией программного обеспечения: Ansible, Chef, Puppet.

Услуги облачной инфраструктуры

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

Технологии контейнеризации и оркестрации контейнеров

  • Приложения хороши, когда они могут надежно работать в любой базовой инфраструктуре с минимальными заботами о зависимостях. Но в первые дни распространенной проблемой с доставкой программного обеспечения была известная фраза: «Это работает на моей машине, но не работает на вашей». Чтобы преодолеть эту проблему, были разработаны технологии контейнеризации, позволяющие упаковывать приложения в блоки, называемые контейнерами, чтобы они могли работать в любой операционной системе (Linux, Windows MacOs) или среде.
    • Популярные инструменты контейнеризации и оркестрации контейнеров: Docker, Kubernetes.

Мониторинг и оповещение
Ваше программное обеспечение работает без сбоев… но как узнать, если произошел внезапный сбой, и пользователи больше не могут получить доступ к вашему приложению? Как вы отслеживаете трафик? Как быстро восстанавливаться после неудач? …Представьте, что Netflix отключается на несколько дней или ваше банковское приложение отключается на 5 часов… это кошмар команды SRE. Чтобы обнаруживать проблемы и немедленно реагировать на них, вам необходимо следить за своим приложением. Собранные метрики могут использоваться для принятия бизнес-решений, планирования перерывов в обслуживании и проблем с безопасностью. Команды DevOps и SRE часто используют эти показатели для измерения своей производительности. Все дело в обратной связи как можно скорее
-Общие инструменты для мониторинга и оповещения: AWS CloudWatch, Promotheus, Grafana, стек ELK.

Как проникнуть в DevOps?

  • Навык среднего уровня с общим языком программирования. Лично я рекомендую Python или Golang. Бесплатные ресурсы для использования: курс Python freecodecamp, Codecademy, w3schools.
  • Узнайте об общих компьютерных сетях. Как работает Интернет, DNS и т. д.
  • Узнайте об ОС Linux. Облако работает на Linux. Кодеклауд.com — отличное место, чтобы начать с их обязательного курса DevOps и базового курса Linux.

  • Изучайте Ансибль.

  • Выберите поставщика облачных услуг и узнайте об их услугах. Поработайте над лабораториями и пройдите сертификацию облачных вычислений. например, помощник архитектора облачных решений AWS. Acloudguru, Learn.cantrill.io, хорошие платформы для обучения

  • Изучайте Терраформ. Курс Дерека Моргана отличный ресурс

  • Если возможно, запишитесь на буткемп DevOps. например techworldwithnana, Darey.io. Вы начинаете работать над проектами, создаете портфолио, которое можете показать рекрутерам.

  • Изучайте и практикуйте Docker и Kubernetes с помощью kodekloud.com

  • Документируйте свои проекты на Github. Расскажите о своих проектах

  • Сеть на LinkedIn, подать заявку на роли.

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

Дополнительные ресурсы: дорожная карта