Наблюдаемость: понять и исправить сбой
Научись идти от симптома к причине. Разбери три подготовленные неисправности и измеряй результат глазами пользователя.
Ещё не начатГде выполнять задания
Готовый практикум проверяет три неисправности. Расчёт 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
- Насколько быстро ошибки расходуют допустимый бюджет.
По шагам
- Симптом: сайт не отвечает.
- Наблюдение: Pod вообще не создан из-за превышенного лимита квоты.
- Исправление: привести запрос в допустимые границы, затем отдельно проверить готовность и ответ.
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 или настроенное хранение метрик: проверь установку и срок хранения отдельно.
Практика через терминал портала
Подготовь диагностику
После зачёта и очистки сетевого задания открой практикум диагностики. Подготовка создаёт три независимые неисправности в interview-lab.
kubectl -n interview-lab get deployments,podsЧто должно получиться. Видны portal-image, portal-config и portal-health.
Если результат отличается
Если открыто другое упражнение, сначала заверши его. Не смешивай версии заданий.
Собери симптомы до изменений
Начни с таблицы: приложение, статус, 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 объясняют отказ.
Исправь образ
В шаблоне 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.
Исправь конфигурацию
Определи имя 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 и сравнил её с фактическими ключами. В следующей команде используй имя из своего задания.
Если результат отличается
Не создавай конфигурацию с угаданным именем. Самостоятельное чтение ссылки — часть упражнения.
Примени минимальное исправление
Впиши фактическое имя учебного 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.
Раздели квоту и готовность
Прочитай контейнер 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 упёрся в дополнительные копии, прочитай стратегию и описание задания.
Проверь результат и посчитай бюджет
Нажми серверную проверку. Затем рассчитай пример бюджета локально; это вычисление, а не чтение реальных метрик.
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.
Если результат отличается
Не называй учебные числа фактической статистикой портала.
Запиши разбор и очисти
Сохрани три цепочки «симптом → доказательство → причина → исправление». Для алерта укажи действие и источник сигнала. После зачёта очисти задание.
kubectl -n interview-lab get deployments,podsЧто должно получиться. Все три приложения готовы до очистки, есть временная шкала и проверка восстановления.
Если результат отличается
Критерии реального сбора метрик и алерта оставь пустыми, если пока сделан только расчёт и проект инструкции.
Открыть терминал ↗ · Скачать файлы лаборатории →
Файлы и подготовка к этой работе
Критерии готовности
Отмечай только то, что проверил на указанном стенде. Эти галочки сохраняются в браузере. Для готовых упражнений зачёт выдаёт отдельная серверная проверка практикума; остальные задания подтверждай журналом и доказательствами. Учебная модель не заменяет реальный облачный опыт.
Что сохранить в портфолио
- Журнал: исходное состояние → команда или действие → ожидаемый результат → фактическое наблюдение.
- Доказательства по критериям ниже: очищенный от секретов вывод, схема или ссылка на проверенный коммит.
- Отдельный список: что пока не запускалось, почему и какой стенд нужен для продолжения.
Проверь понимание
8 вопросов по этому модулю. Проходной результат — 7 из 8. После ответа — объяснения и ссылки на разделы, к которым стоит вернуться.
Пройти тест модуляОфициальные источники
Чек-листы уроков, заметки к ним и результаты тестов хранятся в этом браузере; для переноса используй экспорт. Автоматические проверки и журнал практикума сохраняются отдельно на сервере.