Як стати DevOps інженером: обов’язки, компетенції та культура

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

Що таке культура DevOps?

DevOps (Development Operations) — методика комфортної взаємодії між командами, що відповідають за розробку та експлуатацію продукту. Для розуміння наведемо приклад.

Принцип роботи без DevOps наступний: припустимо, розробники запускають код у продакшн. Якщо у команди експлуатації виникають проблеми, вони назначають відповідальними за це команду розробки. Така процедура має вади: процес налагодження повільний, і кінцевий продукт все одно може мати недоліки.

Тому методику DevOps запровадили в якості «з’єднувального елементу» між двома командами задля покращення результату та підвищення швидкості процесів. Фахівець з DevOps особливо необхідний, коли на проєкті є проблеми зі стабільністю, масштабуванням, або коли процес створення продукту надто затягується.

Найцікавіше, що методологія DevOps стала відповіддю на потреби розробників, проджект-менеджерів, системних адміністраторів. Тобто, її не «нав’язали» згори, вона логічно розвинулась у середовищі практиків.

Культура DevOps заперечує розділення обов’язків. Вона заперечує класичне твердження, що розробники повинні виконувати лише свої обов’язки й не цікавитись, наскільки успішним буде запуск продукту у продакшн. Також ця культура не передбачає пошук «більш винної» команди у разі невдачі. Відповідальність за результат несе кожен учасник. Це значить, що проблема, яка виникає — загальна, і кожен зацікавлений в її усуненні.

Основні принципи, на яких базується концепція

DevOps — методологія, яка виникла відносно недавно (її сформували у 2008 році). Тому її принципи щороку вдосконалюються та змінюються. Загальноприйнятими вважаються наступні:

  1. Автоматизуйте все, що тільки можна (і те, що не можна, теж). Важливо, щоб процеси тестування, розгортання застосунків, встановлення оновлень, збирання реакцій користувачів відбувалися автоматично.
  2. Спрощуйте процес розробки, щоб прискорити реліз. Чим швидше замовник отримає готовий продукт, тим вищою буде ефективність його бізнесу. Додатково важливо вдосконалювати процеси моніторингу, скорочувати час на доставляння продукту користувачеві тощо.
  3. Отримуйте зворотний зв’язок якомога швидше та оперативно змінюйте й оновлюйте продукт.
  4. Працюйте за стандартами. Це унеможливлює хаос і дає змогу керувати процесами розробки, тестування та експлуатації, навіть якщо дії відбуваються паралельно.
  5. Тестуйте безперервно. Це дасть можливість контролювати процес та швидко реагувати на проблеми, що виникають.

Принципи DevOps часто порівнюють з ідеологією Agile. Але у випадку з DevOps, методика розповсюджується не тільки на процеси розробки, але й на експлуатацію та тестування. Щоправда, є декілька правил, напряму запозичених з Agile:

  • варто налагодити культуру взаємодії між підрозділами;
  • треба відмовитись від неефективних дій, які знижують загальну продуктивність;
  • рекомендується впровадити критерії оцінки ефективності роботи;
  • відповідальність за результат — тільки загальна;
  • спрощувати та автоматизувати.

Хто такий DevOps інженер: роль та обов’язки спеціаліста у компанії

DevOps інженер — спеціаліст, який має компетенції у всіх процесах та циклах розробки й експлуатації продукту. Маються на увазі: розробка, тестування, побудова архітектури, аналіз ризиків, автоматизація процесів, технічна підтримка продукту.

Загалом DevOps спеціаліста можна розглядати як адміністратора (або навіть «диригента оркестру»). Розробники знають процеси, але можуть не знати про проблеми з їх продуктом. Технічна підтримка знає про проблеми, але не розуміє принципи роботи системи. DevOps-інженер робить ці процеси прозорими для всіх учасників: шляхом автоматизації та своєчасного доставлення результатів командам.

Навчання за темою

DevOps для сисадмінів

Онлайн-курс, який навчить впроваджувати практики DevOps

Він відповідає за використання загальноприйнятої методології, налагоджуючи оптимальну роботу команд програмування та експлуатації. Ключове завдання — реалізувати поставлену бізнес-мету: створити продукт швидко, задовольнити клієнта, забезпечити прибуток компанії.

Методологія DevOps дуже об’ємна, тому універсальних спеціалістів не існує. Кожен інженер спеціалізується на конкретній ніші. Наприклад, існують реліз-інженери (вони відповідають за правильне розміщення та розгортання коду), платформенні інженери (підіймають сервери, об’єднані у кластери), DevSecOps-спеціалісти (відповідають за безпеку) та інші.

