Roadmap для тех, кто собирается в DevOps

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

Roadmap для тех, кто собирается в DevOps

В августе 2023 года мы сделали вебинар Roadmap для DevOps, который провёл SRE-инженер Dodo Максим Гусев. Сейчас предлагаем ознакомиться с этим Roadmap в виде статьи, дополненной подробностями. Пойдём от простого к сложному. Если вы уже владеете основными навыками, то сразу переходите к Basic Skills.

Основные навыки

Это навыки, без которых в DevOps вообще никак. Если заглянуть в вакансии, то можно заметить, что практически везде будет указано: «Требуется уверенное знание Linux и Git».

Уверенно пользоваться Linux

Большинство серверов и сетевых устройств работают на Linux (хотя встречаются и другие Unix-подобные ОС). Поэтому путь в DevOps стоит начать именно с подробного изучения Linux. Часто в DevOps идут Linux-администраторы, которым захотелось сменить задачи.

Для DevOps-инженера важно разбираться в устройстве Linux, загрузке и инициализации системы, структуре каталогов и уметь работать в терминале:

  • Создавать и редактировать файлы.
  • Запускать программы и настраивать сервисы (например, в Systemd).
  • Управлять пользователями, группами и правами доступа.
  • Устанавливать ПО из репозиториев, производить сборку и компиляцию.
  • Делать обновления и бэкапы.
  • Настраивать сетевые соединения и фаерволы.
  • Мониторить процессы.
  • Автоматизировать рутину, писать скрипты на Bash.

С технической точки зрения Linux — это ядро операционной системы, но обычно, когда говорят о Linux, имеют в виду GNU/Linux — комбинацию ядра Linux и GNU-компонентов (ПО и библиотек). Для удобства использования и настройки Linux-систем существуют различные «сборки» или дистрибутивы. Разумеется, не нужно сразу осваивать все дистрибутивы, лучше сосредоточиться на самых популярных или тех, которые используются в вашей компании. Например, RHEL и его семейство (CentOS, Fedora), Debian, Ubuntu и специфичные для России: Astra Linux, ALT Linux и т. д.

В Слёрме есть несколько курсов по Linux:

  • Linux База — бесплатный курс, который поможет сформировать навыки Linux-администратора.
  • Linux Мега — практический курс с best practices, написанием скриптов и заглядыванием под капот Linux.

Нужно чётко понять, насколько человек разбирается в сетях, в линуксовом ядре, в том, как работает память и процессы. Ещё важно, какие команды он знает и как их применяет. Я должен быть уверен, что человек в Linux не вводит каждую команду в обнимку с гуглом.

Максим Гусев, SRE-инженер в Dodo

Работать с Git

Git — это система контроля версий. DevOps-инженер должен знать этот инструмент немного глубже, чем разработчик. Проверьте себя: знаете ли вы эти команды, понимаете ли, для чего они нужны и как ими пользоваться?

git diff

git add

git commit

git log

git reset

git branch

git merge

git rebase

git cherry-pick

git stash

git push

git fetch

git pull

git remote

Если не удалось без гугла вспомнить хотя бы треть этих команд, то рекомендуем пройти бесплатный курс Git для начинающих. В нём рассматривается большая часть из этого списка.

Стратегии ветвления GitHub Flow и GitLab Flow. Источник: <a href="https://www.gitkraken.com/learn/git/best-practices/git-branch-strategy" rel="nofollow noreferrer noopener" target="_blank">GitKraken</a>
Стратегии ветвления GitHub Flow и GitLab Flow. Источник: GitKraken

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

Начать изучение Git можно с философии командной разработки и принципов контроля версий кода. В дальнейшем нужно научиться работать с популярными платформами GitHub и GitLab и уметь:

  • Создавать репозитории, организовывать к ним доступ для разных типов пользователей.
  • Решать сложные кейсы по слиянию веток и разрешению конфликтов слияния.
  • Иметь представление, что такое CI/CD (а ещё лучше — разбираться) и как в этом задействован Git.

