DevOps Roadmap: полный путь от Linux до Kubernetes
Это пошаговый путь, который я выбрал бы как специалист и преподаватель DevOps, если бы начинал с нуля.
Он показывает наиболее эффективный путь к профессии DevOps-инженера на основе знаний, которыми я располагаю сейчас.
Надеюсь, он поможет вам в этом очень перспективном, но непростом путешествии в DevOps.
Я также хотел сделать маршрут более индивидуальным — в зависимости от того, из какой области вы переходите в DevOps:
- системный администратор;
- разработчик ПО;
- инженер по автоматизации тестирования;
- сетевой инженер;
- человек без опыта или с минимальными знаниями IT.
После основной дорожной карты вы найдёте рекомендации, с чего начинать при каждом из этих исходных уровней.
Важный момент заранее
DevOps охватывает весь жизненный цикл разработки программного обеспечения, поэтому вам придётся работать со множеством технологий.
DevOps продолжает развиваться, и новые инструменты появляются постоянно.
Поэтому нужно быть готовым постоянно учиться и расширять знания даже после того, как вы станете DevOps-инженером.
01. Основы разработки программного обеспечения
DevOps-инженер обычно не пишет само приложение, но тесно работает с командой разработки, улучшает и автоматизирует её процессы.
Поэтому необходимо понимать:
- как разработчики работают и взаимодействуют;
- Agile и процессы Jira;
- какой Git-процесс они используют;
- как настраиваются и собираются приложения;
- инструменты сборки и упаковки;
- автоматизированное тестирование;
- уровни и области тестов.
Также важно в целом понимать полный жизненный цикл разработки программного обеспечения: от идеи и написания кода до выпуска продукта для конечных пользователей.
02. Основы операционных систем и Linux
DevOps-инженер отвечает за подготовку и поддержку инфраструктуры — серверов, на которых развёрнуто приложение.
Поэтому нужно знать основы администрирования сервера и установки различных инструментов.
Основные понятия операционных систем
Необходимо изучить:
- команды оболочки;
- файловую систему Linux;
- права доступа;
- управление SSH-ключами;
- виртуализацию.
Поскольку большинство серверов работает под управлением Linux, нужно уверенно пользоваться Linux, особенно его интерфейсом командной строки.
Основы сетей и безопасности
Для настройки инфраструктуры также нужно понимать:
- настройку межсетевых экранов;
- работу IP-адресов;
- порты;
- DNS;
- балансировщики нагрузки;
- прокси;
- HTTP и HTTPS.
Граница между DevOps и IT Operations
Вам не нужно становиться системным администратором.
Для работы DevOps-инженером достаточно базовых знаний серверного администрирования.
Для сложных задач существуют отдельные специалисты:
- системные администраторы;
- сетевые инженеры;
- специалисты по безопасности.
03. Контейнеризация — Docker
Контейнеры стали новым стандартом упаковки программного обеспечения, поэтому приложения часто запускаются в контейнерах.
Необходимо понимать:
- концепции виртуализации;
- концепции контейнеризации;
- управление контейнерными приложениями на сервере.
Что такое контейнер
Контейнер — это стандартная единица программного обеспечения, которая объединяет код приложения и все его зависимости.
Благодаря этому приложение быстро и надёжно работает в любой вычислительной среде.
Docker является самой популярной технологией контейнеризации.
Что нужно уметь
- запускать контейнеры;
- просматривать активные контейнеры;
- работать с сетями Docker;
- сохранять данные с помощью Docker Volumes;
- контейнеризировать приложения с использованием Dockerfile;
- запускать несколько контейнеров с помощью Docker Compose;
- работать с Docker Registry.
Контейнеры и виртуальные машины
Контейнеры и виртуальные машины дают преимущества изоляции и распределения ресурсов, но работают по-разному.
Виртуальные машины виртуализируют всю операционную систему.
Контейнеры виртуализируют только прикладной уровень операционной системы.
Поэтому контейнеры легче и быстрее виртуальных машин.
04. Конвейеры CI/CD
CI/CD — своего рода сердце DevOps.
Все изменения кода, например новые функции или исправления ошибок, должны непрерывно и автоматически интегрироваться в существующее приложение и доставляться пользователям.
Отсюда появился термин:
Continuous Integration and Continuous Deployment — непрерывная интеграция и непрерывное развёртывание.
Как работает CI/CD-конвейер
После завершения новой функции или исправления ошибки должен автоматически запускаться pipeline на CI-сервере, например Jenkins.
Он выполняет следующие действия:
- запускает тесты;
- упаковывает приложение;
- собирает контейнерный образ;
- отправляет контейнерный образ в репозиторий образов;
- развёртывает новую версию приложения на сервере.
CI/CD-платформы
Существует много CI/CD-платформ.
Основной пример в документе — Jenkins.
Другие популярные варианты:
- GitLab;
- GitHub Actions;
- Travis CI;
- Bamboo.
Что нужно изучить
- настройку CI/CD-сервера;
- интеграцию репозитория кода;
- автоматический запуск pipeline;
- инструменты сборки и управления пакетами;
- выполнение тестов;
- упаковку приложения;
- настройку репозиториев артефактов, например Nexus;
- интеграцию репозитория артефактов с pipeline;
- развёртывание в разные среды;
- развёртывание в облако;
- развёртывание в кластер Kubernetes.
05. Изучите одного облачного провайдера
Сегодня многие компании используют виртуальную инфраструктуру в облаке вместо управления собственной инфраструктурой.
Такие платформы называются Infrastructure as a Service — IaaS.
Они предлагают дополнительные сервисы:
- резервное копирование;
- безопасность;
- балансировку нагрузки;
- хранение данных;
- сетевые функции;
- другие инфраструктурные возможности.
Сервисы зависят от конкретной платформы.
Поэтому нужно изучить услуги выбранного облачного провайдера и научиться управлять всей инфраструктурой развёртывания.
AWS
AWS является мощной и широко используемой IaaS-платформой, но она достаточно сложна.
Для начала в AWS необходимо знать основы следующих сервисов:
- IAM — управление пользователями и правами доступа;
- VPC — частная виртуальная сеть;
- EC2 — виртуальные серверы.
В AWS существует огромное количество сервисов, но изучать нужно только те, которые необходимы вам или вашей компании.
Например, если кластер Kubernetes работает в AWS, необходимо изучить сервис EKS.
Другие облачные платформы
Популярные альтернативы:
- Microsoft Azure;
- Google Cloud;
- Yandex Cloud;
- VK Cloud;
- Selectel;
- Timeweb Cloud;
- MWS Cloud Platform и другие…
После освоения одной IaaS-платформы изучать остальные становится намного легче.
06. Оркестрация контейнеров — Kubernetes
Контейнеры популярны и удобны, поэтому многие компании запускают сотни или тысячи контейнеров на нескольких серверах.
Этими контейнерами необходимо управлять.
Для этого существуют инструменты оркестрации контейнеров.
Kubernetes, также известный как K8s, является самым популярным инструментом оркестрации контейнеров.
Инструменты вроде Kubernetes автоматизируют:
- развёртывание;
- масштабирование;
- управление контейнерными приложениями.
Что необходимо изучить
- как работает Kubernetes;
- как администрировать кластер Kubernetes;
- как управлять кластером;
- как развёртывать приложения в Kubernetes.
Конкретные знания Kubernetes
Необходимо изучить основные компоненты:
- Deployment;
- Service;
- ConfigMap;
- Secret;
- StatefulSet;
- Ingress;
- Kubernetes CLI —
kubectl; - постоянное хранение данных с помощью Kubernetes Volumes;
- Namespaces.
07. Мониторинг и наблюдаемость
После того как программное обеспечение оказывается в production, его необходимо отслеживать.
Мониторинг нужен, чтобы:
- контролировать производительность;
- обнаруживать проблемы в инфраструктуре;
- обнаруживать проблемы в приложении;
- анализировать поведение системы.
Обязанности DevOps-инженера
Одна из обязанностей DevOps-инженера заключается в следующем:
- настроить мониторинг программного обеспечения;
- настроить мониторинг инфраструктуры;
- отслеживать кластер Kubernetes;
- отслеживать серверы, лежащие в основе инфраструктуры;
- визуализировать собранные данные.
Основные инструменты
Prometheus
Популярный инструмент мониторинга и оповещений.
Grafana
Инструмент аналитики и интерактивной визуализации.
ELK Stack
Популярный стек управления логами.
Также нужно понимать, как системы собирают и агрегируют данные для:
- диагностики проблем;
- поиска неисправностей;
- получения бизнес-аналитики;
- других операционных задач.
08. Инфраструктура как код
Ручное создание и поддержка инфраструктуры занимает много времени и часто приводит к ошибкам.
Особенно сложно вручную воспроизводить одинаковую инфраструктуру для разных сред:
- разработки;
- тестирования;
- production.
В DevOps стремятся автоматизировать как можно больше.
Именно здесь применяется подход Infrastructure as Code — инфраструктура как код.
С помощью IaC код используется для создания и настройки инфраструктуры.
Два типа инструментов IaC
Необходимо знать два основных типа:
- предоставление инфраструктуры;
- управление конфигурацией.
Terraform
Terraform является самым популярным инструментом предоставления инфраструктуры.
Ansible
Ansible является одним из самых популярных инструментов управления конфигурацией.
Преимущества хранения инфраструктуры в виде кода
- стимулируется совместная работа команды;
- изменения инфраструктуры документируются;
- состояние инфраструктуры становится прозрачным;
- информация хранится централизованно;
- данные не разбросаны по локальным компьютерам сотрудников;
- уменьшается количество отдельных локальных скриптов.
09. Скриптовый язык
DevOps-инженер тесно работает с разработчиками и системными администраторами.
Он также автоматизирует задачи разработки и эксплуатации.
Поэтому необходимо писать:
- скрипты;
- небольшие приложения;
- утилиты автоматизации.
Для этого нужны базовые навыки скриптинга или программирования.
Примеры задач
- очистка кэша;
- запуск сборок;
- запуск развёртываний;
- выполнение служебных операций;
- автоматизация повторяющихся процессов.
Можно использовать язык, привязанный к конкретной операционной системе:
- Bash;
- PowerShell.
Однако особенно востребованы независимые от операционной системы языки:
- Python;
- Ruby;
- Go.
Эти языки мощнее и гибче.
Знание одного из них делает специалиста более ценным DevOps-инженером.
Python
Python — один из самых популярных и простых для изучения языков программирования.
Рекомендуется начать именно с Python.
Он:
- широко используется;
- относительно прост в изучении;
- подходит для множества задач;
- особенно часто применяется в DevOps.
Вам не требуется уровень профессионального разработчика программного обеспечения.
Для DevOps достаточно научиться писать скрипты на Python.
Концепции программирования остаются одинаковыми, поэтому после освоения одного языка другие языки изучать значительно легче.
10. Контроль версий — Git
Вся логика автоматизации создаётся в виде кода.
Как и код приложения, код автоматизации необходимо хранить и сопровождать в системе контроля версий, например Git.
В Git могут храниться:
- Infrastructure as Code;
- конфигурационные файлы Kubernetes;
- Python-скрипты;
- конфигурации Ansible;
- другая логика автоматизации.
Что такое Git
Git — это инструмент командной строки, который устанавливается локально.
Он позволяет:
- отслеживать изменения исходного кода;
- хранить историю;
- организовывать совместную работу;
- управлять версиями файлов.
Файлы централизованно хранятся в удалённом Git-репозитории в интернете.
Наиболее популярные платформы:
- GitHub;
- GitLab.
Что нужно изучить
Основные команды Git:
git clone;git branch;git pull;git push;git merge;- другие базовые команды.
Также нужно знать процессы совместной работы:
- создание pull request;
- code review;
- ветвление;
- слияние изменений;
- взаимодействие участников проекта.
Важно
Не храните секреты и пароли в Git-репозитории.
С чего начать
Навыки DevOps являются конечной целью, но многие начинают свой путь с разным профессиональным опытом.
Поэтому стартовая точка для каждого человека отличается.
Возможные исходные направления:
- системный администратор;
- разработчик программного обеспечения;
- инженер по автоматизации тестирования;
- сетевой инженер;
- человек без опыта или с минимальным опытом в IT.
Начало пути: системный администратор
Системный администратор умеет администрировать серверы и другие системы.
Поэтому у него уже есть следующие навыки:
- развёртывание инфраструктуры;
- подготовка инфраструктуры для деплоя;
- настройка инфраструктуры;
- работа с операционными системами;
- установка программного обеспечения;
- запуск программного обеспечения;
- безопасность;
- сетевые настройки.
Также системный администратор может заниматься:
- мониторингом;
- резервным копированием;
- восстановлением;
- базами данных;
- сетями;
- безопасностью.
Поэтому у системного администратора уже есть много навыков, необходимых для стороны развёртывания и эксплуатации DevOps.
Главный пробел
Основной пробел системного администратора — основы разработки программного обеспечения.
Нужно изучить:
- Git-процессы;
- способы работы разработчиков;
- жизненный цикл разработки;
- создание CI/CD pipeline.
Начало пути: разработчик программного обеспечения
У разработчика уже есть хорошая база.
Он знаком с важными частями DevOps:
- процессами разработки;
- конвейерами выпуска;
- кодом;
- автоматизацией.
Навыки программирования помогают писать автоматизационные скрипты для разработки и развёртывания.
Главный пробел
Разработчикам обычно не хватает навыков управления серверами.
Начать следует с изучения:
- Linux;
- основ операционных систем;
- виртуальных машин;
- создания серверов;
- настройки серверов;
- безопасности инфраструктуры;
- сетей инфраструктуры.
Поскольку современные приложения работают в облаке, нужно научиться выполнять все эти задачи в облачной инфраструктуре.
После этого можно переходить к:
- контейнерам;
- запуску приложений в контейнерах;
- Kubernetes.
Начало пути: инженер по автоматизации тестирования
Это ещё один распространённый путь в DevOps.
Такому специалисту придётся получить больше дополнительных навыков, чем разработчику или системному администратору, но многие существующие знания будут полезны.
Инженер по автоматизации тестирования, вероятно, уже понимает:
- Agile;
- Jira;
- процессы разработки;
- уровни тестирования;
- автоматизированное тестирование.
Эти знания полезны при создании автоматического CI/CD pipeline.
Для доставки изменений до production требуется развитое автоматизированное тестирование.
Недостающие навыки
Как и разработчикам, инженерам по автоматизации тестирования обычно не хватает навыков управления серверами.
Начать нужно с изучения:
- виртуальных машин;
- основ Linux;
- создания серверов;
- настройки серверов;
- безопасности инфраструктуры;
- сетей инфраструктуры.
Начало пути: сетевой инженер
Сетевая инженерия находится дальше от DevOps, чем предыдущие направления, но часть навыков можно перенести.
Сетевой инженер умеет:
- настраивать устройства;
- настраивать соединения между устройствами;
- проектировать сети;
- работать с локальной инфраструктурой.
Это даёт ценные знания инфраструктуры.
Переход в облачные сети
Поскольку компании переносят инфраструктуру в облако, многие сетевые инженеры становятся облачными сетевыми инженерами.
Они настраивают:
- виртуальные маршруты;
- виртуальные коммутаторы;
- облачные сети;
- другие сетевые компоненты.
Эти знания дают преимущество при изучении:
- сетей контейнеров;
- сетей Kubernetes.
Сети в контейнерах и Kubernetes являются сложной темой, особенно с точки зрения:
- безопасности;
- диагностики;
- поиска неисправностей.
Знание Bash или Python также помогает автоматизировать сетевые задачи.
Хорошая стартовая точка:
- перейти в облачную инженерию;
- изучить облачные сети;
- перейти к контейнерам;
- изучить Kubernetes.
Начало пути: нет или мало опыта в IT
Некоторые люди хотят войти в DevOps практически без опыта в информационных технологиях.
Это сложный путь, потому что DevOps — не начальная профессия в IT и обычно не является первой темой для изучения.
Почему
DevOps автоматизирует процессы жизненного цикла разработки и развёртывания программного обеспечения, которые раньше выполнялись вручную.
Перед автоматизацией процессов необходимо сначала понять:
- что это за процессы;
- какие задачи они выполняют;
- как они связаны друг с другом;
- зачем их автоматизировать.
Без этого невозможно понять, что именно вы автоматизируете и зачем нужен DevOps.
Путь для человека без опыта в IT
1. Понять полный жизненный цикл разработки программного обеспечения
Найдите учебные проекты.
Создайте очень простое веб-приложение и разверните его на виртуальном сервере.
В процессе вы познакомитесь с:
- разработкой;
- упаковкой приложения;
- автоматизированным тестированием;
- развёртыванием;
- Linux-сервером;
- облачной инфраструктурой.
Так вы поймёте каждый этап полного рабочего процесса.
2. Понять, как взаимодействуют команды разработки
После этого изучите:
- Agile;
- Scrum;
- способы совместной работы команд разработки;
- организацию IT-проектов.
3. Получить предварительные знания
После знакомства с полным процессом разработки и совместной работой команд можно переходить к техническим основам.
4. Изучить навыки DevOps
Этого уже достаточно, чтобы начинать обучение DevOps, в рамках которого Linux, Git и основные инструменты могут изучаться с нуля.
Но сначала необходимо понимать рабочие процессы:
- зачем используется Git;
- зачем используется Jenkins;
- почему нужно изучать Linux;
- зачем нужны скрипты;
- зачем нужны контейнеры.
Шесть карьерных путей DevOps
В определённый момент становится понятно, что DevOps — это не одна чётко определённая роль.
В вакансиях встречаются:
- облачные инженеры;
- SRE;
- платформенные инженеры;
- DevOps-инженеры.
Всем этим специалистам необходимы навыки DevOps.
DevOps служит основой как минимум для шести быстрорастущих карьерных направлений.
Каждое из них имеет:
- собственный фокус;
- собственные задачи;
- высокий потенциал дохода.
Шесть направлений:
- DevOps-инженер;
- облачный инженер или архитектор;
- платформенный инженер;
- Site Reliability Engineer;
- DevSecOps-инженер;
- MLOps-инженер.
Итоги.
1. Получите правильные предварительные знания
Сначала нужно закрыть базовые пробелы.
Необходимые знания зависят от вашего предыдущего опыта.
Системному или сетевому администратору нужно изучить процессы разработки.
Разработчику нужно изучить:
- основы инфраструктуры;
- виртуальные серверы;
- управление системами.
При отсутствии IT-опыта придётся освоить и администрирование, и разработку.
Такой вход сложнее, но он возможен.
2. Изучите облако, Docker и Kubernetes
После получения базовых знаний переходите к контейнерам и оркестрации.
Docker и Kubernetes помогают командам:
- развёртывать приложения;
- эффективно запускать приложения;
- масштабировать системы;
- управлять контейнерами.
Поскольку современные приложения и кластеры Kubernetes обычно работают в облаке, нужно изучить:
- облачную инфраструктуру;
- её настройку;
- управление;
- масштабирование.
3. Освойте автоматизацию
Автоматизация — один из важнейших навыков DevOps.
Необходимо уметь строить CI/CD-конвейеры.
После этого следует автоматизировать отдельные части процесса с помощью подходов X as Code:
- Infrastructure as Code;
- Configuration as Code;
- Security as Code;
- Policy as Code;
- другие подходы.
Главная идея — представлять настройки, процессы и инфраструктуру в форме кода.
4. Продолжайте учиться
DevOps постоянно развивается.
Новые инструменты появляются регулярно.
DevOps-специалист должен уметь:
- оценивать новые инструменты;
- тестировать их;
- определять их пользу;
- внедрять их при необходимости.
Главная цель — оптимизировать и автоматизировать существующие процессы, делая их эффективнее.