Из инженеров в DEVOPS — «Войти в  IT» на практике

Меня зовут Степан Вахета, и я хочу рассказать о своем пути от инженера инфраструктуры до позиции младшего DevOps-инженера в HOSTKEY. Надеюсь, эта информация будет полезна тем, кто находится в раздумьях по поводу развития карьеры в IT или о переходе в новую профессию. Я специально делаю акцент на практике, поскольку теория без нее мертва.

Хотя моя предыдущая работа не была напрямую связана с IT-сферой, она все же была технической (до этого я чуть больше года проработал техником в компании-интеграторе, а ранее вообще был автомехаником). Я всегда интересовался оборудованием и люблю разбираться в его устройстве. Поэтому, начав исследовать рынок вакансий в IT, я обнаружил много интересных вариантов. Мне хотелось работать именно в ЦОД — быть тем человеком, кто ходит по машинным залам и обслуживает эту мощную инфраструктуру под гул вентиляторов, кто дежурит ночами и в праздники. Поэтому среди вакансий искал эту роль.

Аренда выделенных и виртуальных серверов в дата-центрах Европы, США и России за рубли.

Обучение

Поскольку я хотел начать карьеру в IT уже с некоторым багажом знаний и практических навыков, то решил самостоятельно обучаться в этой сфере. За год я изучил много теоретического материала, систематически приобретал домой различное оборудование и пытался его настраивать, чтобы закрепить полученные знания на практике. Благодаря такому подходу я смог получить базовое понимание процессов и принципов работы техники в выбранной мной сфере. Это помогло мне развить необходимые навыки для начала карьеры и дало уверенность в своих силах. Предварительное обучение, особенно практика, позволили быстро влиться в рабочий процесс после трудоустройства.

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

Один из дней в процессе настройки купленного оборудования

Один из дней в процессе настройки купленного оборудования

Постепенно я создал домашнюю IT-инфраструктуру. Начинал я с устройств Mikrotik — экспериментировал с разными настройками от VLAN до беспроводных протоколов. Вскоре любопытство подтолкнуло меня обновить все сетевое оборудование на Cisco. Я продолжил «играть с настройками», реализуя различные интересные мне сценарии. 

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

На сервере использовал гипервизор и экспериментировал с виртуализацией:

Собранный сервер в кастомном корпусе, который я переделал из старого ПК

Собранный сервер в кастомном корпусе, который я переделал из старого ПК

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

  • HCIA-R&S (Маршрутизация и коммутация);

  • HCIA-WLAN (Беспроводные локальные сети);

  • HCPA-IP Network (Проектирование IP-сетей);

  • HCIA-Storage (Хранение данных);

  • HCIP-Data Center Facility (Центры обработки данных).

Подготовка к этим экзаменам и получение сертификатов помогли узнать много новой информации в сфере сетевых технологий.

Трудоустройство. Инженер инфраструктуры ЦОД. Март 2022

При поиске работы я не спешил в выборе, а уделял больше внимания оформлению вакансий и репутации компаний. В итоге я остановился на должности инженера инфраструктуры в ЦОД в HOSTKEY  и отправил резюме в компанию. На интервью я познакомился с руководителем отдела технической поддержки и руководителем отдела DevOps. Мне задавали вопросы по профилю деятельности. На одни, по моему мнению, я ответил развернуто и корректно, на другие — не столь уверенно, а на третьи не смог ответить в полной мере. Также я предложил продемонстрировать свои практические навыки, выполнив задачу в терминале в режиме реального времени.

В целом собеседование очень понравилось, остались только положительные эмоции, но сам я себя оценил не так хорошо, как хотелось бы. Через пару дней со мной связался тот самый человек из отдела кадров с предложением о трудоустройстве, и я с радостью принял предложение.

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

Я начал осваивать и другие внутренние инструменты и сервисы, которые используются в компании. Хотя изначально для меня это были незнакомые вещи, постепенно я научился работать с ними, на практике применяя имеющиеся теоретические знания. Этот ценный опыт позволил мне понять, как технологии, о которых я знал ранее, применяются для решения реальных бизнес-задач.