Я хочу убедиться, что человек реально понимает, чем отличается GitHub Flow от GitLab Flow и как тот или иной flow может повлиять на процессы разработки

Максим Гусев, SRE-инженер в Dodo

Есть и другие Flow: Forking workflow, Centralized workflow. Подробное описание и сравнение различных Flow можно найти в материалах от Atalassian (на русском) и от GitKraken (на английском).

Basic Skills

Владеть инструментами автоматизации

Для DevOps-инженера каждый раз выполнять повторяющиеся действия вручную — плохая практика. Он должен уметь две очень важные вещи:

  • Автоматизировать рутину. То есть всё, что можно относительно просто и надёжно автоматизировать у себя, у разработчиков, у тестировщиков, у саппорта и других команд, нужно постараться автоматизировать.
  • Добиваться оптимизации. Оптимизация — это уже результаты проделанной работы по автоматизации, когда процессы разработки становятся быстрее и проще и никому при этом не вредят.

DevOps-инженерам и системным администраторам когда-то потребовалось избавиться от однотипной работы с сотнями серверов. Так появились инструменты автоматизации развёртывания: Ansible, Puppet, Chef. С их помощью один DevOps-инженер может в короткий срок поднять целую армию серверов с заранее сконфигурированными настройками.

В большинстве вакансий DevOps-инженеров сейчас требуется знание Ansible. Поскольку это самый популярный инструмент, мы рекомендуем изучать его. Что точно нужно знать и уметь в Ansible:

  • Знать основные примитивы (плейбуки, модули, плагины).
  • Знать, что такое идемпотентность.
  • Уметь читать и писать плейбуки.
  • Уметь работать с модулями, ролями и плагинами.

Я люблю спрашивать разницу между модулем и плагином. Потому что оказывается, что многие вообще не знают, что есть что и за что это всё отвечает.

Максим Гусев, SRE-инженер в Dodo.

Многочисленные конфиги и скрипты — это тоже код, который нужно бережно хранить. За это также отвечает DevOps-инженер. Поэтому Ansible тесно связан со знанием концепции Infrastructure as Code (IaC). О ней мы ещё поговорим во второй части статьи.

Уметь собирать образы контейнеров в Docker

Контейнеризация — это подход, при котором приложение и все его зависимости (библиотеки, конфигурационные файлы и т. д.) упаковываются в специальный образ. Из него затем можно запустить изолированный контейнер*. Контейнеризация позволяет безопасно переносить сервисы с машины на машину и не беспокоиться, что из-за зависимостей что-то полетит.

Roadmap для тех, кто собирается в DevOps

Примечание: сама контейнеризация необязательно подразумевает создание образов, но сейчас в подавляющем большинстве случаев используется именно в таком варианте.

Технология контейнеризации перекочевала в разработку из Linux. В 2013 году появился инструмент Docker, с которым связывают бурное развитие контейнеризации. Из репозитория с исходным кодом и доступных образов можно за пару минут без танцев с бубном упаковать своё приложение в образ. Поднять инфраструктуру на контейнерах можно за несколько часов.

Однако DevOps-инженеру недостаточно только копипастить образы и делать docker run/docker compose up. Вот что понадобится в реальной работе:

  • Знать абстракции и команды Docker и Docker Compose (один из плагинов Docker).
  • Уметь собирать свои образы контейнеров.
  • Знать, что под капотом у Docker.
  • Запускать контейнеры в Kubernetes.
  • Писать Dockerfile, знать ключевые инструкции и их применение.
  • Работать с образами и реестрами образов.
  • Знать о существующих альтернативах и иметь общее представление об их отличиях от Docker’а.

Проверить, насколько вы готовы к реальным кейсам сборки образов, можно на открытых кейсах – DevOps Cases.

Разумеется, полезно изучить best practices по Docker. Они доступны в официальной документации по этой ссылке.

Уметь строить CI/CD

