тренажёр собеседований
← Маршрут обучения
модуль 7 / 12 · Эксплуатация платформы · 12 часов

Наблюдаемость: понять и исправить сбой

Научись идти от симптома к причине. Разбери три подготовленные неисправности и измеряй результат глазами пользователя.

Ещё не начат
практика · через терминал портала

Где выполнять задания

Готовый практикум проверяет три неисправности. Расчёт SLO (Service Level Objective — целевое качество услуги) и проект алерта — отдельная ручная работа; настройка мониторинга не считается выполненной автоматически.

Открыть практикум и терминал ↗

Читай урок в этой вкладке, команды выполняй в соседней. Подстановки в угловых скобках сначала замени своими значениями. Ctrl+C останавливает наблюдение или учебный сервер.

Сокращения этого модуля: расшифровки и смысл
DNS
Domain Name System — система доменных имён
KaaS
Kubernetes as a Service — Kubernetes как услуга
SLI
Service Level Indicator — показатель качества услуги
SLO
Service Level Objective — целевое качество услуги

В командах сохраняется точное написание параметров и имён. В тексте сокращения раскрываются в скобках.

Результат модуля

  • Выбирать события, статусы и логи под конкретную гипотезу.
  • Исправить три независимые неисправности и получить серверный зачёт.
  • Вычислить показатель качества, бюджет ошибок и составить разбор инцидента.

Перед началом: Отказоустойчивость и восстановление.

1. Какие сигналы помогают

Метрика — числовое наблюдение во времени, например доля успешных запросов. Лог — запись события. Трассировка связывает шаги одного запроса между компонентами. Ни один источник не заменяет остальные: график говорит, когда стало плохо, а события и логи помогают объяснить почему.

В Kubernetes полезны статус Pod, Ready, счётчик перезапусков, Events и логи конкретного контейнера. Running означает, что процесс запущен, но не обязательно принимает запросы. Логи предыдущего завершившегося контейнера запрашиваются отдельно с --previous.

Не выводи все данные без цели: сначала задай вопрос. Например, «почему приложение не готово?» требует describe и проверки readiness. «Почему контейнер завершился?» требует причины завершения, кода и предыдущего лога. Секретные значения из логов не переноси в заметки.

Events
События Kubernetes о создании, размещении и других действиях.
CrashLoopBackOff
Состояние ожидания после повторных завершений процесса.
Readiness
Готовность принимать запросы.
Burn rate
Насколько быстро ошибки расходуют допустимый бюджет.

По шагам

  1. Симптом: сайт не отвечает.
  2. Наблюдение: Pod вообще не создан из-за превышенного лимита квоты.
  3. Исправление: привести запрос в допустимые границы, затем отдельно проверить готовность и ответ.

2. Что считать хорошей работой

SLI (Service Level Indicator — показатель качества услуги) задаётся точной формулой: успешные подходящие запросы / все подходящие запросы. Укажи период, источник и то, какие запросы считаются подходящими. SLO (Service Level Objective — целевое качество услуги) задаёт желаемое значение этого показателя.

Например, при цели 99,9% и 100 000 запросов бюджет ошибок равен 100 неуспешным запросам. Это запросный бюджет; его нельзя автоматически переводить в минуты простоя без другой модели. Burn rate — скорость расходования бюджета относительно допустимой доли ошибок.

Для KaaS (Kubernetes as a Service — Kubernetes как услуга) нужны разные показатели: доступность существующих кластеров и успешность создания новых. Создание может занимать минуты и завершаться неуспешно из-за квоты. Измеряй длительность, долю успешных операций и зависшие операции отдельно.

3. Как искать причину

Иди от клиента к ближайшей границе отказа. Pending: сначала размещение и квоты. ImagePullBackOff: имя образа, наличие и доступ к реестру. CreateContainerConfigError: ссылки на конфигурацию. Running без Ready: проверка готовности и приложение.

CrashLoopBackOff означает повторяющиеся завершения, а не диагноз. Прочитай exit code и предыдущий лог. Если процесс убит из-за памяти, перезапуск не исправит нехватку. Если неверен путь readiness, увеличение лимита памяти не поможет.

В готовом задании три похожих внешних симптома имеют разные причины. Перед изменением запиши гипотезу и ожидаемое наблюдение. Исправляй по одной причине и после каждого шага проверяй эффект. Так ты учишься расследовать, а не угадывать.

4. Когда нужен сигнал тревоги

Алерт должен приводить к действию: кто реагирует, какую пользовательскую проблему проверяет и где инструкция. Слишком много ложных срабатываний мешает замечать настоящие. Метка с каждым уникальным запросом создаёт высокую кардинальность — слишком много рядов метрик.

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

После исправления составь короткий разбор: причина, влияние, почему защита не сработала и какое изменение уменьшит повторение. Не придумывай существующий Prometheus или настроенное хранение метрик: проверь установку и срок хранения отдельно.

практика · 12 часов вместе с теорией и тестом