Не завжди для кожної ролі потрібен окремий фахівець. Буває, що функції Build Engineer у компанії виконує розробник, адміністратор бере на себе суброль Automation Engineer, а конкретно DevOps інженер займається автоматизацією та опрацюванням процесів розробки й доставлення продукту в продакшн.

Чим DevOps інженер відрізняється від системного адміністратора?

Відмінність — не просто у знаннях, а в підході до роботи. У випадку, коли системний адміністратор працює за узгодженим щоденним списком задач, DevOps-спеціаліст більш гнучкий. Умовно: сьогодні він може працювати з кодом, завтра — контролювати процеси тестування, післязавтра — розв’язувати помічену проблему тощо. Він працює над тими процесами, які є найбільш актуальними для команди.

Динаміка зарплатні та попит на DevOps інженерів у світі

Станом на червень 2022 року DevOps інженери в Україні входять до трійки спеціалістів з найвищою зарплатою. Середній рівень становить $3500 та має тенденцію до підвищення.

 

джерело: DOU.ua

HR-експерти, говорячи про наймання DevOps, називають ситуацію «гарячою». Річ у тому, що попит на ринку шалений, а хороших інженерів недостатньо. Такі спеціалісти потрібні компаніям, які розробляють застосунки чи сервіси і зацікавлені у налагодженні єдиної системи роботи. Приклади компаній-гігантів, які активно розвивають культуру DevOps та наймають таких спеціалістів: Amazon, Facebook, Google, Adobe. І наразі бачимо динаміку, що все більше й більше компаній починають наслідувати приклад найкращих.

Як стати DevOps інженером: необхідні компетенції

DevOps інженеру треба розумітися на специфіці розробки, тонкощах адміністрування і тестування. Розглянемо, які є вимоги до DevOps інженера. Для зручності скористаємося «дорожньою картою».


джерело: https://roadmap.sh/devops

Мови програмування

Знання хоча б однієї з зазначених у карті мов обов’язкове. Звичайно, DevOps інженеру не треба мати рівень Senior у області розробки. І обрана мова програмування теж не має критичного значення. Головне — знати мову настільки, щоб використовувати її для написання програм для автоматизації процесів. Зазвичай DevOps інженери вивчають Python, Ruby, Node.js, Go, Rust, C або C++.

Операційні системи

Вато знати принципи роботи операційних систем, концепції побудови мережі, стандарти POSIX. Потрібні навички роботи з файловою системою, сокетами, віртуалізацією, керуванням пам’яттю, введенням та виведенням, процесами. Знадобиться вміння роботи з терміналом на різних операційних системах. Так, багато сучасних компаній працюють у Linux-середовищі, тож буде потрібен досвід роботи з адмініструванням Linux та Bash-скриптами.

Мережа, протоколи та безпека

Потрібен досвід роботи з різними типами протоколів: TCP/IP, HTTP, HTTPS, SMTP, FTP. Умовно: треба розуміти різницю між HTTP і HTTPS, розбиратися у криптографічних протоколах SSL/TLS, протоколі віддаленого серверного керування SSH, передачі файлів мережею FTP, технології Port Forwarding. Додатково знадобиться розуміння мережевої моделі OSI та її рівнів. Хорошим бонусом буде освоєння опенсорсного інструменту SaltStack, який використовує push-модель для виконання команд за протоколом SSH. Він підтримує вертикальне і горизонтальне масштабування та шаблони YAML.

Налаштування

DevOps інженеру варто знати як налаштувати вебсервер (наприклад, IIS, Nginx, Apache чи Tomcat). Потрібні знання про кешуючі сервери, балансувальники навантажень, зворотні проксі, брандмауери тощо.

Інфраструктура як код

Згідно з моделлю Infrastructure as Code (IaC), налаштування інфраструктури схоже на процес розробки. Інженеру треба працювати з контейнеризацією, керувати конфігурацією. Це — ключова компетенція DevOps експерта. Вона передбачає вивчення:

  • контейнеризації (Docker). Контейнер — стандартна одиниця ПЗ, в яку упаковано застосунок з усіма необхідними для його роботи залежностями — кодом програми, середовищем запуску, системними інструментами, бібліотеками та налаштуваннями.
  • Інструментів для керування конфігурацією. Управління конфігурацією — це автоматизація повторюваних дій в ІТ-середовищі. Це може бути встановлення, модернізація, оновлення ПЗ, забезпечення безпеки, управління користувачами, управління виправленнями тощо.
  • Оркестрування контейнерів (Kubernetes). Оркестрування — це високо автоматизований процес управління пов’язаними сутностями, такими як групи віртуальних машин або контейнерів.
  • надання інфраструктури. Процес, який позбавляє розробників необхідності вручну виділяти й керувати серверами, операційними системами, підключеннями до баз даних, сховищами та іншими елементами інфраструктури щоразу, коли потрібно написати, протестувати або розгорнути програмний додаток.

