«Я учусь на 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». Например:
- https://gitlab.com/devops-bootcamp3 — тут целая подборка на разных языках
- https://github.com/noqcks/java-hello-world-api — что-нибудь подобное
- https://medium.com/@ismailvohra/how-to-create-a-simple-hello-world-rest-api-in-spring-boot-a89e75cbb48b — можно и свой написать :)
🖐️ Попробовать запустить этот сервис руками на виртуальной машине. То есть нам нужно скачать репозиторий с кодом, собрать приложение и запустить его.
🛠️ Когда у нас сформировался список действий, которые нужно сделать для разворачивания приложения — можно описать это все в 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 во время изучения»
💡 Рекомендую подписаться на телеграм-канал, чтобы не пропускать новые посты и интересную информацию.