Commands
Kubernetes

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  

Типичные сценарии

  1. Найти поды, которые крашнутся больше 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,}$'  
  1. Стримить логи сервиса с краткой задержкой:
kubectl logs -f my-api-123456 -c main --tail=50  
  1. Проверить логи предыдущего контейнера после редеплоя:
kubectl logs my-api-123456 --previous  

Частые ошибки

  1. Не указывать --previous при сбое контейнера, который перезапускался. Логи утеряны.
  2. Пробовать использовать -c без указания контейнера в мульти-контейнерном Pod. Комната будет пустой.