Введение
В этом лабораторном занятии (lab) вы узнаете, как использовать команду Kubernetes logs для просмотра журналов (logs) из подов (pods), запущенных в кластере Kubernetes. Вы начнете с простых примеров и постепенно перейдете к более сложным сценариям.
Запустите кластер Minikube
Перед созданием ресурсов вам нужен работающий кластер Kubernetes. Minikube - это легковесная среда Kubernetes, которая запускается на вашем локальном компьютере.
Перейдите в рабочую директорию:
Откройте терминал и перейдите в папку проекта по умолчанию:
cd /home/labex/projectЗапустите Minikube:
Запустите Minikube для инициализации кластера Kubernetes:
minikube start- Эта команда настраивает однодневный кластер Kubernetes на вашем локальном компьютере.
- В зависимости от производительности вашей системы Minikube может потребовать несколько минут для запуска.
Проверьте, что Minikube запущен:
Проверьте статус кластера Minikube:
minikube status- Ищите компоненты, такие как
kubeletиapiserver, перечисленные какRunning. - Если кластер не запущен, запустите команду
minikube startснова.
- Ищите компоненты, такие как
Если у вас возникли проблемы при запуске Minikube, используйте minikube delete для сброса среды при необходимости.
Исследуйте команду kubectl logs
Команда kubectl logs используется для вывода журналов (logs) контейнера в поде (pod) или указанном ресурсе. Она поддерживает получение моментальных снимков журналов, потоковую передачу, фильтрацию и различные другие параметры для эффективного управления журналами.
Выполните следующую команду, чтобы просмотреть доступные параметры для kubectl logs:
kubectl logs -h
Вы увидите следующий вывод:
Выводит журналы для контейнера в поде или указанном ресурсе. Если в поде только один контейнер, имя контейнера является необязательным.
Примеры:
## Получить моментальный снимок журналов из пода nginx с одним контейнером
kubectl logs nginx
## Получить моментальный снимок журналов из пода nginx с несколькими контейнерами
kubectl logs nginx --all-containers=true
## Получить моментальный снимок журналов из всех контейнеров в подах, определенных меткой app=nginx
kubectl logs -l app=nginx --all-containers=true
## Получить моментальный снимок журналов предыдущего завершенного контейнера ruby из пода web-1
kubectl logs -p -c ruby web-1
## Начать потоковую передачу журналов контейнера ruby в пода web-1
kubectl logs -f -c ruby web-1
## Начать потоковую передачу журналов из всех контейнеров в подах, определенных меткой app=nginx
kubectl logs -f -l app=nginx --all-containers=true
## Показать только последние 20 строк вывода в пода nginx
kubectl logs --tail=20 nginx
## Показать все журналы из пода nginx, записанные за последний час
kubectl logs --since=1h nginx
## Показать журналы от kubelet с истекшим сертификатом сервера
kubectl logs --insecure-skip-tls-verify-backend nginx
## Получить моментальный снимок журналов из первого контейнера задания (job) с именем hello
kubectl logs job/hello
## Получить моментальный снимок журналов из контейнера nginx-1 развертывания (deployment) с именем nginx
kubectl logs deployment/nginx -c nginx-1
Просмотр журналов контейнеров
На этом шаге вы узнаете, как просматривать журналы контейнера, запущенного в поде.
Сначала создайте развертывание (deployment) с одним репликой и контейнером Nginx:
kubectl create deployment nginx --image=nginx --replicas=1Подождите, пока под будет готов к работе:
kubectl wait --for=condition=Ready pod -l app=nginxИспользуйте команду
kubectl logsдля просмотра журналов контейнера Nginx:kubectl logs POD_NAME
Замените POD_NAME именем пода, созданного на шаге 1. Вы можете получить POD_NAME с помощью команды kubectl get pod -l app=nginx.
Просмотр журналов определенного контейнера в поде
На этом шаге вы узнаете, как просматривать журналы конкретного контейнера, запущенного в поде.
Создайте под с двумя контейнерами: Nginx и BusyBox:
cat << EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: nginx-busybox spec: containers: - name: nginx image: nginx - name: busybox image: busybox command: - sleep - "3600" EOFПодождите, пока под будет готов к работе:
kubectl wait --for=condition=Ready pod nginx-busyboxИспользуйте команду
kubectl logsдля просмотра журналов контейнера BusyBox:kubectl logs nginx-busybox -c busybox
Просмотр журналов в режиме реального времени
На этом шаге вы узнаете, как просматривать журналы в режиме реального времени по мере их создания.
Используйте команду
kubectl logsс опцией-fдля просмотра журналов в режиме реального времени:kubectl logs -f nginx-busyboxОткройте новый терминал и создайте оболочку (shell) в контейнере Nginx:
kubectl exec -it nginx-busybox -c nginx -- /bin/shСоздайте несколько записей в журналах, выполнив команду внутри контейнера:
curl 127.0.0.1Вернитесь в первый терминал, где вы следите за журналами, и убедитесь, что новая запись в журнале отображается.
Просмотр журналов нескольких контейнеров
На этом шаге вы узнаете, как просматривать журналы из нескольких контейнеров, запущенных в поде.
Создайте под с двумя контейнерами: Nginx и Fluentd:
cat << EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: nginx-fluentd spec: containers: - name: nginx image: nginx - name: fluentd image: fluentd EOFПодождите, пока под будет готов к работе:
kubectl wait --for=condition=Ready pod nginx-fluentdИспользуйте команду
kubectl logsдля просмотра журналов обоих контейнеров:kubectl logs nginx-fluentd -c nginx kubectl logs nginx-fluentd -c fluentd
Резюме
Поздравляем! Вы успешно завершили лабораторную работу (lab) по командам для работы с журналами в Kubernetes! В рамках этой лабораторной работы вы научились просматривать журналы контейнеров, запущенных в поде, с использованием команды kubectl logs. Вы также узнали, как просматривать журналы конкретных контейнеров и нескольких контейнеров, следить за журналами в режиме реального времени и создавать записи в журналах изнутри контейнера. Эти навыки являются важными для диагностики и устранения проблем в кластере Kubernetes.