В нашей компании действует система грейдов, позволяющая точно знать, какие навыки и компетенции необходимы для профессионального роста и перехода в различные отделы. Общая схема, вероятно, стандартна для всех хостинг-провайдеров:

3ab65a5803246fb429122f8d4040a704.png

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

Теоретические знания

Лицензии ПО

Ориентироваться в актуальных моделях лицензирования ПО. Разбираться в особенностях Open Source, Free Software и проприетарных решений. Понимать применимость и основные различия систем лицензирования: GPLv2/3, AGPL, Apache/MIT/BSD, CreativeCommons.

Различия ОС с точки зрения пакетных систем и системы релизов

Различать source-based и бинарные дистрибутивы Linux. Знать примеры (Gentoo vs Ubuntu).

Знать циклы выпуска релизов популярных дистрибутивов. Концепции статичных релизов и rolling-release (Debian, CentOS vs Arch, OpenSuse). Приводить примеры ОС с разными моделями релизов.

Модели взаимодействия вычислительных систем

Клиент-серверная модель. Одноранговая (пиринговая) модель.

Общее устройство LVM Linux, управление дисками Windows

Структура LVM и возможности подсистемы (для чего используется). Уметь просматривать и анализировать информацию по разбивке, создавать простые инсталляции LVM.

Использование оснастки Windows для работы с дисками. Концепция динамических дисков.

RAID

Поддерживаемые mdadm виды RAID. Различия в метаданных, ограничения программного RAID, преимущества над FakeRAID и Hardware RAID. Мониторинг RAID-устройства, как отследить процедуру подготовки устройства и его статус с помощью подсистемы proc. Управление аппаратным RAID (LSI/Avago/Broadcom) из ОС: MegaCLI и др. утилиты.

Система прав POSIX

Устройство стандартной системы прав. Битовые обозначения. Хранение прав на файлы. Знать sgid/suid биты, уметь применять для файлов и директорий.

Система прав на файлы Windows

Устройство подсистемы, где хранятся права. Явные и неявные ограничения, просмотр текущих разрешений.

Процедура загрузки

BIOS-загрузка (Legacy). Знать стандарт MBR, как происходит передача управления загрузчику.

Ориентироваться в устройстве конфигурации grub2, уметь работать с dd с целями резервного копирования главной загрузочной записи.

Устройство реестра Windows

Понимать общее устройство реестра, ориентироваться в назначении основных ветвей, уметь работать с оснасткой regedit, добавлять, изменять, удалять записи.

Практические навыки

Поиск документации

Владеть утилитами man, info. Уметь просматривать и анализировать краткий help к gnu/posix cli утилитам.

Удаленное управление

Подключение к удаленным машинам по протоколам RDP, VNC, Spice, ssh.

Настройка сети

Необходимо уметь настраивать самый простой и распространенный случай: 1 основной адаптер, 1 шлюз, 1 адрес.

Включает в себя настройку основных менеджеров сетевых соединений в Linux:
• Ubuntu netplan;
• Debian interfaces;
• NetworkManager;
• Centos 6,7 (network-scripts);
• Systemd networkd.

Уметь настроить сеть в Linux вручную без использования менеджеров, с использованием iproute2.

Уметь настраивать сеть для проприетарных систем: ESXi, Microsoft Windows. Через Gui, псевдоGui и cli.

Управление службами

Включение, остановка, постановка служб в автозагрузку, просмотр статуса служб.
• Windows;
• Systemd;
• System V;
• ESXi.

Управление модулями/драйверами Linux/Windows

Уметь просматривать и подгружать/выгружать модули: lsmod, modprobe. Уметь ставить модули в автозагрузку, добавлять модули в черный список. Умение находить драйверы для Unknown device в Windows без использования дополнительного ПО, через UID устройства.

Планировщики задач Windows/Linux, Автозагрузка в Windows

Уметь управлять планировщиками задач:
I. Windows:
1. Системный планировщик заданий.
2. Знать основные инструменты настройки автозагрузки программ:
• реестр;
• shell: startup;
• scheduler;
3. Оснастка msconfig и диспетчер задач для управления автозагрузкой.
II. Сron — составлять правила для регулярных задач, просматривать действующие правила.

