kai.kzLab

Программа

Программа симулятора DevOps: 9 месяцев работы в IT-компании

Симулятор — это год работы DevOps-инженером в вымышленной компании Qoima. Месяцы идут в порядке модулей курса DevOps KAI: Введение в IT, сети и DevOps, Linux, Docker, Git, Ansible, CI/CD, Kubernetes, Мониторинг, Cloud и Terraform. Внутри — 91 тикет от коллег, 9 дежурств, 9 постмортемов и 18 разборов реальных аварий, всего около 32 часов практики. Всё в браузере: консоль воспроизводит реальные выводы команд, ставить ничего не нужно.

Ниже — что внутри каждого месяца. Ответов и сценариев здесь нет: их открывает сам симулятор. Первые задания первого месяца бесплатны — они отмечены.

Месяц 1 · Введение в IT, сети и DevOps

Первый месяц

Навык месяца: Как устроен прод. Сервис, который работает через раз, релиз, который не доехал до прода, и первое дежурство.

DockerдеплойHTTP/TLSnginx
  • OPS-100Первый день: осмотрись на серверебесплатноджун · 4 мин
  • OPS-101Каталог то работает, то нетбесплатноджун · 10 мин
  • OPS-102Объясни продакту, как работает сайтджун · 5 мин
  • OPS-103Сервис поднялся, но снаружи не открываетсяджун · 8 мин
  • OPS-104Мобильное приложение пишет «Небезопасное соединение»джун · 10 мин
  • OPS-105Задачу закрыли вчера, а на сайте её нетбесплатно12 мин
  • OPS-106Доступ по SSH для нового разработчикаджун · 6 мин
  • OPS-107Что происходит в логах nginxджун · 10 мин
  • OPS-108nginx как единая точка входа14 мин
  • OPS-109Новая виртуалка под staging еле шевелитсяджун · 10 мин
  • Разбор аварииKnight Capital: 45 минут неудачного деплоябесплатноразбор аварии
  • Разбор аварииEricsson: один просроченный сертификат оставил без связи миллионы абонентовразбор аварии
  • ДежурствоСтажировка на дежурствебесплатнодежурство
  • ПостмортемФильтр по цене сутки не доезжал до прода, а пайплайн был зелёнымбесплатнопостмортем

Месяц 2 · Linux

Доступ к проду

Навык месяца: Linux и эксплуатация серверов. Диски, права, systemd, бэкапы — и первое ночное дежурство в паре с Тимуром.

df/du/lsofsystemdправаbashcron
  • OPS-201Диск на проде заполнен на 97%джун · 10 мин
  • OPS-202Воркер падает и не поднимается самджун · 10 мин
  • OPS-203Деплой падает с Permission deniedджун · 7 мин
  • OPS-204Бэкап, который молча не работает10 мин
  • OPS-205Сервер файлов загружен на 350%12 мин
  • OPS-206Отчёты для продавцов падают каждую ночь12 мин
  • OPS-207Кто заходил на bastion под root?12 мин
  • OPS-208Ротация логов, чтобы диск больше не кончалсяджун · 8 мин
  • OPS-209Найди запрос по его ID во всех логахджун · 10 мин
  • OPS-210nginx не стартует после переезда сертификатовджун · 8 мин
  • OPS-211sudo для деплоя: только то, что нужно8 мин
  • Разбор аварииGitLab удалил базу — и ни один бэкап не сработалразбор аварии
  • Разбор аварииВисокосная секунда, которая загрузила процессорыразбор аварии
  • ДежурствоПервое дежурстводежурство
  • ПостмортемВоркер заказов не работал 47 минут ночьюпостмортем

Месяц 3 · Docker

Всё в контейнеры

Навык месяца: Контейнеризация. Переносим catalog в контейнеры: рестарт-лупы, тяжёлые образы, compose — и первая потеря данных.

