Кривая дорожка или приставными шагами в DevOps

615a4e675ef9c5e4261ab12b5b5ad07a

Несмотря на то, что в нынешнее время так называемая профессия 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, ведь зачастую даже опытные специалисты затрудняются в ответах на собеседовании, так как редко их посещают или делают упор в изучении других нюансов. Ещё следует не забывать, что даже провальное прохождение интервью — для Вас огромный опыт как получения часто задаваемых и редких вопросов, так и общения/взаимодействия.

Конечно же, не существует «единственного рецепта»: в вакансиях различные требования, у компаний отличаются цели и подходы, у интервьюеров заготовлены свои интересные вопросы.

Важно не останавливаться после неудачи и, даже если нет времени все прочитать и попробовать, латать «дыры» в своих знаниях, где это больше всего требуется, изучать новое. Не стоит надеяться на быстрый успех прохождения интервью, иногда лучше прощупать направление и следом задать себе вопрос: «Точно ли это мне интересно и хочу ли я с этим работать?». Если ответ «Да» — продолжайте и все получится.

© Habrahabr.ru