DevOps-инженер — сравнительно новая профессия на белорусском IT-рынке. Но, несмотря на это, такие специалисты довольно быстро вошли в список одних из самых оплачиваемых профессий. Раньше DevOps-инженеров путали с системными администраторами, хотя в реальности DevOps находится между железом и разработкой.
Эта профессия будет интересна тем, кто хочет знать, как приложения работают ‘под капотом’, как происходит взаимодействие кода с сервером и системой в целом. Подробнее о том, какими знаниями и технологиями нужно владеть, рассказал Александр Шуляк, который прошел путь от системного администратора до ведущего DevOps-инженера. Работал в компаниях в Беларуси, Латвии и Великобритании.
Сам по себе DevOps — это не технология, а подход к разработке программного обеспечения. В первую очередь нужно понять суть DevOps и его отличие от классического подхода к разработке ПО. Стоит почитать ‘Руководство по DevOps’ (авторы Джин Ким, Патрик Дебуа), книга описывает DevOps методологию в чистом виде, как с точки зрения технологий, так и с точки зрения бизнеса.
К сожалению, очень сложно найти курсы и книги, где в одном месте собрана вся необходимая информация по DevOps. Когда я делал первые шаги в профессии, то составил для себя план обучения и старался изучить каждый пункт максимально подробно. Мне очень помог предыдущий опыт работы системным администратором/сетевиком, а также некоторые знания программирования, полученные в университете.
Но, представим, что никакого предыдущего опыта нет. И освоить профессию DevOps-инженера нужно с нуля. Ниже я делюсь планом действий — списком необходимых навыков для эффективного прохождения собеседования.
Язык программирования
DevOps-инженер не программист. Конечно, есть разработчики, которые совмещают сразу 2 компетенции. Написание кода DevOps-инженеру нужно для того, чтобы автоматизировать процессы, а также создавать личные инструменты.
Наиболее популярным языком среди DevOps’ов и простым для изучения является Python. Также все чаще используется Golang. Он работает быстрее Python, но его изучение занимает больше времени.
Для изучения Python можно посмотреть на Youtube любой курс "Python для начинающих’". Для старта этого будет достаточно. Для Golang есть отличный обучающий сайт от создателей языка. Как я говорил ранее, Golang сложнее, но он набирает популярность, и его изучение — отличная инвестиция в свою карьеру.
Операционные системы
Полезно вникнуть в особенности различных операционок семейства Unix. Возможно, вы не будете использовать каждую из них, но знать заранее, c каким проектом придется столкнуться — невозможно.
Строение операционных систем лучше изучить детально: каким образом происходит работа внутри системы, файловой подсистемы, сокетов, оперативной памяти и сетей, как система взаимодействует с потоками и разнообразными процессами, каким образом она выполняет распределение нагрузок и ресурсов.
"Ядро Linux.Описание процесса разработки" (автор Роберт Лав) — лучшая книга по Linux, очень детальная и подробная. Она затрагивает все принципы работы системы. В то же время, она сложная и объемная. Для практических знаний можно начать с Youtube-канала Кирилла Симаева.
Работа с терминалом
Терминал — рабочая среда DevOps’a. Нужно знать, как быстро выполнять базовые манипуляции с системой, текстом, сетью. В системе нужно уметь смотреть состояние ресурсов, выполнять локальные конфигурации, отслеживать, к примеру, сетевой трафик и открытые соединения, конфигурацию ядра. В работе встретится много работы с текстом, например, редактирование конфигураций. Для этого лучше использовать редакторы в терминале — Vi/Vim/Nano. Пригодятся знания инструментов обработки текста, вроде grep/awk/wc/cat/echo и т.д. Часто придётся смотреть логи локально, и нужно знать инструменты для этого.
Научиться работать с терминалом проще всего активно его используя. Старайтесь использовать терминал для повседневных задач, пусть это войдет в привычку.
Сети
Взаимодействия приложений и пользователей с приложениями происходят через сеть. Важно знать, как она работает, по каким принципам взаимодействуют хосты в сети, как работает DNS, как помочь клиенту найти нужный хост (а также сделать отказоустойчивость и балансировку нагрузки), как соединить большие сети, какие протоколы как передают данные и как их зашифровать.
Подробные статьи по сетям: серия "Сети для самых маленьких" от Linkmeup.
Принцип "Everything as Code”
Один из главных современных принципов, позволяющий управлять конфигурацией практически всего, используя некую форму кода, хранить её в Git, версионировать и создавать интеграционные пайплайны для автоматизации выкатки новых версий.
Infrastructure as Code — это управление вашей инфраструктурой. В силу того, что в основном сервера виртуальные, это применимо практически к любому варианту. Основные инструменты: Terraform, Pulumi.
Configuration as Code — управление вашими системами на серверах, их конфигурация и управление состоянием, а также варианты автоматизации исполнения сценариев на всех серверах сразу. Основные инструменты: Ansible, Chef, Puppet.
Pipeline as Code — вся ваша автоматизация процессов в виде кода, будь то сборка, тестирование, отправка на подтверждение. В принципе, для изучения хватит любого из перечисленных инструментов, так как все они предельно схожи как по концепциям, так и по используемым компонентам для построения. Основные инструменты: Gitlab-CI, Jenkins pipeline as code, Azure DevOps.
Хорошая книга Terraform: “Инфраструктура на уровне кода”, она поможет понять принцип “Infrastructure as Code” и один из основных его инструментов — Terraform. Остальные принципы эффективнее всего изучать в процессе работы.
Облачные инфраструктуры
Принципы работы облачных инфраструктур схожи: виртуальные сети, вычислительные инстансы, хранилища и способы авторизации. Остальное зависит от провайдера и предоставляемых сервисов.
Для старта достаточно будет пройти курс от Amazon. В настоящий момент он доступен только на английском языке, но для понимания курса вовсе не обязательно знать язык в совершенстве, базового уровня достаточно.
Оркестрация контейнеров
В эпоху микросервисов контейнеризация используется очень активно. Контейнерами нужно как-то управлять, для этого существует несколько главных инструментов — оркестраторов. Самый распространенный (так как поддерживается и продвигается Google) — Kubernetes, также используется Docker-Swarm, в больших корпорациях — Openshift.
Для Kubernetes отлично подойдет книга “Осваиваем Kubernetes” (автор Сайфан Джиджи). Ключевой момент работы с этой книгой — повторять все практические примеры, описанные в ней.
Метрики и логирование
Метрики и логирование — инструмент в анализе инцидентов и того, как работает инфраструктура. Важно знать, как и куда собирать метрики, логи, как и на основе чего создавать алерты. Основные инструменты :
- Логирование: ELK стек/Splunk/Datadog.
- Метрики: TICK стек/Prometheus/Zabbix и Grafana как дашборд.
Английский язык
Большая часть документации, курсов и статей выходит на английском языке. Эти знания также будут плюсом при устройстве на работу, так как многие проекты предполагают общение с зарубежными заказчиками.
И, конечно, всегда держите руку на пульсе новых технологии. Читайте статьи на Habr и других ресурсах. Изучайте новые технологии, пробуйте с ними работать и делайте выводы, подходят ли они для ваших текущих задач. Ведь не всегда то, что модно, подойдет для нужд вашей компании/проекта.
Регистрируйся на конференцию Career Day, которая пройдет 10 апреля, и послушай доклад Александра Шуляка (Великобритания) на тему "DevOps в большой и маленькой компании. Различия, карьера, рост, перспективы".
Автор Александр Шуляк
Горячие темы