Управление Firewall

Включение и отключение службы Firewall. Знать коренные отличия между Iptables, Firewalld. Уметь анализировать правила Iptables. Уметь анализировать правила firewalld, понимать логику зонирования. Уметь конфигурировать Firewall для приложений или портов; в Microsoft Windows, анализировать правила. Знать как настраивается Firewall Windows по умолчанию (что запрещено, что разрешено).

Диагностика проблем ОС и процедуры загрузки.

Для Windows — уметь искать информацию по BSOD. Для всех эксплуатируемых ОС понимать стадии загрузки, уметь проводить базовую диагностику по системным сообщениям ошибок, выявлять сбои с оборудованием или драйверами устройств в процессе загрузки. В Windows уметь искать информацию в дампах BSOD и анализировать дамп с помощью Bluescreenview.

Для Linux знать уровни Init, отличия в загрузке для Systemd. Уметь переключаться между уровнями инициализации.

Управление пользователями

Обладать базовыми навыками управления для основных ОС, через GUI и командную строку. Уметь добавить/удалить пользователя, добавить в группу, исключить из группы, назначить пароль, изменить shell (linux).

Просмотреть список групп пользователя. Список ОС:
• Windows;
• Linux;
• ESXi.

Навыки работы с Log-файлами

• Windows syslog
Просмотр и поиск по сообщениям, понимание структуры хранения логов в оснастке Microsoft Windows.

• Текстовые логи Linux, ESXi.
Знать расположение и назначение основных Log-файлов в иерархии файловой системы RedHat-based, Debian-based систем, ESXi. Уметь искать информацию по текстовым файлам с помощью утилиты grep (владеть основными параметрами утилиты, такими как исключение, нерегистрозависимый поиск, вывод строк и имени файла, отображение числа попаданий в поиск):

• Journald.
Обладать навыками фильтрации логов при помощи journalctl, делать выборки по времени, по службам, по событиям.

Просмотр и управление правами файлов Linux/Windows

Утилиты chmod, chown. Управление правами через оснастку Windows. Уметь просматривать права ls, stat.

Файловые системы

Ориентироваться в основных файловых системах, уметь рассказать применимость, ограничения, возможности:
• семейство ext;
• xfs;
• ntfs;
• fat16/32;
• vmfs;
• zfs;
• btrfs.

Уметь создавать файловые системы в Windows и Linux.

Понимать концепцию фрагментации файловой системы.

Понимать концепцию inode. Уметь расширять файловые системы.

Навигация по файловой системе в командной строке Linux и основные операции с файлами

Удалить файл — rm, rmdir.
Создать файл — touch.
Просмотреть файл — cat, head, tail.
Изменить файл в редакторе vi/nano.
Изменить директорию — cd, popd, pushd.
Просмотреть директорию — ls, tree.
Найти файл — find

Диагностика сети

Понимать назначение, ограничения утилит. Уметь применять для диагностики сетевого соединения:
• Ping;
• arping;
• tracert;
• traceroute;
• tracepath;
• mtr.

Анализ занятого пространства Linux

Уметь анализировать занятое пространство на файловых системах с помощью утилит:
• ncdu;
• du;
• df

Владеть пакетными менеджерами основных дистрибутивов

Уметь устанавливать, удалять пакеты, искать по установленным пакетам, просматривать какие файлы поставляет пакет.

Пакетные менеджеры: yum/dnf (rpm), apt (dpkg), pacman.

Уметь устанавливать ПО для FreeBSD через пакетную систему и систему ports.

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

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

Полгода спустя. Дежурный инженер. Сентябрь 2022

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

Например, мне пришлось решать проблемы с неисправностью диска в RAID-массиве (как в аппаратном, так и в программном) его идентификацией, заменой и последующим добавлением нового диска в массив. С расширением дискового пространства посредством LVM или же обычным добавлением диска, созданием требуемых разделов и файловой системы с последующим ее монтированием. 