Непрерывная интеграция (Continuous Integration, CI) и непрерывная доставка (Continuous Delivery, CD) — это концепция и набор принципов, которые помогают разработчикам быстрее выкатывать новые фичи и при этом сохранять надёжность своего программного обеспечения.

Roadmap для тех, кто собирается в DevOps

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

CI/CD можно реализовать как с контейнерами, так и без них. DevOps-инженеру нужно хорошо знать хотя бы один CI/CD-инструмент. Например, Jenkins или GitLab CI/CD. На самом деле их намного больше, но на собеседованиях обычно проверяют знание основных принципов и того инструмента, который кандидат указал в резюме. То есть нужно набить руку в использовании хотя бы одного инструмента, а потом при необходимости изучить остальные — больших проблем не будет. Например, можно начать с видеокурса по работе с Gitlab CI/CD, а потом изучить CI/CD с Jenkins.

Знать, что такое микросервисы, оркестрация контейнеров и иметь базовые навыки работы в Kubernetes

Микросервисная архитектура — это архитектура, в которой приложение разбито на несколько отдельных сервисов. Они взаимодействуют между собой путём прямых запросов или передачи сообщений через специальные системы-посредники (например, Apache Kafka). У каждого сервиса своя бизнес-задача: например, управлять каталогом, хранить и обновлять содержимое корзины или проводить оплату заказа.

Roadmap для тех, кто собирается в DevOps

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

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

Roadmap для тех, кто собирается в DevOps

Де-факто стандартом в отрасли сейчас является Kubernetes. Это сложный в освоении инструмент, и существует несколько уровней работы с ним:

1) Базовый. Этот уровень подразумевает, что вы:

  • Знаете компоненты и абстракции Kubernetes.
  • Понимаете, как устроен и работает кластер.
  • Можете поднять кластер с помощью одного из готовых инструментов (например, Kubespray).
  • Знаете, как реализованы сетевые абстракции в K8s.
  • Умеете создавать Helm-чарты и темплейтировать приложение.
  • Знаете, как подключать систему хранения данных.
  • Можете автоматизировать работу с сертификатами.
  • Понимаете, как строить пайплайны доставки приложения в кластер Kubernetes.

2) Продвинутый. Он подразумевает, что вы можете проектировать архитектуру и смело залезаете под капот Kubernetes для тонкого тюнинга. На этом уровне нужно уметь:

  • Настраивать аутентификацию пользователей в кластере.
  • Работать с сетевыми плагинами для Kubernetes.
  • Настраивать безопасность кластера.
  • Понимать, как работают компоненты Kubernetes под капотом.
  • Создавать собственные операторы.
  • Понимать, как работает автоскейлинг приложений в кластере.
  • Делать резервное копирование кластера.
  • Реализовывать Blue-Green, Canary deployment.
  • Использовать Open Policy Agent.
  • Выстраивать service mesh.

На крупных проектах с Kubernetes может существовать глубокая специализация. Поэтому существуют наборы компетенций для разных ролей, например для:

  • администратора кластера;
  • разработчика;
  • архитектора;
  • специалиста по мониторингу;
  • специалиста по безопасности.

Сориентироваться в курсах и материалах по Kubernetes поможет Навигатор курсов по Kubernetes. Но начинать нужно с базовых курсов: Kubernetes: База или Kubernetes для разработчиков. На нашем youtube-канале есть бесплатные вебинары Вечерней школы Kubernetes: для инженеров и для разработчиков. Тем, кто уже имеет опыт работы с Kubernetes, рекомендуем обратить внимание на Kubernetes: Мега.

Знать языки программирования

Уже на старте DevOps-инженеру нужно уверенно писать на одном из скриптовых языков и уметь читать скрипты, написанные на Bash и Python.

Roadmap для тех, кто собирается в DevOps

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