Практика через терминал портала

  1. Подготовь диагностику

    После зачёта и очистки сетевого задания открой практикум диагностики. Подготовка создаёт три независимые неисправности в interview-lab.

    kubectl -n interview-lab get deployments,pods

    Что должно получиться. Видны portal-image, portal-config и portal-health.

    Если результат отличается

    Если открыто другое упражнение, сначала заверши его. Не смешивай версии заданий.

  2. Собери симптомы до изменений

    Начни с таблицы: приложение, статус, Ready, Events, гипотеза.

    kubectl -n interview-lab get pods -o wide
    kubectl -n interview-lab get events --sort-by=.metadata.creationTimestamp
    kubectl -n interview-lab describe deployment portal-health

    Что должно получиться. В журнале три разные причины, включая отказ создания Pod из-за квоты.

    Если результат отличается

    Отсутствие Pod не всегда означает, что контроллер ничего не делает. События ReplicaSet и Deployment объясняют отказ.

  3. Исправь образ

    В шаблоне portal-image указан несуществующий digest. Для этого задания разрешён уже используемый на стенде закреплённый образ BusyBox.

    kubectl -n interview-lab set image deployment/portal-image web=docker.io/library/busybox@sha256:dc2d74b28e4cf8984fa52af1f39bc7c3d9c73760b41a74d629f5d11b1ab28616
    kubectl -n interview-lab rollout status deployment/portal-image --timeout=90s

    Что должно получиться. Ошибка получения образа исчезла; контейнер запускается.

    Если результат отличается

    Если имя контейнера другое, сначала прочитай Deployment. Не меняй образ всех приложений через --all.

  4. Исправь конфигурацию

    Определи имя ConfigMap и отсутствующий ключ mode из описания portal-config. Прочитай учебную конфигурацию, затем добавь только нужный ключ.

    kubectl -n interview-lab get deployment portal-config -o yaml
    kubectl -n interview-lab get configmap
    kubectl -n interview-lab describe deployment portal-config

    Что должно получиться. Ты нашёл ссылку env/configMapKeyRef и сравнил её с фактическими ключами. В следующей команде используй имя из своего задания.

    Если результат отличается

    Не создавай конфигурацию с угаданным именем. Самостоятельное чтение ссылки — часть упражнения.

  5. Примени минимальное исправление

    Впиши фактическое имя учебного ConfigMap вместо угловых скобок. Это единственный блок этого шага с подстановкой; строка не копируется без изменения.

    kubectl -n interview-lab patch configmap <ИМЯ_УЧЕБНОГО_CONFIGMAP> --type=merge -p '{"data":{"mode":"training"}}'
    kubectl -n interview-lab rollout status deployment/portal-config --timeout=90s

    Что должно получиться. Ключ найден, Pod стартует. Сохранено объяснение, почему перезапуск без ключа не помогал.

    Если результат отличается

    Если значение ожидается другое, сверяй описание задания. Не редактируй общий ConfigMap вне interview-lab.

  6. Раздели квоту и готовность

    Прочитай контейнер portal-health. Сначала уменьши limit памяти до 32Mi; затем исправь путь readiness на /. Имена контейнеров сверяются с манифестом.

    kubectl -n interview-lab get deployment portal-health -o yaml
    kubectl -n interview-lab set resources deployment portal-health --limits=cpu=100m,memory=32Mi --requests=cpu=25m,memory=16Mi
    kubectl -n interview-lab patch deployment portal-health --type=json -p '[{"op":"replace","path":"/spec/template/spec/containers/0/readinessProbe/httpGet/path","value":"/"}]'
    kubectl -n interview-lab rollout status deployment/portal-health --timeout=90s

    Что должно получиться. Создание больше не блокируется квотой, а Ready становится успешным. Это два отдельных исправления.

    Если результат отличается

    Не повышай квоту вместо исправления лимита. Если rollout упёрся в дополнительные копии, прочитай стратегию и описание задания.

  7. Проверь результат и посчитай бюджет

    Нажми серверную проверку. Затем рассчитай пример бюджета локально; это вычисление, а не чтение реальных метрик.

    python3 - <<'PY'
    total, failed, target = 100000, 250, 0.999
    budget = total * (1-target)
    print('success_ratio=', (total-failed)/total)
    print('allowed_errors=', round(budget))
    print('burn_rate=', round((failed/total)/(1-target), 2))
    PY

    Что должно получиться. Серверный зачёт упражнения отдельно; в примере бюджет 100 ошибок и скорость расходования 2,5.

    Если результат отличается

    Не называй учебные числа фактической статистикой портала.

  8. Запиши разбор и очисти

    Сохрани три цепочки «симптом → доказательство → причина → исправление». Для алерта укажи действие и источник сигнала. После зачёта очисти задание.

    kubectl -n interview-lab get deployments,pods

    Что должно получиться. Все три приложения готовы до очистки, есть временная шкала и проверка восстановления.

    Если результат отличается

    Критерии реального сбора метрик и алерта оставь пустыми, если пока сделан только расчёт и проект инструкции.

Открыть терминал ↗ · Скачать файлы лаборатории →

Файлы и подготовка к этой работе

Критерии готовности

Отмечай только то, что проверил на указанном стенде. Эти галочки сохраняются в браузере. Для готовых упражнений зачёт выдаёт отдельная серверная проверка практикума; остальные задания подтверждай журналом и доказательствами. Учебная модель не заменяет реальный облачный опыт.

Что сохранить в портфолио

  • Журнал: исходное состояние → команда или действие → ожидаемый результат → фактическое наблюдение.
  • Доказательства по критериям ниже: очищенный от секретов вывод, схема или ссылка на проверенный коммит.
  • Отдельный список: что пока не запускалось, почему и какой стенд нужен для продолжения.
закрепление

Проверь понимание

8 вопросов по этому модулю. Проходной результат — 7 из 8. После ответа — объяснения и ссылки на разделы, к которым стоит вернуться.

Пройти тест модуля

Официальные источники

Чек-листы уроков, заметки к ним и результаты тестов хранятся в этом браузере; для переноса используй экспорт. Автоматические проверки и журнал практикума сохраняются отдельно на сервере.