По сети в ОС обычно было большое количество заявок, где пользователь установил себе ОС самостоятельно (или менял сам настройки в связи с заменой IP-адреса) и ошибся в конфигурации файлов (неверно указана маска/шлюз/адрес), также бывали случаи, когда все правильно настроено, но сети нет даже на канальном уровне, потому что «удаленные руки» подключили кабель не в нужный порт, или сам кабель неисправный, или трансивер в сетевой карте или коммутаторе не совместимый— все это по началу у меня занимало очень много времени для определения неисправности, затем уже выработал понимание, что может произойти, и сразу начинал поиск возможных причин, что существенно повысило производительность и сократило время решения возникающих проблем.

В процессе работы я начал более тесно взаимодействовать с коллегами из отдела DevOps. При решении возникающих проблем я старался разобраться в устройстве и внутренней инфраструктуре систем, с которыми работал. Это помогло мне лучше понять, какие сервисы и инструменты используются в нашей компании.

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

Сеть

Отдельные навыки

Уметь просматривать прослушиваемые порты Windows/Linux. Понимать принцип работы петлевого интерфейса, файловых сокетов (для Linux).

Уметь снимать дамп трафика для последующего анализа (с помощью tcpdump) в Wireshark.

Libpcap — знать ответ на вопрос, работает ли tcpdump до правил файрвола или после.

Использование утилиты nmap для поиска хостов в сети и анализа хостов (открытых портов, типа ОС).

Устройство протоколов (в том числе процедура общения)

• DNS;
• DHCP;
• HTTP (S);
• SMTP, POP3, IMAP.

Уметь ответить на следующие вопросы

Для чего предназначен протокол? В какой момент задействуется? Какие приложения общаются по протоколу?

Знать протоколы и порты по умолчанию для соответствующих серверов. Уметь описать процедуру взаимодействия по шагам.

Для протокола HTTP знать разновидности запросов, ориентироваться в классификации кодов состояний, уметь использовать утилиты curl/wget/s_client для коммуникации с web-сервером.

Для протокола DNS знать основные виды записей (A, AAA, CNAME, SOA, MX, NS, TXT).

Для почтовых протоколов понимать назначение протоколов и знать (применять) средства диагностики протоколов (openssl, telnet).

Модели OSI и TCP/IP

Понимать принципы сетевого взаимодействия, уметь указать уровень для основных протоколов, а также описать назначение и сферу применения протоколов: Ethernet, ARP, IP, TCP, UDP, HTTP (s), DNS, DHCP, TFTP, FTP, SSH, SMTP, IMAP, POP3, LDAP (s), ICMP, iSCSI, FibreChannel, Ipsec, 802.1q.

Знать разницу между хабом, коммутатором, управляемым коммутатором, маршрутизатором, L4-L7 файрволом.

Маршрутизация

Уметь посмотреть/настроить временные и постоянные маршруты в Windows/Linux/BSD.

Знать как настраиваются приоритеты маршрутов

Операционные системы

Отдельные навыки

Уметь узнавать каким процессом используется файл, владеть утилитой lsof.
Продвинутые навыки сбора информации:
Об оборудовании:

Linux
• lspci;
• lsusb;
• lshw;
• lsblk;
• dmidecode.

Windows
• powershell/WSH.

О процедуре загрузки
• dmesg;
• systemd-analyse.

Уметь работать со Swap в Windows/Linux: создание, удаление, монтирование при загрузке.
Владеть утилитами tar, gzip/gunzip, dd.
Уметь работать с многозадачностью в локальном shell (использовать переключение shell ctrl+alt+Fx).
Знать концепцию лимитов Linux, уметь настраивать limits.d.
Ориентироваться в устройстве файловой системы dev (linux), уметь различать диски по UID, просматривать UID файловых систем с помощью blkid.
Уметь прерывать выполнение команд, запускать команды в фоновом режиме.

Система LVM Linux

Практические навыки (в том числе расширенные) по работе с:
• Snapshots;
• кэшированием;
• ThinProvision.

Система прав POSIX ACL и мандатные системы контроля доступа

Знать расширение прав POSIX ACL, уметь посмотреть и назначить права. Знать правила монтирования файловых систем, в том числе уметь настроить поддержку для nfs.