Dockerfiledocker composevolumeshealthchecksecrets
  • OPS-301Контейнер в бесконечном рестартеджун · 8 мин
  • OPS-302Образ на 1,2 ГБ, сборка 9 минут12 мин
  • OPS-303Compose для staging: app + база + админка12 мин
  • OPS-304Откуда в образе 1,4 ГБ?10 мин
  • OPS-305Приложение не видит базу по имени10 мин
  • OPS-306На build-сервере кончилось местоджун · 8 мин
  • OPS-307Воркер в compose: лимиты, перезапуск, логи12 мин
  • OPS-308Токен npm внутри образамидл · 10 мин
  • OPS-309Как образ правильно попадает в registryджун · 6 мин
  • OPS-310В Swarm из трёх реплик работает одна10 мин
  • Разбор аварииCodecov: утечка через сборку Docker-образаразбор аварии
  • Разбор аварииDocker Hub ввёл лимиты — и CI по всему миру покраснелразбор аварии
  • ДежурствоПервая неделя в контейнерахдежурство
  • ПостмортемStaging-база стёрта после docker compose down -vпостмортем

Месяц 4 · Git

Дикий запад в репозитории

Навык месяца: Git и командная работа. Ключ платёжки в истории коммитов, хотфикс на проде и плохой коммит в общей ветке.

log/show/diffreverthotfix-флоутегисекреты
  • OPS-401Боевой ключ в истории коммитов10 мин
  • OPS-402Хотфикс, когда в main недоделанные фичи6 мин
  • OPS-403Плохой коммит в общей ветке7 мин
  • OPS-404Конфликт в настройках платежейджун · 10 мин
  • OPS-405Чеки печатают копейки неправильно10 мин
  • OPS-406«Я случайно стёр два дня работы»джун · 8 мин
  • OPS-407.gitignore, который защищает, а не мешаетджун · 7 мин
  • OPS-408Процесс Merge Request в командеджун · 6 мин
  • OPS-409Репозиторий клонируется 12 минут10 мин
  • OPS-410Сканер секретов до коммита8 мин
  • Разбор аварииUber: ключ облака в приватном репозиторииразбор аварии
  • Разбор аварииleft-pad: 11 строк кода, которые сломали сборки по всему мируразбор аварии
  • ДежурствоНочь перед релизом 1.5дежурство
  • ПостмортемБоевой ключ платёжного провайдера три недели лежал в истории Gitпостмортем

Месяц 5 · Ansible

Серверы больше не настраиваем руками

Навык месяца: Автоматизация конфигурации. Две новые машины под catalog, playbook с нуля, недоступный хост и пароль в открытом виде.

playbooksinventoryhandlerstemplatesVault
  • OPS-501Playbook: nginx на новых серверах12 мин
  • OPS-502Playbook прошёл не на всех серверах7 мин
  • OPS-503Пароль базы в открытом виде6 мин
  • OPS-504Что изменит playbook, если его запустить?джун · 8 мин
  • OPS-505Роль: пользователи команды на всех серверах12 мин
  • OPS-506Playbook упал на одном сервере с «Could not get lock»джун · 8 мин
  • OPS-507Выкатка на серверы по одному, а не всем сразумидл · 12 мин
  • OPS-508Почему на web-03 один воркер nginx?8 мин
  • OPS-509Новый сервер — от создания до трафика6 мин
  • OPS-510Шаблон не собирается: переменная не определена8 мин
  • Разбор аварииОдин неверный параметр — и S3 лежит больше четырёх часовразбор аварии
  • Разбор аварииAzure и 29 февраля: сертификат на несуществующую датуразбор аварии
  • ДежурствоНочь массовых измененийдежурство
  • ПостмортемПрогон роли уронил nginx на всех веб-серверах на 9 минутпостмортем

Месяц 6 · CI/CD

Деплой одной кнопкой

Навык месяца: CI/CD. Пайплайн с нуля, сломанный push в registry, первый откат через CI — и ночь большого релиза.

GitLab CIRunnerRegistrymulti-stage pipelinerollback
  • OPS-601Пайплайн catalog с нуля14 мин
  • OPS-602Пайплайн красный на build7 мин
  • OPS-603Откат релиза через пайплайн6 мин
  • OPS-604Пайплайн тратит 6 минут на npm ci12 мин
  • OPS-605Тест то падает, то проходит10 мин
  • OPS-606Пайплайн идёт 22 минутыджун · 8 мин
  • OPS-607Staging автоматически, прод — по тегу и вручную12 мин
  • OPS-608Blue-green деплой checkoutмидл · 6 мин
  • OPS-609Все пайплайны висят в pendingджун · 8 мин
  • OPS-610Пароль базы в логе джобы10 мин
  • Разбор аварииCircleCI: один заражённый ноутбук — и все клиенты меняют секретыразбор аварии
  • Разбор аварииCrowdStrike: одно обновление, миллионы синих экрановразбор аварии
  • ДежурствоНочь большого релизадежурство
  • ПостмортемРелиз checkout 2.9 шесть минут ломал оплатупостмортем

