![](https://habrastorage.org/getpro/habr/upload_files/906/48d/3cd/90648d3cd56fe5e852d9d78c5f44c9a8.png)
Что касается нынешнего ИТ-рынка, среда DevOps — один из лучших вариантов для ИТ-специалистов с точки зрения заработной платы и карьерного роста. И мне довольно часто задают вопрос: «Как стать инженером DevOps?»
В этом блоге я попытаюсь ответить на него на примере своего собственного опыта работы DevOps в различных организациях.
Многие утверждают (включая меня), что нет ничего похожего на “DevOps Engineer” или “DevOps Team”, потому что это не вещь. Однако сейчас все в отрасли уже привыкли к термину «инженер DevOps», и если вы понимаете философию DevOps, эти названия не имеют большого значения.
При этом существует несколько неправильных представлений о том, что на самом деле означает этот термин. Одно из таких заблуждений — «DevOps — это автоматизация». Но чтобы стать DevOps-инженером, недостаточно развить навыки, связанные с автоматизацией. Википедия говорит:
DevOps (обособленное сочетание разработки и эксплуатации) — это культура, движение или практика, которая подчеркивает сотрудничество и общение как разработчиков программного обеспечения, так и других специалистов в области информационных технологий (ИТ) при автоматизации процесса доставки программного обеспечения и изменений инфраструктуры.
Из этого определения ясно, что DevOps не зависит от каких-либо инструментов или технологий. Это философия, согласно которой разные ИТ-команды должны работать вместе для достижения лучших и быстрых результатов за счет постоянной обратной связи.
Вот интересный график тенденций, показывающий популярность DevOps за последние 5 лет.
![](https://habrastorage.org/getpro/habr/upload_files/f7b/0b0/001/f7b0b0001bda91c08babd3853c757f0a.png)
Организациям, пытающимся внедрить у себя DevOps, требуются люди с навыками совместной работы, готовые изменять и внедрять новые технологии, с хорошим пониманием систем, средств автоматизации, инструментов CI/CD, систем контроля версий и сетей, с опытом использования инструментов управления проектами и т. д. Это необходимо для того, чтобы приложение было запущено на рынок без особых задержек.
Кроме того, проект или конвейер, разработанный командой, должен обеспечивать небольшие обновления или выпуски без серьёзного ручного вмешательства. Этого можно добиться только в том случае, если произойдет культурный сдвиг в работе команды.
Как стать инженером DevOps
Вы должны понимать, что DevOps не является спецификой для разработчиков или системных инженеров. Это для тех, кто увлечен эволюционирующими практиками и технологиями, и готов работать в совместной среде, где всё автоматизировано, чтобы сделать жизнь каждого человека легче.
В этой статье объясняется, как вам следует подготовиться к использованию инструментов и технологий для адаптации и работы в культуре DevOps.
В этой статье я рассмотрел многие темы. Новичок не может быть мастером всего. Однако наличие достаточного количества знаний в этих областях поможет вам продолжить карьеру в DevOps.
Поймите культуру DevOps
Прежде всего, необходимо понять культуру DevOps. Всё дело в объединении людей для эффективной работы над общей целью.
ИТ-лидеры и лица, принимающие решения, должны убедиться, что вся команда усвоила культурные аспекты DevOps, прежде чем переходить к наборам инструментов, потому что это позволяет избежать большой путаницы в команде. Обычно этим пренебрегают, и в конечном итоге компании собирают «команду DevOps» для админских задач, которая снова становится изолированной.
Люди перестанут указывать пальцем на различные проблемы, как только поймут, что в случае задержки или проблемы с реализацией проекта все его участники несут одинаковую ответственность.
Как только вы начнете практиковать культуру DevOps, вы перестанете говорить, что «это синоним CI/CD и автоматизации».
Узнайте больше о системах *nix
Мы живем в эпоху, когда не можем жить без систем Linux/Unix. Вы должны лучше понять и получить практические знания о различных дистрибутивах Linux, широко используемых организациями (RHEL, Centos, Ubuntu, CoreOS и т.д.).
Согласно тематическому исследованию Linux Foundation, 90 % рабочей нагрузки в публичных облаках обрабатывается на Linux.
![](https://habrastorage.org/getpro/habr/upload_files/bb8/179/1e9/bb81791e94d9dc4640425aa68fe475b9.png)
Вот еще одно интересное исследование Redhat, в котором показаны различные дистрибутивы Linux, используемые в публичных облаках:
![](https://habrastorage.org/getpro/habr/upload_files/c44/a1f/e8a/c44a1fe8a9ba5fc16a04a1898ab39444.png)
Теперь у вас есть достаточно причин, по которым вам стоит сосредоточиться на Linux.
Когда дело доходит до Linux, это всё про терминал, графический интерфейс менее предпочтителен в мире *nix.
Для запуска Linux-серверов вы можете использовать VirtualBox или AWS/GCP/Azure и множество других облачных платформ.
Начать изучение можно со следующего:
Разберитесь в процессе загрузки Linux.
Установите и настройте веб-серверы (Apache, Nginx, Tomcat и т.д.). И узнайте, как работают веб-серверы.
Узнайте, как работают процессы Linux.
Узнайте, как работает SSH.
Почитайте о различных файловых системах.
Изучите ведение системного журналирования, мониторинга и устранения неполадок.
Узнайте о важных протоколах (SSL, TLS, TCP, UDP, FTP, SFTP, SCP, SSH).
Научитесь управлять сервисами и попробуйте создать сервис самостоятельно (Initd, Systemd).
Попробуйте разместить статические и динамические сайты на веб-серверах.
Настройте балансировщики нагрузки и реверс-прокси (Nginx, HAproxy и т.д.).
Сломайте что-нибудь и научитесь устранять неполадки.
Разберитесь, как работают компоненты инфраструктуры
Основным строительным блоком любой организации является её инфраструктура. Это может быть облачный или локальный центр обработки данных. Общее понимание компонентов инфраструктуры является обязательным для человека, который хочет практиковать или работать в среде DevOps. Было бы полезно, если бы вы имели базовое представление о содержимом этого списка:
Сети
Подсеть
Публичная сеть
Частная сеть
Обозначения CIDR
Статические/динамические IP-адреса
Firewall
Прокси
NAT
Внешний и локальный DNS
Диагностика сети
VPN
Хранилище
SAN
Бэкапы
NFS
Отказоустойчивость(HA)
Кластер
Механизмы отказоустойчивости
Аварийное восстановление
Безопасность
PKI Infrastructure
SSL-сертификаты
Технология единого входа(SSO)
Active Directory/LDAP
Балансировщики нагрузки
Балансировка на разных уровнях модели OSI (L4, L7)
Алгоритмы балансировки нагрузки
Reverse Proxy
Могло быть и больше пунктов, но я выделил только ключевые компоненты ИТ-инфраструктуры.
Научитесь автоматизировать
Автоматизация стала важным аспектом каждой организации. Мы больше не создаем серверы вручную. Мы это автоматизируем.
Подготовка серверов, настройка приложений, развертывание — всё должно быть автоматизировано. Вы можете изучить любой из следующих наборов инструментов DevOps, которые соответствуют вашим потребностям:
Для среды разработки
Vagrant
Docker Desktop
Minikube
Minishift
Для обслуживания инфраструктуры
Terraform
CLI (соответствующего облачного провайдера)
Для управления конфигурацией
Ansible
Chef
Puppet
Saltstack
Управление образами ВМ
Packer
Контейнеры, распределенные системы и Service Mesh
Внедрение контейнеров растет день ото дня. Организация, в которой вы работаете, может сейчас не использовать контейнеры. Однако лучше всего иметь практические знания о таких технологиях, как Docker. Это даст вам некоторое конкурентное преимущество перед коллегами.
Как только вы изучите Docker, можете попробовать его инструменты кластеризации и оркестрации, такие как Kubernetes, Docker Swarm и т.д. Эти платформы лучше всего подходят для архитектуры на основе микросервисов.
Вот интересная тенденция использования Kubernetes по данным Datadog:
![](https://habrastorage.org/getpro/habr/upload_files/f9b/ab5/958/f9bab59580b622a99b156e28d2de4b1a.jpg)
А вот пятилетняя тенденция роста поисковых запросов по Kubernetes:
![](https://habrastorage.org/getpro/habr/upload_files/acc/28a/154/acc28a154f13fd94e8012b318b6c8bba.png)
Кроме того, многие инженеры проявляют интерес к изучению Kubernetes, и в 2021 году немало людей получат сертификаты по этой технологии (CA, CKAD и CKD).
Service mesh — это выделенный слой инфраструктуры с низкой задержкой для обеспечения взаимодействия между сервисами. Он даёт массу возможностей для межсервисного взаимодействия: балансировки нагрузки, шифрования трафика, авторизации, трассировки, обнаружения сервисов (service discovery) и использования паттерна автоматического выключения (circuit breaker), с которым можно ознакомиться тут. Service mesh — это сложная тема, когда дело касается распределенных систем. Если вы новичок в работе с инструментами для контейнеров, вы можете изучить это после получения хороших знаний об архитектуре на основе микросервисов.
Журналирование и мониторинг
Журналирование и мониторинг — очень важные аспекты инфраструктуры.
Большинство приложений, развернутых в инфраструктуре, будут создавать журналы. Основываясь на дизайне архитектуры, журналы будут передаваться и храниться в отдельном слое инфраструктуры.
Каждая компания будет иметь отдельный уровень инфраструктуры под журналирование. Обычно используются такие стеки, как Splunk, ELK и Graylog. Кроме того, существует несколько SaaS-компаний, таких как Loggly, которые предоставляют инфраструктуру для централизованного хранилища журналов.
Разработчики, системные администраторы и команда безопасности используют системные журналы для мониторинга, диагностики неполадок, аудита приложений и инфраструктуры.
В каждой организации критически важные приложения будут контролироваться круглосуточно и без выходных. Будут панели мониторинга. Как правило, такие дашборды создаются из источников журналов или метрик, отдаваемых приложением.
Также на основании правил, настроенных в системах мониторинга, будут срабатывать оповещения. Например, оповещение может быть в виде уведомления в Slack или Telegram, задачи в Jira, простого email, SMS-сообщения или даже звонка на телефон. Все схемы оповещения могут разниться от компании к компании.
Как инженер DevOps, вы должны иметь доступ к журналам и уметь устранять неполадки во всех средах (Dev, QA, Stage, Prod). Понимание регулярных выражений очень важно для построения запросов в любом инструменте централизованного хранилища журналов.
Понимание лучших практик в сфере кибербезопасности (DevSecOps)
DevSecOps — ещё одна область, связанная с интеграцией практик безопасности на каждом этапе DevOps. Википедия говорит:
DevSecOps — это расширение DevOps, позволяющее интегрировать методы обеспечения безопасности в подход DevOps. Традиционная централизованная модель группы безопасности должна принимать федеративную модель, позволяющую каждой продуктовой команде учитывать правильные меры безопасности в своих практиках DevOps.
Обзор инфобезопасности в 2020 показывает распределение разных кибератак по регионам:
![](https://habrastorage.org/getpro/habr/upload_files/e92/384/1e5/e923841e57978775a503cf37e762d04d.png)
В облачных средах криптомайнинг является распространенной атакой. В основном это происходит, когда секреты облачного доступа хранятся плохо, так что хакеры получают к ним доступ.
Когда дело доходит до DevOps, управление секретами для приложений и компонентов инфраструктуры должно соответствовать стандартным методам обеспечения безопасности.
А вот основные стандартные практики DevSecOps, опубликованные Redhat:
![](https://habrastorage.org/getpro/habr/upload_files/be0/5cb/f90/be05cbf90a6b2a5bd3c8d1dba4ae3d02.png)
Hashicorp Vault — отличный инструмент для управления секретами. Существует множество рабочих процессов для управления секретами среды.
Изучайте программирование
В современном мире мы относимся ко всему как к коду. Несмотря на то, что существует достаточно инструментов для всевозможных автоматизаций, вам могут потребоваться настраиваемые функции, отсутствующие в инструменте. В таких случаях навыки программирования помогут написать небольшой плагин или скрипт.
Например, для написания конвейера Jenkins в декларативном виде (как код) требуется знания Groovy; кастомный модуль Ansible требует знания Python; для написания оператора Kubernetes требуется опыт работы с Go.
Обратите внимание на следующие языки программирования, которые часто используются для написания скриптов или небольших программ:
Bash/Shell
Python
Go
Go действительно становится популярным в сфере DevOps. Его используют многие инструменты. Например, Kubernetes и Terraform написаны на Go. JFrog исследовал внедрение Go во время GopherCon, и 18 % респондентов заявили, что используют этот язык для работы, связанной с DevOps.
![](https://habrastorage.org/getpro/habr/upload_files/2ae/4b3/24b/2ae4b324bed90121a88376ca3d64322c.png)
Изучите Git, научитесь документировать, узнайте о GitOps
Очень важно применять систему контроля версий ко всему, что вы делаете (кроме паролей и секретов). Git — лучший инструмент для этого. Для него доступно множество руководств, и изучение важных операций с Git не займет много времени.
Вы можете начать с Github или Bitbucket в качестве удаленного репозитория кода.
А как только вы поймете Git, изучите GitOps. Что этот такое?
GitOps — способ реализации непрерывного развертывания облачных приложений. Он сосредоточен на ориентированном на разработчиков опыте работы с инфраструктурой, используя инструменты, с которыми разработчики уже знакомы, включая Git и инструменты непрерывного развертывания.
Ещё очень важно документировать всё, что вы делаете. Каждый репозиторий должен иметь файл README, лучше объясняющий ваш код. Хорошая документация поможет не только вам, но и тем, кто попытается использовать вашу кодовую базу.
Освойте непрерывный жизненный цикл доставки приложений
Когда дело доходит до жизненного цикла доставки приложений, вам необходимо знать три важных концепции.
Continuous Integration (Непрерывная интеграция)
Continuous Delivery (Непрерывная доставка)
Continuous Deployment (Непрерывное развертывание)
Научитесь использовать инструменты CI/CD, такие как Jenkins, Gitlab CI, Travis CI и т.д. Вот хорошее графическое представление процесса CI/CD:
![](https://habrastorage.org/getpro/habr/upload_files/180/016/359/18001635994e01f0c6d08c41c731a35a.jpg)
DevOps vs SRE
SRE — еще одна развивающаяся тема в сообществе DevOps. Это набор практик и философий, разработанных Google. Вот что компания говорит о DevOps и SRE:
DevOps и SRE — это не два конкурирующих метода разработки и эксплуатации программного обеспечения, а, скорее, близкие друзья, призванные разрушить организационные барьеры для более быстрой разработки лучшего программного обеспечения.
Я рекомендую изучить официальные документы от Google:
Читать, читать и еще раз читать
Нет ничего лучше для приобретения знаний, чем чтение. Прочтите хотя бы один технический блог DevOps, связанный с инженерией. Следите за всеми значимыми инженерными блогами, такими как Netflix, Twitter, Google и т.д. Узнайте, как они используют правильный набор инструментов, стратегии развертывания и свои последние проекты с открытым исходным кодом.
Заключение
Инструменты и процессы, задействованные в DevOps, не ограничиваются тем, что упомянуто в этой статье. Однако это популярные инструменты и технологии с открытым исходным кодом, с которых вы можете начать, чтобы стать инженером DevOps.
А теперь мне интересно услышать от вас:
Что из культуры DevOps вы применяете на практике у себя?
Каков путь становления DevOps инженером вы прошли?
В любом случае, делитесь вашими мыслями об этой статье в комментариях.