Область применения и возможности мандатных систем контроля доступа; уметь просматривать статус Selinux, уметь включать, отключать. Режимы работы Selinux.

Процедура загрузки EFI

Понимать устройство стандарта GPT, понимать отличия от MBR, знать основные программы для разбивки дисков Linux:
• fdisk;
• gdisk;
• parted.

Знать устройство разбивки диска, тип и структуру файловой системы для организации EFI-загрузки. 

Понимать принцип работы SecureBoot. Уметь настроить загрузку Linux с и без использования отдельного загрузчика через EFI.
Знать стандарт GPT и коренные отличия от MBR.
Уметь заставить ядро Linux обновить информацию о блочной подсистеме без перезагрузки ОС (kpartx, partprobe).

Файлы в Linux

Ориентироваться в основных типах файлов Linux, уметь определять тип файла. Знать концепции Inode и каталогов Unix.

Понимать, как связаны процессы, пользователи/группы, файлы в Unix.

Знать, что такое Filesystem Hierarchy Standart, и уметь объяснить назначение корневых каталогов современного Linux.

Шифрование

Понимать работу симметричного шифрования, ассиметричного шифрования.

Уметь создавать ключи для OpenSSH и настраивать доступ к серверу при помощи ключей.

Понимать работу системы доверия сертификатов. Уметь создавать «самоподписанный» сертификат в Linux, работать с сертификатами Lets Encrypt.

Работа со службами

Уметь создавать и настраивать службы для систем инициализации:
• Windows;
• Systemd — в том числе уметь просматривать и изменять переменные окружения, лимиты;
• System V — уметь работать со skeleton service;
• FreeBSD — включение и отключение служб (rc.conf).

Процессы

Знать систему основных сигналов, владеть утилитой kill. Понимать концепцию иерархии процессов, PID. Уметь работать с утилитами ps, top, htop.

Уметь работать с утилитой procmon Windows, для расширенного управления процессами.

Firewall

Уметь настраивать, в том числе сложные наборы правил, nat.
• Windows;
• Firewalld — в том числе создавать сервисы;
• Iptables — в том числе работать с цепочками правил;
• IPFW.

Диагностика проблем загрузки ОС

Уметь работать с загрузчиками и анализировать их конфигурации (PXELinux, iPXE, GRUB).

Обладать общими навыками работы в командной строке GRUB/EFI shell (запуск файла, загрузка конфигурации, просмотр файловой системы).

Управление пользователями и правами Linux/Windows.

Умение работать с sudoers (разрешения, переменные окружения в SUDO): структура конфигурации, настройка повышения прав для ограниченного круга программ.

Умение работать с конфигурацией HBAC Linux: hosts.allow/deny.

Понимать различия прав Samba и NTFS (файловой системы), уметь настраивать.

Работа с логами Linux

Уметь настраивать logrotate. Уметь конфигурировать Journald-лог, знать основные режимы работы. Уметь мониторить и фильтровать лог онлайн.

Регулярные выражения

Уметь отличать глобы и регулярные выражения, объяснить разницу.

Общие навыки в использовании регулярных выражений. Уметь:
• строить выражения с использованием якорей, квантификаторов, классов;
• обращать классы;
• применять (extended) POSIX-регулярные выражения для sed и расширения Perl для grep.

Основные инструменты монтирования файловых систем Linux

Знать варианты монтирования файловых систем и уметь использовать
• fstab — понимать и анализировать структуру файла, уметь самостоятельно добавлять записи;
• autofs — понимать зачем нужна подсистема и в чем отличия от fstab. Уметь анализировать и составлять конфигурацию.

DM multipath.iSCSI

Владение инструментарием Linux по работе iSCSI.

Shell (bash, gnu), cmd

Владеть всеми способами перенаправления вывода. Уметь записывать многострочную конструкцию в файл через cat << EOF >>. Уметь перенаправлять вывод STDOUT, STDERR. Знать варианты экранирования символов, уметь их применять.

Уметь создавать параметризированные скрипты. Знать специальные переменные: $?, $!, $$, $@, $1…n.

