На дворе 2019 год, и тема DevOps сейчас актуальна, как никогда. Говорят, что дни системных администраторов прошли, как миновала эпоха мейнфреймов. Но так ли это на самом деле?
Как это часто бывает в IT, ситуация изменилась. Появилась методология DevOps, но она не может существовать без человека с навыками системного администратора, то есть без Ops.
До того как DevOps-подход приобрёл свой современный облик, я относил себя к категории Ops. И я хорошо знаю, что испытывает сисадмин, когда понимает, сколько же всего он пока не умеет и как мало времени у него на то, чтобы этому научиться.
Но действительно ли всё так страшно? Я бы сказал, что не нужно воспринимать недостаток знаний как какую-то большую проблему. Это скорее профессиональный вызов.
Web-scale-продукты основаны на Linux или другом программном обеспечении с открытым исходным кодом, а на рынке можно найти всё меньше специалистов, способных их обслуживать. Спрос уже превысил количество профессионалов в этой области. У системного администратора уже не получится просто продолжать работать, не повышая свой уровень квалификации. Он должен иметь навыки автоматизации, чтобы управлять множеством серверов/узлов, и хорошо понимать принципы их работы, чтобы решать возникающие проблемы.
Прежде чем стать членом команды DevOps, вам предстоит проделать довольно долгий, но интересный путь, изучая новые технологии и разнообразные инструменты, необходимые для того, чтобы обслуживать систему согласно стандартам DevOps.
Итак, как же системному администратору перейти от привычного подхода в работе к новой концепции DevOps? Всё как обычно: вначале необходимо изменить мышление. Совсем непросто отказаться от подхода, которому вы следовали последние десять или двадцать лет, и начать всё делать по-новому, но это необходимо.
В первую очередь важно понять, что DevOps — это не конкретная должность в компании, а набор определённых практик. Эти практики подразумевают распределение изолированных систем, снижение вреда от багов и ошибок, частое и своевременное обновление ПО, налаженное взаимодействие между разработчиками (Dev) и администраторами (Ops), а также постоянное тестирование не только кода, но и всей структуры в рамках процесса непрерывной интеграции и доставки (CI/CD).
Наряду с изменением образа мышления нужно научиться поддерживать инфраструктуру и обеспечивать её стабильную работу, надёжность и доступность для непрерывной интеграции и доставки приложений, сервисов и ПО.
Чего вам может не хватать как специалисту по Ops, так это навыков программирования. Сейчас написание сценариев (скриптов), которыми системные администраторы пользуются для автоматизированной установки патчей на сервере, управления файлами и учётными записями, для устранения неполадок и составления документации, уже считается устаревшим. В относительно простых случаях сценарии по-прежнему применяются, но концепция DevOps подразумевает решение крупномасштабных задач, будь то внедрение, тестирование, работа со сборками или развёртывание.
Таким образом, если вы хотите научиться автоматизации, нужно хотя бы немного освоить программирование, пусть вы и не разработчик, поскольку на данном этапе своего развития автоматизация инфраструктуры в DevOps требует этого навыка.
Что делать? Чтобы оставаться востребованным специалистом, нужно приобрести актуальные навыки — освоить как минимум один язык программирования, например Python. Человеку, который профессионально занимается администрированием, это может показаться сложным, поскольку он привык думать, что программируют только разработчики. Совсем необязательно становиться экспертом, однако знание одного из языков программирования (это может быть Python, Bash или даже Powershell), безусловно, станет преимуществом.
Чтобы научиться программировать, нужно какое-то время. Будьте внимательны и терпеливы — это поможет вам сохранять понимание ситуации при общении с разработчиками из команды DevOps и заказчиками. Полчаса в день, час или больше — изучение языка программирования должно стать вашей главной целью.
Системные администраторы и специалисты DevOps решают похожие задачи, однако, есть и существенное различие. Считается, что системный администратор не может делать всё то, что может инженер DevOps. Дескать, сисадмин больше сосредоточен на конфигурировании, обслуживании и обеспечении работоспособности серверных систем, а вот инженер DevOps тянет весь этот воз и ещё маленькую тележку.
Но насколько верно это утверждение?
Системный администратор: один в поле воин
Несмотря на отмеченные в этой статье различия и сходства, я всё же считаю, что между системным администрированием и DevOps существенной разницы нет. Системные администраторы всегда выполняли те же функции, что и специалисты DevOps, просто раньше никто не называл это DevOps. Считаю, что нет смысла специально выискивать различия, особенно если это не связано с какой-то задачей. Не стоит забывать и о том, что, в отличие от системного администратора, DevOps — это не должность, а концепция.
Нужно отметить ещё одну важную вещь, без которой разговор и об администрировании, и о DevOps будет неполным. Системное администрирование в привычном понимании предполагает наличие у специалиста конкретного набора навыков и ориентацию на обслуживание различных типов инфраструктур. Не в том смысле, что это универсальный сотрудник, а в том, что есть ряд задач, выполняемых всеми администраторами.
Например, им приходится время от времени выступать в роли эдакого технического разнорабочего, то есть делать буквально всё подряд. И если такой администратор один на всю организацию, то он будет выполнять вообще всю техническую работу. Это может быть что угодно: от обслуживания принтеров и копировальных машин до выполнения задач, связанных с сетью, таких как настройка маршрутизаторов и коммутаторов и управление ими или настройка брандмауэра.
Он также будет отвечать за обновление аппаратного обеспечения, проверку и анализ журналов, аудит безопасности, установку патчей на сервере, устранение неполадок, анализ первопричин и автоматизацию — как правило, посредством сценариев PowerShell, Python или Bash. Один из примеров использования сценариев — это управление учётными записями пользователей и групп. Создание учётных записей пользователей и назначение разрешений — задача чрезвычайно утомительная, поскольку пользователи появляются и исчезают почти каждый день. Автоматизация посредством сценариев позволяет высвободить время для решения более важных инфраструктурных задач, например для обновления коммутаторов и серверов и выполнения других проектов, влияющих на прибыльность компании, в которой администратор работает (хотя и принято считать, что IT-отдел не приносит доход напрямую).
Задача системного администратора — не тратить время впустую и экономить деньги компании любыми возможными способами. Иногда системные администраторы работают как члены большой команды, объединяющей, к примеру, администраторов Linux, Windows, баз данных, хранилищ и так далее. Рабочий график тоже бывает разным. Например, смена в одной временной зоне в конце дня передаёт дела следующей смене в другой временной зоне, чтобы процессы не останавливались (follow-the-sun); или у сотрудников обычный рабочий день с 9 утра до 5 вечера; или же это работа в круглосуточном дата-центре.
Системные администраторы со временем научились мыслить стратегически и сочетать важные дела с рутинными задачами. У команд и отделов, в которых они работают, обычно не хватает ресурсов, но при этом все стараются выполнять ежедневные задачи в полном объёме.
DevOps: разработка и обслуживание едины
DevOps — это своего рода философия процессов разработки и обслуживания. Такой подход в мире IT стал поистине новаторским.
Под эгидой DevOps на одной стороне трудится команда разработчиков программного обеспечения, а на другой — команда специалистов по обслуживанию. Частенько к ним присоединяются специалисты по управлению продуктом, тестировщики и проектировщики пользовательского интерфейса. Объединив усилия, эти специалисты оптимизируют рабочие операции, чтобы быстро выкатывать новые приложения и обновлять код с целью поддержки и улучшения эффективности работы всей компании.
В основе DevOps — контроль за разработкой и функционированием ПО на протяжении всего жизненного цикла. Специалисты по обслуживанию должны поддерживать разработчиков, а перед разработчиками стоит задача разбираться не только в API, используемых в системах. Они должны понимать, что находится «под капотом» (то есть как функционирует аппаратное обеспечение и операционные системы), чтобы лучше справляться с ошибками, решать проблемы и взаимодействовать со специалистами по обслуживанию.
Системные администраторы могут перейти в команду DevOps, если они хотят изучать новейшие технологии и открыты для инновационных идей и решений. Как я уже говорил, им необязательно становиться полноценными программистами, но освоение языков программирования, таких как Ruby, Python или Go, поможет им стать очень полезными членами команды. Хотя системные администраторы традиционно выполняют всю работу самостоятельно и часто воспринимаются как одиночки, в DevOps их ждёт совершенно противоположный опыт, когда все участники процесса взаимодействуют друг с другом.
Тема автоматизации становится всё более актуальной. Как системные администраторы, так и специалисты DevOps заинтересованы в оперативном масштабировании, снижении количества ошибок, а также в быстром поиске и устранении существующих ошибок. Таким образом, автоматизация — это понятие, где две области сходятся. Системные администраторы отвечают за такие облачные сервисы, как AWS, Azure и Google Cloud Platform. Они должны понимать принципы непрерывной интеграции и доставки и то, как использовать в работе инструменты типа Jenkins.
Кроме того, системные администраторы должны применять такие средства настройки и управления, как Ansible, необходимые для параллельного развёртывания десяти или двадцати серверов.
Основное понятие — инфраструктура как код. Программное обеспечение во всём. По сути, чтобы профессия системного администратора не потеряла актуальности, нужно лишь немного сменить акцент. Системные администраторы занимаются обслуживанием и должны уметь эффективно взаимодействовать с разработчиками, и наоборот. Как говорится, одна голова хорошо, а две — лучше.
И последняя деталь в этом механизме — это Git. Работа с Git — одна из традиционных каждодневных обязанностей системного администратора. Эта система управления версиями широко используется разработчиками, специалистами DevOps, Аgile-командами и многими другими. Если ваша работа связана с жизненным циклом ПО, то совершенно точно вы будете работать с Git.
Git содержит в себе массу возможностей. Скорее всего, вы никогда не выучите все команды Git, но точно поймёте, почему этот инструмент считается главным в коммуникации и совместной работе над программным обеспечением. Основательное знание Git очень важно, если вы работаете в команде DevOps.
Если вы системный администратор, то вам нужно лучше изучить Git, понять, как строится управление версиями и запомнить распространённые команды: git status, git commit -m, git add, git pull, git push, git rebase, git branch, git diff и другие. Существует множество онлайн-курсов и книг, которые помогут изучить эту тему с нуля и стать профессионалом с конкретными навыками. Есть также замечательные шпаргалки с командами Git, поэтому зубрить их все необязательно, но чем больше вы пользуетесь Git, тем проще вам будет.
Заключение
В конечном счёте вы сами решаете, нужно ли вам становиться специалистом DevOps или лучше остаться системным администратором. Как видите, для перехода требуется обучение, но чем раньше вы начнёте, тем лучше. Выберите язык программирования и параллельно изучайте такие инструменты, как Git (контроль версий), Jenkins (CI/CD, непрерывная интеграция) и Ansible (конфигурирование и автоматизация). На каком бы варианте вы ни остановились, не забывайте, что нужно постоянно учиться и совершенствовать свои навыки.