Выбирать язык программирования для изучения нужно исходя из стека компании, куда вы хотите попасть, или из личных предпочтений. Например:

  • JVM-стек (Java, Scala и Kotlin для JVM);
  • .Net-стек (C#);
  • Go;
  • Python;
  • JS/TS;
  • C/C++.

На собеседовании у вас спросят про тот язык, который вы указали в резюме. Но в будущем, разумеется, придётся подстраиваться под стек компании. В Слёрме можно изучить Python для инженеров и Golang для инженеров.

Python и Go хороши для начала, Java — сложнее, придётся сильно углубиться. Нужно знать, какие типы там есть, как с ними работать, какой синтаксис у языка, как правильно применить линтеры, чтобы они не мешали разработчикам. Хороший вариант — знать best practices по языкам и по паттернам безопасности и кода.

Максим Гусев, SRE-инженер в Dodo.

Уметь строить систему мониторинга

Развитие любого приложения невозможно без мониторинга. Он нужен как для обеспечения надёжности и доступности сервисов, так и для бизнес-аналитики. В задачи DevOps-инженера входит:

  • Выбор ключевых метрик. Нужно понимать основные подходы: Blackbox & Whitebox, уметь настраивать 4 golden signals, понимать предназначение RED и USE.
  • Организация и автоматизация их сбора. Работать с экспортёрами, настраивать Prometheus и его аналоги.
  • Хранение метрик. Знать типы данных и способы их хранения, PromQL.
  • Визуализация метрик. Устанавливать и настраивать Grafana. Уметь собирать дашборды и формировать графики.
  • Настройка алертинга. Проектировать правила и настраивать системы алертинга.
  • Внедрение улучшений на разных этапах развития проекта. Развивать observability системы, работать с инцидентами, анализировать метрики.

Связка двух инструментов Prometheus & Grafana — популярный способ организовать мониторинг. Чтобы освоить сбор метрик, обратите внимание на видеокурс по Prometheus, для сбора и визуализации — Мониторинг в Grafana. Отдельный курс есть по Мониторингу и логированию в Kubernetes.

Знать методологии DevOps

Помимо знания инструментов и технологий, которые упомянуты выше, на DevOps-инженера могут возложить и операционные задачи. Например:

  • Увеличивать скорость разработки. DevOps-инженер благодаря автоматизации и интеграции процессов позволяет сократить время, необходимое для запуска новых функций или исправления ошибок, и сделать процесс разработки более гибким и быстрым.
  • Улучшать сотрудничество и коммуникации. DevOps-инженер снимает барьеры между разработчиками и операционными командами.
  • Улучшать качества продукта. DevOps-инженер обнаруживает и исправляет ошибки, снижает риски сбоев и инцидентов, связанных с человеческим фактором, повышает надёжность системы в целом.
  • Сокращение затрат и оптимизация ресурсов. DevOps стремится к автоматизации и оптимизации процессов разработки и развёртывания, что позволяет сократить издержки и использование ресурсов, таких как время и оборудование.

В зависимости от процессов компании задачи DevOps-инженера могут отличаться: где-то он отвечает за продакшн, где-то за всё, что связано с CI/CD и тестовыми контурами. А где-то DevOps-инженеры отвечают исключительно за развитие продуктов, внедрение новых технологий и всего, что связано с CI/CD-конвейером.

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

Заключение

Этот Roadmap поможет сформировать навыки, которые чаще всего встречаются в вакансиях на позицию DevOps-инженера. Точно также мы учим на нашем 5-месячном курсе DevOps Upgrade. Разумеется, даже после его прохождения результат собеседования в большей степени зависит от самого кандидата, но сотням наших выпускников этот набор компетенций помог не только закрепиться в профессии, но и дал буст для дальнейшего развития. Если хотите увидеть, как выпускник курса DevOps Upgrade проходит собеседование на позицию DevOps-инженера, смотрите наш вебинар DevOps-инженер: открытое собеседование.

В следующей части статьи мы расскажем об Intermediate уровне и специализациях для middle+ инженеров.

Статья подготовлена по материалам вебинара Roadmap для DevOps-специалистов. Спикер — Максим Гусев, SRE в Dodo Engineering.

Редактор: Андрей Удалов.

Оформление: Екатерина Игумнова.

1
Начать дискуссию