Уметь работать с:
• массивами, всеми типами циклов и конструкций выбора;
• арифметикой в bash (native или bc);
• функциями, разбивать единый скрипт на несколько файлов и обеспечивать их взаимодействие через source.

Знать основные варианты проверок test (на наличие и тип файла и т.п).

Xargs — уметь применять в сценариях с pipe.

Уметь применять утилиты sed, awk, wc, tr, cut.

Владеть базовым синтаксисом bat (cmd)-файлов.

Пакетные системы дистрибутивов

Уметь:
• управлять репозиториями apt/yum/pacman (добавлять).
• анализировать историю установок, откатывать установку пакетов.
• искать пакеты по имени файла в базе пакетного менеджера.
• анализировать и разрешать конфликты зависимостей.

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

Изучать новое и продолжать углубляться в изученное тоже важно, это должно занимать ваше свободное время или перерывы в рабочем времени. При это даже несколько недель отдыха или отрыв от деятельности по каким-либо другим причинам могут вас «выбить из колеи» на некоторое время, так что вам придется наверстывать то, что вы упустили по работе.

Нужно постоянно держать большое количество информации в голове— из-за этого упираешься в некий лимит по памяти, и новый материал становится трудно воспринимать и усваивать, особенно когда это нужно сделать быстро. Часто возникает ощущение, что как бы ни стараться, все равно чувствуешь себя некомпетентным.

Переход в DevOps. Август 2023

Постепенно я начал интересоваться не только устранением текущих инцидентов, но и тем, как все устроено, чтобы предотвратить подобные сбои в будущем. Общение с коллегами-разработчиками расширило мое понимание нашей IT-инфраструктуры в целом. Я старался рассматривать возникающие проблемы комплексно, учитывая не только текущий инцидент, но и общую архитектуру систем. 

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

  • А.Г. Кушниренко. Учебник по Информатике для средней школы.

  • Э. Танненбаум. Архитектура компьютера, Современные операционные системы, Компьютерные сети.

  • Э. Немет. UNIX И LINUX. Руководство системного администратора.

  • Д. Фиддл. Регулярные выражения.

  • П. Луридас. Алгоритмы. Самый краткий и понятный курс.

  • Н. Дрю. Практическое использование Vim.

Для примера приведу примерный перечень компетенций, необходимый для перехода на должность джуна DevOps:

Пользователи и доступы Linux

Уметь работать с файлом nsswitch.conf.

Знать назначение сервиса sssd, понимать общее устройство логина и подсистемы pam.

Процессы Unix

Разновидности состояний процессов Unix. Иерархия процессов и процедура создания новых процессов.

Виртуализация

Знать разновидности виртуализации и ориентироваться в основных актуальных решениях.

Ориентироваться в актуальных системах оркестрации виртуальных машин и контейнеров.

Понимание IOMMU, системы проброса PCI устройств в виртуализацию.

Знать принципы виртуализации устройств, протоколов доступа к консоли устройства. Ориентироваться в различиях эмулируемого оборудования и полностью виртуальных устройств.

Уметь конвертировать железные машины в виртуальные, владеть инструментарием конвертации различных форматов виртуальных жестких дисков между собой.

Блочная подсистема

Уметь конфигурировать планировщик блочной подсистемы Linux для HDD/SSD, уметь запускать команду TRIM, понимать концепцию опции Discard.

Уметь работать с системой ZFS on Linux, ориентироваться в устройстве ZFS, возможностях, ограничениях, особенностях монтирования Linux/BSD.

Планировщики задач

Уметь работать с локальными планировщиками задач, объяснить их назначение и отличия от Cron:
• systemd-timer;
• incrond.

Уметь работать с планировщиком задач Jenkins:
• уметь в классическом графическом интерфейсе создать стандартную задачу;
• уметь работать с параметрами Jenkins;
• уметь настраивать ACL для задач;
• уметь использовать хранимые секреты.

Ядро Linux

Уметь конфигурировать и собирать ядро Linux.

Умение модифицировать и анализировать initrd/initramfs, работать в командной строке initramfs.