Безперервна інтеграція та розгортання (CI/CD)

Безперервна інтеграція та безперервне розгортання — ключова частина методології DevOps. Тож треба освоїти інструменти GitLab, Jenkins, GitHub actions або подібні.

Побудова мікросервісної архітектури

Мікросервіси — невеликі, незалежні частини. Кожен мікросервіс діє автономно та обслуговує певну бізнес-потребу. У порівнянні з традиційним монолітним додатком мікросервіси пропонують переваги модульності, масштабованості та безпеки. Тому не дивно, що в DevOps команди переходять на мікросервісну архітектуру, яку необхідно розуміти.

Автоматизація

Запуск серверів, конфігурація програми, розгортання — за DevOps все має бути автоматизовано. Для середовища розробки часто використовують Vagrant. Для моделювання інфраструктури популярні Terraform та Cloudformation for AWS. Для управління конфігураціями — Ansible, Chef, Saltstack та Puppet.

Моніторинг програмного забезпечення та інфраструктури

В умовах одночасної роботи багатьох служб треба «тримати руку на пульсі» та мати впевненість у стабільності процесів. Для цього, наприклад, треба освоїти інструмент SigNoz — він забезпечує моніторинг системи.

Хмарні провайдери

Більшість застосунків створені для хмарних обчислень. Тому треба знати провайдерів. Головні з них — AWS, Heroku, Azure, DigitalOcean та Google Cloud. Основні компетенції для DevOps інженера у цій сфері:

  • керування безперервною роботою системи, на яку впливають навантаження, атаки, проблеми з інфраструктурою та системні помилки;
  • керування даними. Головне — розбиратися у принципах синхронізації та інших процесах, пов’язаних з одночасним залученням декількох серверів;
  • проєктування та реалізація — створення узгодженостей між процесами створення, розгортання, обслуговування, адміністрування, повторного використання компонентів;
  • управління та моніторинг — відстеження та контроль системи за умови віддаленого виконання хмарних застосунків без повного контролю над інфраструктурою. 

Майндсет DevOps інженера

У підході DevOps закладене вміння слухати й чути. Будь-які процеси повинні відбуватися з певною метою, тому потрібно вміти чути стейкхолдерів, команди — і пропонувати для них цінність. 

Майндсет девопса заточений на те, що в поняття “краще” немає меж. Будь-який сьогоднішній процес може стати кращим завтра, але при цьому вкрай важливо правильно визначати пріоритети.

Це не про відокремлення. DevOps повинен заохочувати культуру колаборації та відкритих процесів у компанії. Це може бути складно, адже деякі організації звикли “ховати” процеси одних команд від інших. Але такий патерн несумісний як з Agile, так і з DevOps.

Жага до навчання та змін може бути заразливою. Зміни та адаптація до нового може бути болісною для багатьох організацій. Але культура DevOps, яка покаже результати, може дати друге дихання організації. Такі фахівці заохочують усіх до навчання та обміну інформацією.

Отже, як стати DevOps інженером? 

По-перше, вчіться: опануйте мову програмування, розберіться в нюансах операційних систем. Вам потрібно впевнено працювати з терміналом, знати про передачу даних та протоколи шифрування, розумітися на інструментах оркестрування і контейнеризації. Системні адміністратори вже мають деякі компетенції: після навчання та отримання додаткових навичок вони можуть сміливо брати на себе нові обов’язки та переходити до нової ролі.

По-друге, починайте думати новим чином. Розвивайте в собі таку систему мислення, щоб постійно переглядати свої процеси та стратегії. Пробуйте автоматизувати їх, робити прозорими. І обов’язково спілкуйтесь з колегами: дізнавайтесь про проблеми, з якими вони стикаються, розповідайте їм про нові інструменти. Не бійтесь вдосконалюватись та заглиблюватися в нову культуру.

Також радимо почитати:


Web Academy Club

Курс "QA з нуля"