База знань, без яких не обійтися DevOps-інженеру
DevOps’и — дуже затребувані ІТ-спеціалісти, попит на яких приваблює як початківців, так і досвідчених фахівців. Сфера DevOps-інженерії одна з наймолодших в ІТ, тому в ній постійно з’являються все нові й нові інструменти. Тож розгляньмо більшість із них тут і зараз
В’ячеслава Нікітан, DevOps-інженер у NIX, зібрав найголовніші інструменти, які знадобляться у процесі професійного розвитку. У цій статті описано, що DevOps має знати хоча б на базовому рівні.
Базові навички
Залежно від проєкту задачі DevOps-інженера можуть відрізнятися і відповідно — необхідні скіли. Та основа переважно однакова.
- Адміністрування операційних систем. Оскільки більшість серверів та хмарних сервісів працюють на Linux, ви маєте знати принципи роботи ОС під капотом, вміти працювати з терміналом, запускати бекапи, створювати облікові записи, налаштовувати безпеку тощо.
- Адміністрування серверів. Для цього треба опанувати nginx та Apache, розібратися у роботі та конфігуруванні поштових серверів, DNS-серверів і серверів баз даних, у тому числі SQL та NoSQL.
- Розгортання сайтів — одна з базових задач DevOps. Треба підготувати оточення для деплою сайту, зібрати та залити код на сервер, налаштувати систему моніторингу з логами та метриками, конфігурувати мережу.
Мови програмування
Щоб створювати скрипти та автоматизувати рутинні процедури, DevOps має знати базово хоча б одну мову програмування. Найбільш популярний варіант у нашій сфері — Python, зі зрозумілим синтаксисом та безліччю готових рішень для більшості завдань.
Особисто я б радив ще bash і Groovy (допоможе в роботі з Jenkins, про який розповім далі), а також PowerShell для Windows Server. Плюсом будуть знання й такої потужної нескриптової мови як Golang. Та в будь-якому разі глибоко занурюватися в ці мови вам не треба.
Хмарні провайдери
DevOps має знати, як працюють хмарні сервіси, бо сучасна IT-інфраструктура все активніше будується на їх основі. Раджу навчитися використовувати шаблони проєктування середовища, налаштовувати балансування навантаження, виявляти помилки та проблеми інфраструктури, керувати даними, які розташовані на різних серверах, виконувати адміністрування, підтримку та моніторинг.
Щодо провайдера, то тут вибір за вами. Я раджу зосередитися на одному з трьох китів: Amazon Web Services, Azure від Microsoft або Google Cloud Platform.
Системи контролю версій
Стандартом у галузі є Git. З ним можна швидко розділяти та об’єднувати версії, відстежувати та аналізувати будь-які зміни в коді та файлах, повертатися до старих версій. Усе це важливо в проєктах із розподіленими командами, коли розробники одночасно працюють над різними фічами, які має деплоїти DevOps.
Інструменти управління конфігураціями
Конфіг-менеджмент потрібен для стандартизованих налаштувань і контролю серверів, сервісів, середовищ, застосунків. Для автоматизації всього цього інструментів вдосталь.
Як на мене, найпростіший і зручний — Ansible. Також можете розглянути Puppet, SaltStack або Chef.
Інструменти управління інфраструктурою
DevOps багато в чому спирається на підхід Infrastructure as a Code. Згідно з цією моделлю, менеджмент інфраструктури відбувається через конфіг-файли, які можна перевикористовувати (замість ручного редагування окремих конфігурацій).
Найбільш поширеним інструментом управління інфраструктурою є Terraform. Хоча зараз набирає популярності Pulumi. Іноді для розгортання інфраструктури обирають Ansible, але я б не радив. Краще взяти його для подальших налаштувань і деплою.
Інструменти CI/CD
Впровадження у розробці підходів Continuous Integration та Continuous Deployment фактично є однією з причин появи DevOps-методології як такої. Тому вам не обійтися без володіння хоча б одним інструментом, що забезпечує безперервну інтеграцію фіч і деплой застосунків. Серед них: GitHub Actions, ArgoCD, CircleCI, TeamCity.
Інструменти контейнеризації
Для упаковування застосунків у контейнери найчастіше використовують Docker. Він має простий синтаксис та архітектуру. Всі команди деплою прописуються в текстовому документі Dockerfile. Для розгортання достатньо лише однієї команди, а не декількох скриптів, як зазвичай.
Для повторюваних задач можна створити шаблони у вигляді Docker-образів, а щоб керувати кількома контейнерами, застосувати пакетний менеджер Docker Compose. Все це прискорює роботу DevOps-фахівця. На додачу Docker підтримує AWS та Azure, а також інтеграцію з Ansible, Jenkins та GitHub.
Інструменти оркестрації
Коли у вас є один або лише кілька контейнерів, управляти ними можна і за допомогою Docker. Однак із масштабуванням системи з’явиться потреба в окремих інструментах для кластеризації та менеджменту контейнерів. Золотим стандартом тут є Kubernetes. Він автоматизує управління, масштабування, розгортання, балансування та моніторинг контейнерів.
Kubernetes інтегрований із Docker, Terraform та Jenkins, підтримує роботу з AWS, Azure та GCP. В YAML-файлах ви зможете описувати процеси деплою та змінювати конфігурацію. При цьому можна використовувати й образи Dockerfile. Також у цьому інструменті є менеджери пакетів. І тут хочу виділити Helm. Він працює на всіх основних ОС і допомагає оновлювати застосунки, якими керує Kubernetes. Helm передбачає використання діаграм (charts), що спрощує і пришвидшує деплой навіть дуже великих, складних застосунків.
Якщо ви опанували всі описані вище інструменти, то вже вийшли на рівень дійсного хорошого DevOps-інженера та може вирішити 95% завдань. Проте у довершеності немає меж. Завжди є щось цікаве для вивчення, тож не зупиняйтесь ;). Бажаю успіхів!