Анализ журналов заданий Kubernetes
Возможность просматривать и анализировать журналы ваших заданий Kubernetes имеет важное значение для отладки и понимания поведения заданий. На этом шаге мы рассмотрим, как получить доступ к журналам и анализировать их из созданных нами заданий.
Получение имен подов для наших заданий
Прежде чем мы сможем просмотреть журналы, нам нужно знать имена подов, созданных нашими заданиями. Каждое задание создает один или несколько подов с именами, которые включают имя задания и случайный суффикс.
Давайте перечислим все поды, связанные с нашими заданиями:
kubectl get pods --show-labels
Это покажет вам все поды вместе с их метками. Ищите поды с метками, такими как job-name=hello-job или job-name=long-job.
Альтернативно, вы можете отфильтровать поды по имени задания:
kubectl get pods -l job-name=hello-job
Это покажет только поды, которые принадлежат заданию hello-job.
Просмотр журналов заданий
Теперь, когда мы знаем имена наших подов, мы можем просмотреть журналы для наших заданий. Используйте следующую команду, заменив <pod-name> фактическим именем вашего пода:
kubectl logs <pod-name>
Например, если ваш под называется hello-job-abcd1, вы должны запустить:
kubectl logs hello-job-abcd1
Вы должны увидеть вывод:
Hello, Kubernetes!
Это сообщение, которое наше задание было запрограммировано выводить.
Давайте также проверим журналы нашего более длительного задания. Сначала найдите имя пода:
kubectl get pods -l job-name=long-job
Затем просмотрите его журналы:
kubectl logs <long-job-pod-name>
Вы должны увидеть:
Starting long job...
Long job completed!
Просмотр журналов завершенных заданий
Одним из преимуществ заданий Kubernetes является то, что вы можете просматривать журналы даже после завершения задания. Это очень полезно для отладки и аудита.
Давайте создадим задание, которое завершится с ошибкой, чтобы мы могли увидеть, как его отладить:
cd ~/project
nano failed-job.yaml
Скопируйте и вставьте следующее содержимое YAML:
apiVersion: batch/v1
kind: Job
metadata:
name: failed-job
spec:
template:
spec:
containers:
- name: failed
image: busybox:1.28
command: ["sh", "-c", 'echo "Attempting task..." && exit 1']
restartPolicy: Never
backoffLimit: 2
Это задание всегда будет завершаться с кодом состояния 1, что указывает на сбой. Сохраните файл и выйдите из nano, затем создайте задание:
kubectl apply -f failed-job.yaml
Подождите несколько мгновений, пока задание попытается и несколько раз завершится с ошибкой (до предела отката). Затем проверьте его статус:
kubectl get jobs failed-job
Вы должны увидеть, что оно показывает 0/1 завершений и достигло крайнего срока завершения.
Теперь давайте рассмотрим, что пошло не так, проверив журналы неудачных подов:
kubectl get pods -l job-name=failed-job
Вы увидите несколько подов, все в состоянии Error. Выберите один и просмотрите его журналы:
kubectl logs <failed-pod-name>
Вы должны увидеть:
Attempting task...
Журналы пода показывают, что задача началась, но затем завершилась с кодом ошибки. Эта информация имеет решающее значение для отладки сбоев заданий.
Отслеживание журналов в реальном времени
Если вы хотите отслеживать журналы выполняющегося задания в реальном времени, вы можете использовать флаг -f:
kubectl logs -f <pod-name>
Это особенно полезно для более длительных заданий, где вы хотите видеть вывод по мере его появления.
Давайте создадим еще одно долго выполняющееся задание, чтобы продемонстрировать:
cd ~/project
nano counter-job.yaml
Скопируйте и вставьте следующее содержимое YAML:
apiVersion: batch/v1
kind: Job
metadata:
name: counter-job
spec:
template:
spec:
containers:
- name: counter
image: busybox:1.28
command:
[
"sh",
"-c",
'for i in $(seq 1 5); do echo "Count: $i"; sleep 5; done'
]
restartPolicy: Never
Сохраните файл и выйдите из nano, затем создайте задание:
kubectl apply -f counter-job.yaml
Теперь давайте отслеживать его журналы. Сначала найдите имя пода:
kubectl get pods -l job-name=counter-job
Затем отслеживайте его журналы:
kubectl logs -f <counter-job-pod-name>
Вы увидите, как счетчик увеличивается каждые 5 секунд:
Count: 1
Count: 2
Count: 3
Count: 4
Count: 5
Нажмите Ctrl+C, чтобы остановить отслеживание журналов.
Понимая, как получить доступ к журналам и анализировать их, вы можете эффективно устранять неполадки и отлаживать свои задания Kubernetes.