Месяц 7 · Kubernetes

Переезд в Kubernetes

Навык месяца: Kubernetes. CrashLoopBackOff, сервис без endpoints, production-ready манифест и откат зависшего релиза.

pods/deploymentsservicesprobesresourcesrollout
  • OPS-701Под в CrashLoopBackOff8 мин
  • OPS-702Production-ready Deploymentмидл · 14 мин
  • OPS-703Service есть, а трафика нет7 мин
  • OPS-704Релиз завис на середине7 мин
  • OPS-705Под висит в Pendingджун · 8 мин
  • OPS-706Поменяли настройку, а сервис её не видитджун · 8 мин
  • OPS-707Ingress для checkout с HTTPS12 мин
  • OPS-708База в кластере не стартует: PVC в Pending8 мин
  • OPS-709Автомасштабирование checkout10 мин
  • OPS-710Образ из приватного registry не скачиваетсяджун · 8 мин
  • OPS-711Обслуживание ноды без простоя6 мин
  • Разбор аварииReddit: обновление Kubernetes на Пи-деньразбор аварии
  • Разбор аварииPokémon GO: в 50 раз больше трафика, чем планировалиразбор аварии
  • ДежурствоПервая неделя в Kubernetesдежурство
  • ПостмортемКаталог недоступен 23 минуты после переезда в k8sпостмортем

Месяц 8 · Мониторинг

Чёрная пятница

Навык месяца: Мониторинг и инцидент-менеджмент. Алерты, которым верят, PromQL под нагрузкой — и главная ночь года для маркетплейса.

PrometheusPromQLAlertmanagerGrafanaLoki
  • OPS-801Алерт на долю ошибок, а не на их количествомидл · 12 мин
  • OPS-802Разведка перед большой ночью8 мин
  • OPS-803«Сайт тормозит» — а какой именно сервис?10 мин
  • OPS-804Чтобы ночью будило только важное12 мин
  • OPS-805Поиск причины по логам в Lokiджун · 10 мин
  • OPS-806Вернуть web-04 в мониторингджун · 10 мин
  • OPS-807Предсказать, когда кончится дискмидл · 10 мин
  • OPS-808Процесс инцидента: кто что делает6 мин
  • OPS-809Сколько бюджета ошибок осталосьмидл · 10 мин
  • OPS-810Метрика бэкапа замерла8 мин
  • Разбор аварииCloudflare: одно регулярное выражение на весь мирразбор аварии
  • Разбор аварииDatadog: сутки без мониторинга у тысяч компанийразбор аварии
  • ДежурствоНочь Чёрной пятницыдежурство
  • ПостмортемОшибки оплаты в первые 40 минут Чёрной пятницыпостмортем

Месяц 9 · Cloud и Terraform

Инфраструктура как код

Навык месяца: Облако и IaC. Security group, открытая всему интернету, план, который тихо удаляет базу, и переезд без простоя.

Terraformsecurity groupsS3stateмиграции
  • OPS-901SSH, открытый всему интернету12 мин
  • OPS-902План, который удаляет базумидл · 10 мин
  • OPS-903Переезд без простоямидл · 7 мин
  • OPS-904Счёт за облако вырос на 40%мидл · 12 мин
  • OPS-905State в одном месте и под блокировкой10 мин
  • OPS-906Кто-то менял инфраструктуру руками10 мин
  • OPS-907Модуль вместо копипастымидл · 12 мин
  • OPS-908Группа автомасштабирования не растёт10 мин
  • OPS-909Восстановление базы из снапшотамидл · 8 мин
  • OPS-910Сервис не может записать файл в хранилище10 мин
  • Разбор аварииAtlassian: скрипт удалил 883 сайта клиентовразбор аварии
  • Разбор аварииCapital One: как настройка в облаке стоила данных 100 миллионов человекразбор аварии
  • ДежурствоДежурство по облакудежурство
  • ПостмортемБакет с отчётами продавцов был публично доступен 22 минутыпостмортем

Разборы аварий подробно — в блоге. Проверить уровень до старта — бесплатный тест навыков.