Уметь конфигурировать модули и просматривать подробную информацию по модулям с помощью modinfo.

Уметь пользоваться системой dkms.

Средства автоматизации

RPM — умение создавать пакеты.

Ansible — умение писать простейшие плейбуки, понимать иерархию ansible: модуль, роль, плейбуков. Владеть модулями: template, file, copy, lineinfile. Уметь работать со словарями, создавать шаблоны, пользуясь циклами и конструкциями выбора.

Make — понимать концепцию, уметь создавать простейшую конфигурацию сборки.

Навыки программирования

BASH/SH — уверенное владение, способность анализировать сложные скрипты.

Базовые навыки написания своего и чтения чужого кода на любом из следующих языков:
• Go;
• Python;
• Ruby;
• PHP;
• Java.

Владение (базовый навык) VCS Git (знание SVN как плюс):
• умение работать с ветками;
• умение исправлять конфликты;
• умение просматривать лог изменений и переключаться между коммитами;
• умение откатить коммит.

Сервисы

NFSv3(4)/SAMBA/FTP — уметь настроить сервер, права и пользователей (локальных, без внешних баз данных). Уметь провести диагностику сервиса, знать порты протоколов.

Nginx/Httpd/Php-fpm — уметь конфигурировать.

PHP — уметь работать с pecl/pear, уметь использовать composer, анализировать phpinfo и конфигурировать базовый язык и дополнительные модули.

Ruby — ориентироваться в устройстве приложений на RoR, конфигурировать passenger/unicorn.

Java — уметь запускать приложения на Jetty/Tomcat, производить базовую конфигурацию Tomcat.

Mysql/Postgresql/Mongodb — уметь настраивать доступы к базам, создавать пользователей, создавать базы данных, просматривать таблицы и делать простейшие SELECT-выборки. Уметь делать резервное копирование и восстановление базы.

LDAP — уметь подключаться с помощью консольных утилит openldap (ldapsearch) и анализировать структуру базы.

Postfix/Dovecot — уметь настроить простейший почтовый сервис и не сделать открытый релей.

Деплой операционных систем

Уметь работать с kickstart (Anaconda), debian installer и unattended.xml (Windows)

Уметь конфигурировать diskpart (Windows).

Спустя некоторое время коллеги из отдела DevOps предложили мне пройти тестовые задания и оценить мои навыки. Первые задачи были несложными и не относились с написанию или улучшению наших внутренних сервисов. Мне было поручено написать bash-скрипт для выбора диска по заданным критериям (по приоритету — тип и определенный диапазон размера). Следующая задача заключалась в сборке RPM-пакета. Я не имел опыта создания пакетов и потратил много времени, изучая документацию и составляя spec-файл.

Далее нужно было написать Ansible-плейбук для для развертывания сервиса OpenSearch с его дашбордом, и последующей минимальной настройкой файрвола. Это был мой первый опыт работы с инструментами автоматизации. До этого момента я только слышал об автоматизации и никогда не работал с ней. После нескольких попыток запуска и правок плейбука, когда я увидел сообщения о выполненных тасках, а в конце сообщение success, я почувствовал мощь автоматизации (хоть и такой небольшой). И понял насколько она необходима при таком количестве серверов и сервисов, поскольку позволяет существенно экономить время, ресурсы и избежать ошибок (при правильном написании и тестировании).

Я также научился хранить код в GitLab, а не в блокноте, управлять им через систему контроля версий. Затем приступил к изучению системы мониторинга — настроил сбор нужных метрик и оповещения о критических проблемах. Ведь своевременная реакция на алерты может предотвратить много ручного труда или простой систем.

Эти задания расширили мои навыки и помогли лучше понять важность автоматизации, мониторинга и надлежащего управления инфраструктурой. Я был рад возможности развиваться в этом направлении. Шаг за шагом решение каждой задачи дает новое понимание и новый опыт, некоторые действия становятся рутинными, тогда сразу зреет план, как это автоматизировать. Ежедневно при попытке устранения проблемы узнаешь что-то новое.

Итоги

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

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

© Habrahabr.ru