kubectl logs: Логи пода: стриминг, предыдущий контейнер, по времени, конкр
Логи пода: стриминг, предыдущий контейнер, по времени, конкретный контейнер
kubectl logs — шпаргалка для DevOps
Базовый синтаксис
kubectl logs <имя_пода> — выводит логи последнего запущенного контейнера. Например:
kubectl logs my-app-7df54b9d84-2j6k4
Команда обращается к kubelet на узле, где запущен под, и выгружает содержимое stdout и stderr. Если контейнер умер, логи доступны только до момента смерти.
Полезные флаги
-f — стриминг логов в реальном времени. Помогает отлаживать сервисы, которые крашнутся:
kubectl logs -f my-app-7df54b9d84-2j6k4 --tail=100
--previous — показывает логи предыдущего контейнера, если он перезапущен:
kubectl logs my-app-7df58b9d84-2j6k4 --previous
--since — фильтрует логи по времени. Например, проверяем, что случилось после деплоя:
kubectl logs my-app-7df54b9d84-2j6k4 --since=5m
--tail — ограничивает количество строк. Полезно, когда логи слишком объемные:
kubectl logs my-app-7df54b9d84-2j6k4 --tail=50
-c — указывает конкретный контейнер в мульти-контейнерном Pod:
kubectl logs my-app-7df54b9d84-2j6k4 -c backend
Типичные сценарии
- Найти поды, которые крашнутся больше 5 раз:
kubectl get pods | grep -v NAME | while read pod; do
kubectl describe pod $pod | grep 'Restarted' | wc -l;
done | grep -E '^[0-9]{2,}$'
- Стримить логи сервиса с краткой задержкой:
kubectl logs -f my-api-123456 -c main --tail=50
- Проверить логи предыдущего контейнера после редеплоя:
kubectl logs my-api-123456 --previous
Частые ошибки
- Не указывать
--previousпри сбое контейнера, который перезапускался. Логи утеряны. - Пробовать использовать
-cбез указания контейнера в мульти-контейнерном Pod. Комната будет пустой.