Перейти к основному содержимому

Как практиковаться начинающему DevOps-инженеру

·825 слов·4 минут
работа гайды
Юрий Семеньков
Автор
Юрий Семеньков
DevOps, tech, geek, mentor

«Я учусь на DevOps-а, но как мне практиковаться?»

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

В этой статье я подготовил небольшой роад-мап или список задач, по которым ты можешь получить начальный опыт. А если ты уже работаешь с чем-то, то попрактиковаться с новыми инструментами. Он довольно универсальный, поэтому в каждый пункт можно сильно углубляться.

Напоминание один: Старайся конспектировать каждый этап. Все действия и команды. Поверь, это пригодится. Я обращался к своим записям бесчисленное количество раз.

Напоминание два: На каждом этапе пытайся разобраться, а что изменится, если ты выберешь другой инструмент. Какие плюсы и минусы будут? Например, Gitlab CI или Jenkins, Ansible или Puppet, Zabbix или Prometheus.

У меня был микро-конспект видео с канала Techworld with Nana про изучение новых инструментов и технологий — 👉 пост в телеграм-канале.

Вот пример задач, в каждой из которых можно найти множество подводных камней, решение которых и даст тебе заветный опыт. Расставлены в порядке увеличения сложности:

🖥️ Создать виртуальную машину — это можно сделать как на своем компьютере/ноутбуке, так и создать в каком-нибудь облаке. Некоторые облачные провайдеры дают бесплатный период — это удобно для обучения. В первом случае мы еще и научимся базово устанавливать Linux.

🔑 Разобраться с настройкой ОС, установкой пакетов, научиться настраивать SSH и подключаться к серверу с помощью ключей.

🗯️ Найти несложный проект на Github, который ты будешь препарировать. Лучше, если это будет приложение, которое можно «повесить» на какой-нибудь порт, и оно будет что-то отдавать. Хотя бы {”status”: “ok”} или html-страничку с Hello World. Например, мой — писал о нем в телеграм-канале.

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

Искать можно по запросам типа «simple python web application». Например:

🖐️ Попробовать запустить этот сервис руками на виртуальной машине. То есть нам нужно скачать репозиторий с кодом, собрать приложение и запустить его.

🛠️ Когда у нас сформировался список действий, которые нужно сделать для разворачивания приложения — можно описать это все в Ansible.

🧑🏻‍💻 Добавить к приложению systemd-сервис, чтобы его было проще запускать и контролировать его работу. Разобраться с автозапуском, переменными окружения. Узнать какие еще бывают системы инициализации.

🤖 Автоматизировать деплой проекта — сделать репозиторий в Gitlab или GitHub, установить self-hosted runner и по документации набросать пайплайн сборки и запуска приложения. Можно вообще развернуть Jenkins и поизучать его, заодно понять разницу между этими инструментами.

📦 Наконец, написать Dockerfile и собрать приложение в контейнер. Разобраться как его запускать, пробрасывать порты, переменные, как подключать директории с виртуалки в контейнер. Изучить бест-практисы создания образов контейнеров, понять разницу между CMD и ENTRYPOINT.

🚚 Научиться загружать образы контейнеров в Docker Hub. А затем начать использовать приватные Container Registry: поднять свой, или использовать тот, что есть в Gitlab. Есть еще и крупные «комбайны» типа Nexus, Artifactory.

⛴️ Посмотреть на Docker Compose, разобраться зачем он нужен и как нам может помочь. Попробовать развернуть приложение через compose.

🌎 Установить Nginx, настроить reverse proxy для приложения. Понять как работает и получить SSL сертификат. Автоматизировать конфигурацию можно с помощью Ansible, который, кстати, тоже можно запускать из Github/Jenkins.

🔥 Установить Zabbix или Prometheus + Grafana (вместо Prometheus можно поставить Victoria Metrics). Настроить мониторинг виртуальной машины — процессора, оперативки, места на дисках, научиться отслеживать доступность приложения, сделать удобный дашборд.

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

Когда это уже давно пройдено можно переключиться на Advanced уровень:

🪵 Поднять ELK-стэк (а может быть Loki?) и настроить сбор логов приложения для более удобного просмотра.

☁️ Развернуть и настроить виртуальные машины в облаке с помощью Terraform. В дополнение можно использовать Packer и Ansible.

❤️‍🔥 Развернуть приложение в Kubernetes. Начать можно с minikube — такой кубер на минималках для локальной машины. Изучить основы и структуру Kubernetes.

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

🤔 «И что мне с этим делать потом? Что говорить на собсеседованиях?»

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

во-вторых, на собеседовании намного лучше сказать «у меня нет продакшн опыта с этим инструментом, но я изучал его самостоятельно, знаю чем он отличается от X и Y, и что даст его внедрение. вот я делал A и B во время изучения»

💡 Рекомендую подписаться на телеграм-канал, чтобы не пропускать новые посты и интересную информацию.

Related

Миграция Grafana из SQLite в PostgreSQL
·797 слов·4 минут
гайды
Не перебивай!
·276 слов·2 минут
работа
История про принтеры
·335 слов·2 минут
истории работа