Несмотря на то, что в нынешнее время так называемая профессия DevOps‑инженер стала типовой, а не чем‑то уникальным, всё равно ежедневно многие специалисты пытаются «перейти в DevOps», будь то инженеры технической поддержки, системные администраторы, разработчики, тестировщики и многие другие.
Данная статья рассчитана прежде всего на только «входящих в ИТ» или начинающих ИТ‑специалистов, которые стремятся к получению роли DevOps в будущем или просто хотят расширить багаж собственных знаний, но не знают с чего начать. Опытным специалистам указанные источники могут показаться недостаточно полными в силу того, что они собраны мной субъективно и без нацеленности на узконаправленное изучение одного из направлений, чего должно быть достаточно для начинающих специалистов, но при этом не должно негативно сказаться на желании изучения новых материалов.
Почему в названии статьи фигурирует «кривая дорожка» и «приставные шаги»?
Дорожка кривая, потому что придётся пробовать разные направления и не зацикливаться на чём-то одном. Приставные шаги - так как Ваш путь в DevOps будет состоять из ряда направлений, в каждом из которых потребуется изучение теории и практики, следующей за ней. Не удастся обойтись чем-то одним.
Начинаем
На просторах Интернета есть замечательные "роадмапы" DevOps и множество подобных статей, но здесь рассмотрено собственное видение этого процесса и указаны некоторые названия книг/статей/авторов. Если эти заметки будут полезны хотя бы одному специалисту - уже хорошо. В данной части статьи будет разделение на блоки, в каждом из которых указано, что желательно почитать/изучить и что сделать на практике.
-
Работа в технической поддержке, сервис-деске, координации аварий и смежных направлениях.
Вы спросите зачем? Во первых, DevOps кроме технических умений должен обладать высоким уровнем навыков общения, так как придётся постоянно взаимодействовать как между разными специалистами внутри команды, так и с представителями бизнеса, менеджментом и многими другими слоями специалистов компаний. В процессе общения DevOps-инженеру необходимо не только понять, чего хотят с другой стороны, но и уметь расположить коллег к себе, "перевести" ту или иную информацию и оставаться спокойным в любой рабочей ситуации. Во вторых, получить "реальную" должность DevOps-инженера без какого-либо опыта в ИТ крайне тяжело. Из теории - можно начинать знакомиться с ITIL, ITSM на уровне прочтения статей или же книги "ITIL 4 Foundation" (Axelos).
-
Компьютерные сети
Для начала можно посмотреть видеокурс Андрея Созыкина "Компьютерные сети", где Вы освоите базовые понятия и процессы, связанные с компьютерными сетями.
Далее требуется познакомиться со сборником статей, начиная с этой: Основы компьютерных сетей. Тема №1. Основные сетевые термины и сетевые модели
После этого, пора переходить книгам "Компьютерные сети" (Эндрю Татенбаум) и/или "Компьютерные сети" (Виктор и Наталья Олифер). -
Виртуализация
Необходимо разобраться хотя бы на базовом уровне, что такое виртуализация и какие решения существуют, чем отличаются гипервизоры разных типов. Для получения базовой информации можно начать со статьи: Основы виртуализации (обзор)
Из практики можно на домашнем оборудовании поставить, например, VirtualBox и попробовать развернуть свою первую виртуальную машину. -
Windows
В теоретической части можно прочитать какую-либо базовую книгу, например "Самоучитель системного администратора" (Кенин Александр, Колисниченко Денис).
На практике необходимо развернуть песочницу из нескольких Windows-серверов (для экономии ресурсов объединяя несколько разных ролей на серверах), например:
- Domain Controller с ролями AD DS, DNS, Hyper-V, IIS
- Сервер с DHCP, RRAS, NAT
- Сервер с WSUS
- Пара рабочих станций с Windows
Из активностей: настроить домен, включить все машины в домен, создать в AD отдельные OU для пользователей и групп, и, соответственно, несколько пользователей и групп, настроить доступ по RDP для конкретного пользователя; организовать доступ в Интернет через сервер с DHCP, добавить несколько исключений IP-адресов, чтоб они не выдавались; настроить политики назначения стандартных обоев рабочего стола рабочих станций-клиентов, установить политику действия пароля пользователя; создать каталог на сервере и группу доступа, которая позволит редактировать содержимое папки (при этом пользователь с правами доступа на запись не сможет удалить корневой каталог); настроить квоту для папки, функцию теневого клонирования на одном из общих каталогов; настроить роль Hyper-V, чтоб удавалось создать виртуальную машину; настроить обновления через WSUS, развернуть WDS (добавить образ для возможности удалённой установки операционной системы).После успешного завершения теории и практики, желательно начать изучать и использовать в песочнице или в своей работе (если применимо) скрипты PowerShell. Информации предостаточно на порталах Microsoft. Что пробовать автоматизировать? Все, что угодно: предоставление прав, создание сущностей в AD, проверка срока действия паролей, работа с SharePoint, конвертация файлов, сетевая диагностика, или даже создание маленьких десктопных приложений с Windows.Forms.
-
Linux
Если Вы не работали с Linux совсем - сначала это направление может показаться трудным и странным. В самом начале рекомендую посмотреть что-то базовое, например, видеоуроки Дениса Астахова (ADV-IT). После просмотра лучше просто попытаться уложить полученную информацию в голове, не вникая в детали. Затем начинается параллельное прочтение книг и пробы установки/использования Linux.
Из книг начните с фундаментальных, таких как "Linux Библия" (Кристофер Негус), затем необходимо постепенно переходить к другим, например: "Внутреннее устройство Linux" (Дмитрий Кетов) и "Ядро Linux: описание процесса разработки" (Роберт Лав). Полезные команды лучше выписывать в тетрадь и постепенно пытаться выучить, чтоб далее применять.
Практическая часть состоит из установки виртуальных машин с операционными системами Linux, настройки сетевого взаимодействия, прав доступа и прочего использования команд терминала. Не забудьте ознакомиться со всеми преимуществами vim, которых на самом деле очень много. -
Kubernetes, контейнеры, docker
В данном блоке база состоит из документации на kubernetes.io, а также ряда книг, среди которых: "Микросервисы и контейнеры Docker" (Парминдер Сингх Кочер), "Kubernetes на практике" (Джош Россо, Рич Ландер и др.), "Kubernetes: лучшие практики" (Брендан Бернс, Эдди Вильяльба и др.), "Kubernetes изнутри" (Джей Вьяс, Крис Лав) и "Kubernetes для DevOps" (Джон Арундел, Джастин Домингус). Все книги читать конечно же не обязательно, но можно выбрать более подходящее для себя. Если книги и документация воспринимаются тяжело на начальном этапе, сначала посмотрите видеоуроки Дениса Астахова (ADV-IT) по Kubernetes для получения основы знаний о технологиях контейнеризации.
В качестве практической части изучения: развернуть кластер Kubernetes на нескольких виртуальных машинах с Linux при помощи kubeadm и calico (настройка сетевого взаимодействия). Настройте взаимодействие master-узлов и worker-узлов, после чего попробуйте создать различные сущности, для примера начать с деплоя веб-сервера nginx, попробовать kustomize. Затем можно пробовать другие интересные вещи. -
DevOps
Про то, что такое DevOps Вы уже наверняка знаете, если хотите этим заниматься, но по желанию можно углубиться в общее понимание методологии. Для этого подойдут такие книги, как "DevOps для современного предприятия" (Мирко Херинг), "Руководство по DevOps" (Джен Ким, Патрик Дебуа и др.), "Continuous delivery. Практика непрерывных апдейтов" (Вольф Эберхард).
После изучения теории требуется закрепить на практике работу с некоторыми из систем и инструментов. Что для этого потребуется?
- CI/CD: Gitlab CI, TeamCity, Jenkins (развернуть, прощупать интерфейс и настроить простой пайплайн, ознакомиться с главными отличиями систем)
- Тестирование: Pytest, Selenium, Jmeter (опробовать в рамках изучения инструментов CI/CD - неплохой вариант)
- Конфигурации: Ansible, Terraform, Pulimi (попробовать функционал и сравнить области применения инструментов)
- Брокеры сообщений: Rabbit MQ, Kafka (развернуть, попробовать отправку и приём сообщений простыми сервисами, понять главные отличия систем)
- Хранилища артефактов: Nexus, Harbor, Artifactory (развернуть, настроить взаимодействие с CI/CD системами в рамках написания пайплайнов)
- Публичные облака: Курс "Инженер облачных сервисов" (Яндекс Практикум) достаточно хорошо насыщен базовой информацией и практикой работы с облачным решением и входящими в него управляемыми сервисами.
Список систем/инструментов/навыков можно продолжать бесконечно долго, но в качестве базы это будет уже неплохо. -
Мониторинг и логирование
По данному блоку хотелось бы отметить статью: Основы мониторинга (обзор Prometheus и Grafana)
Для понимания основ работы с системой Zabbix подходит прочтение официальной документации.
По ELK: Изучаем ELK. Часть I — Установка Elasticsearch
Рассматривая все вышеуказанные системы главное не только читать, но и попробовать их развернуть, настроить непосредственно мониторинг, оповещения, отправку логов (того же nginx) и визуализацию в Grafana. -
Разработка
Данный блок хотелось бы начать с рекомендации изучить в общих чертах SDLC путём прочтения статьи: Что такое SDLC? Этапы, методология и процессы жизненного цикла программного обеспечения.
Далее необходимо закрепить познания Git: "Git. Практическое руководство. Управление и контроль версий в разработке программного обеспечения" (Фишерман Л.В.)
Кроме того, нужно разобраться в моделях ветвления и их преимуществах/недостатках (GitFlow, Gitlab Flow, Github Flow, TBD и других).Также, важно понимать работу веб-сервисов, разобраться в основных кодах ошибок, заголовках, базовой диагностике и решении ошибок.
Немаловажно понимать роль тестирования в процессе создания ПО, изучить модели разработки, способы и типы тестирования, общеизвестные инженерные практики в контексте участия DevOps-инженера в автоматизации/поддержке процессов тестирования и CI/CD/CD процессов.
Наконец, требуется получить общее представление о деятельности разработчиков, пробуя писать код на одном или нескольких языках программирования. Для этого Вы можете пробовать писать что угодно: веб-сервер, взаимодействие с брокерами сообщений, автоматизацию работы с тем же Zabbix и многое другое.
Среди источников хотелось бы выделить сайт о программировании metanit.com, а также ряд книг по некоторым из языков: "Тайная жизнь программ" (Джонатан Стейнхарт), "Python и DevOps" (Ной Гифт, Кеннеди Берман и др.), "Python для сетевых инженеров" (Эрик Чоу), "Основы программирования на Java" (Тимур Машнин), "C# на примерах" (Евдокимов П.В.).
-
СУБД
Работу с СУБД можно изучать различными способами, но для начала можно посмотреть видеокурс по SQL от Андрея Созыкина. Потом почитать книги "Изучаем SQL" (Алан Болье), "Postgres: Первое знакомство" (П. Лузанов, Е.Рогов, И. Лёвшин).
Обязательно на практике развернуть какую-либо реляционную и нереляционную базу данных, разобраться в основных отличиях, базовой настройке и использованию путём взаимодействия с написанным самостоятельно простым сервисом на одном из языков программирования. -
Архитектура
Необходимо начать изучать типы и уровни архитектур, для чего можно начать с прочтения статьи: Архитектура приложений и интеграции: гайд по основным понятиям простыми словами
-
Дополнительно
Есть дополнительные вещи, которые потребуются для успешного прохождения интервью и получения заветной должности: в свободное время, будь то прогулка и мытье посуды - слушать mock-интервью на позицию DevOps, ведь зачастую даже опытные специалисты затрудняются в ответах на собеседовании, так как редко их посещают или делают упор в изучении других нюансов. Ещё следует не забывать, что даже провальное прохождение интервью - для Вас огромный опыт как получения часто задаваемых и редких вопросов, так и общения/взаимодействия.
Заключение
Конечно же, не существует «единственного рецепта»: в вакансиях различные требования, у компаний отличаются цели и подходы, у интервьюеров заготовлены свои интересные вопросы.
Важно не останавливаться после неудачи и, даже если нет времени все прочитать и попробовать, латать «дыры» в своих знаниях, где это больше всего требуется, изучать новое. Не стоит надеяться на быстрый успех прохождения интервью, иногда лучше прощупать направление и следом задать себе вопрос: «Точно ли это мне интересно и хочу ли я с этим работать?». Если ответ «Да» — продолжайте и все получится.
Автор: DmitrySZh