Команда kubectl logs в Kubernetes

KubernetesKubernetesBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии (lab) вы узнаете, как использовать команду Kubernetes logs для просмотра журналов (logs) из подов (pods), запущенных в кластере Kubernetes. Вы начнете с простых примеров и постепенно перейдете к более сложным сценариям.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("Delete") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("Exec") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/logs("Logs") subgraph Lab Skills kubernetes/get -.-> lab-8099{{"Команда kubectl logs в Kubernetes"}} kubernetes/delete -.-> lab-8099{{"Команда kubectl logs в Kubernetes"}} kubernetes/describe -.-> lab-8099{{"Команда kubectl logs в Kubernetes"}} kubernetes/exec -.-> lab-8099{{"Команда kubectl logs в Kubernetes"}} kubernetes/logs -.-> lab-8099{{"Команда kubectl logs в Kubernetes"}} end

Запуск кластера Minikube

Перед созданием ресурсов вам нужен работающий кластер Kubernetes. Minikube - это легковесная среда Kubernetes, которая запускается на вашем локальном компьютере.

  1. Перейдите в рабочую директорию:

    Откройте терминал и перейдите в папку проекта по умолчанию:

    cd /home/labex/project
  2. Запустите Minikube:

    Запустите Minikube для инициализации кластера Kubernetes:

    minikube start
    • Эта команда настраивает однодневный кластер Kubernetes на вашем локальном компьютере.
    • В зависимости от производительности вашей системы Minikube может потребовать несколько минут для запуска.
  3. Проверьте, что 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

Просмотр журналов контейнера

На этом шаге вы узнаете, как просматривать журналы контейнера, запущенного в поде.

  1. Сначала создайте развертывание (deployment) с одним репликой и контейнером Nginx:

    kubectl create deployment nginx --image=nginx --replicas=1
  2. Подождите, пока под будет готов к работе:

    kubectl wait --for=condition=Ready pod -l app=nginx
  3. Используйте команду kubectl logs для просмотра журналов контейнера Nginx:

    kubectl logs POD_NAME

Замените POD_NAME именем пода, созданного на шаге 1. Вы можете получить POD_NAME с помощью команды kubectl get pod -l app=nginx.

Просмотр журналов конкретного контейнера в поде

На этом шаге вы узнаете, как просматривать журналы конкретного контейнера, запущенного в поде.

  1. Создайте под с двумя контейнерами: 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
  2. Подождите, пока под будет готов к работе:

    kubectl wait --for=condition=Ready pod nginx-busybox
  3. Используйте команду kubectl logs для просмотра журналов контейнера BusyBox:

    kubectl logs nginx-busybox -c busybox

Просмотр журналов в режиме реального времени

На этом шаге вы узнаете, как просматривать журналы в режиме реального времени по мере их создания.

  1. Используйте команду kubectl logs с опцией -f для просмотра журналов в режиме реального времени:

    kubectl logs -f nginx-busybox
  2. Откройте новый терминал и создайте оболочку (shell) в контейнере Nginx:

    kubectl exec -it nginx-busybox -c nginx -- /bin/sh
  3. Создайте несколько записей в журналах, выполнив команду внутри контейнера:

    curl 127.0.0.1
  4. Вернитесь в первый терминал, где вы следите за журналами, и убедитесь, что новая запись в журнале отображается.

Просмотр журналов из нескольких контейнеров

На этом шаге вы узнаете, как просматривать журналы из нескольких контейнеров, запущенных в поде.

  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
  2. Подождите, пока под будет готов к работе:

    kubectl wait --for=condition=Ready pod nginx-fluentd
  3. Используйте команду kubectl logs для просмотра журналов обоих контейнеров:

    kubectl logs nginx-fluentd -c nginx
    kubectl logs nginx-fluentd -c fluentd

Итог

Поздравляем! Вы успешно завершили лабораторную работу (lab) по командам для работы с журналами в Kubernetes! В рамках этой лабораторной работы вы научились просматривать журналы контейнеров, запущенных в поде, с использованием команды kubectl logs. Вы также узнали, как просматривать журналы конкретных контейнеров и нескольких контейнеров, следить за журналами в режиме реального времени и создавать записи в журналах изнутри контейнера. Эти навыки являются важными для диагностики и устранения проблем в кластере Kubernetes.