Просмотр состояния подов кластера

Просмотр статуса и логов подов может понадобиться при решении проблем с системой. Инструкция по поиску подов, на которых расположены сервисы системы, описана в разделе Список подов сервисов.

Просмотр состояния подов в списке

Чтобы просмотреть состояние подов кластера, выполните следующую команду:

kubectl -n <namespace> get pods

Здесь:

  • <namespace> — имя пространства имен, в котором установлен кластер.

Пример списка подов кластера
NAME                        READY   STATUS      RESTARTS         AGE
clickhouse-shard0-0         1/1     Running     1 (7h53m ago)    2d3h
clickhouse-shard1-0         1/1     Running     0                2d3h
....
nats-0                      3/3     Running     0                22d
nats-box-575                1/1     Running     0                22d
pgbouncer-846c              2/2     Running     1 (27d ago)      35d
postgresql-0                1/1     Running     0                64d
service-orchestrator-85c    1/1     Running     0                103m

Состояние подов отображается в столбце STATUS. Возможные статусы:

  • Pending: под принят кластером, но один или несколько контейнеров еще не установлены и не подготовлены к запуску. Этот статус включает время, в течение которого под ожидает планирования, а также загружаются по сети образы контейнеров.

  • Running: под привязан к узлу, а также все его контейнеры созданы. По крайней мере один контейнер работает или находится в процессе запуска или перезапуска.

  • Succeeded: все контейнеры пода успешно завершили работу и не будут перезапущены.

  • Failed: все контейнеры пода завершили работу, и по крайней мере один контейнер завершил работу с ошибкой (с кодом, не равным 0, или был остановлен системой) и не будет автоматически перезапущен.

  • Unknown: состояние пода не может быть получено. Такое состояние обычно возникает из-за ошибки связи с узлом, в котором под должен работать.

Также состояние подов кластера можно просмотреть на дашборде Grafana в разделе SIEM Инструменты → Мониторинг.

Просмотр подробной информации о поде

Чтобы просмотреть подробную информацию о поде, в том числе состояние, узел, на котором он находится, список его контейнеров и так далее, выполните следующую команду:

kubectl -n <namespace> describe pods/<pod_name>

Здесь:

  • <namespace> — имя пространства имен, в котором установлен кластер.

  • <pod_name> — имя пода, информацию о котором требуется просмотреть.

Пример вывода команды kubectl describe
Name:             test-pod
Namespace:        siem
Priority:         0
Service Account:  default
Node:             dev.siem.local/10.0.0.13
Start Time:       Wed, 30 Oct 2024 14:49:49 +0300
Labels:           app.kubernetes.io/component=nats
                  app.kubernetes.io/instance=nats
                  app.kubernetes.io/managed-by=Helm
                  app.kubernetes.io/name=nats
                  app.kubernetes.io/version=2.10.20
                  controller-revision-hash=nats-56bcf785dd
                  helm.sh/chart=nats-1.2.4
                  statefulset.kubernetes.io/pod-name=nats-0
Annotations:      checksum/config: 8b3d84c2a7387f68211b5f98f2d6d910a2c0491fcaef10d1187d3d1fac81dea9
                  cni.projectcalico.org/containerID: d1f8a2f334f8f1c9a47c835ef92f6e95b8cf43c1e085982de2c396c972203e9f
                  cni.projectcalico.org/podIP: 10.0.0.191/32
                  cni.projectcalico.org/podIPs: 10.0.0.191/32
Status:           Running
IP:               10.0.0.191
IPs:
  IP:           10.0.0.191
Controlled By:  StatefulSet/nats
Containers:
  nats:
    Container ID:  containerd://b3638b859a891ae7b6dc897ec50aa234ff09698decf4eccb5adca0a0794f7e24
    Image:         sec/nats-server:2.10.20-scratch
    Image ID:      sec/nats-server@sha256:d5508b97e054c298bba593e55ec35b7c5a164def88a4ccd9c456d4b598d1a674
    Ports:         4222/TCP, 8222/TCP
    Host Ports:    0/TCP, 0/TCP
    Args:
      --config
      /etc/nats-config/nats.conf
    State:          Running
      Started:      Wed, 30 Oct 2024 14:49:51 +0300
    Ready:          True
    Restart Count:  0
    Liveness:       http-get http://:monitor/healthz%3Fjs-enabled-only=true delay=10s timeout=5s period=30s #success=1 #failure=3
    Readiness:      http-get http://:monitor/healthz%3Fjs-server-only=true delay=10s timeout=5s period=10s #success=1 #failure=3
    Startup:        http-get http://:monitor/healthz delay=10s timeout=5s period=10s #success=1 #failure=90
    Environment:
      POD_NAME:     nats-0 (v1:metadata.name)
      SERVER_NAME:  $(POD_NAME)
    Mounts:
      /etc/nats-config from config (rw)
      /var/run/nats from pid (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-4fwsp (ro)
Events:           <none>

Раздел Events в выводе команды kubectl describe отображает последние события, связанные с подом. Эти данные полезны для диагностики и устранения проблем в работе пода.

Подробная информация о команде kubectl describe доступна в документации Kubernetes.

Просмотр логов пода

Логи пода очищаются при его остановке.

Чтобы просмотреть логи контейнеров, расположенных на поде, выполните команду kubectl logs.

Просмотр логов конкретного контейнера:

kubectl -n <namespace> logs <pod_name> -c <container_name>

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

kubectl -n <namespace> logs <pod_name> --all-containers=true

Здесь:

  • <namespace> — имя пространства имен, в котором установлен кластер.

  • <pod_name> — имя пода, логи которого требуется просмотреть.

  • <container_name> — имя контейнера, логи которого требуется просмотреть.

Чтобы логи передавались в потоковом режиме, то есть обновлялись в реальном времени, укажите опцию -f команды kubectl logs:

kubectl -n <namespace> logs -f <pod_name> --all-containers=true

С подробной справкой о команде kubectl logs можно ознакомиться в документации Kubernetes.

Просмотр потребления подом ресурсов процессора и памяти

Чтобы просмотреть потребление подом ресурсов процессора и памяти, выполните следующую команду:

kubectl -n <namespace> top pod <pod_name>

Здесь:

  • <namespace> — имя пространства имен, в котором установлен кластер.

  • <pod_name> — имя пода, информацию о котором требуется просмотреть.

Пример вывода команды kubectl top pod
NAME       CPU(cores)   MEMORY(bytes)
test-pod   29m          109Mi

Чтобы наблюдать за изменением потребления ресурсов со временем, используйте команду выше как аргумент команды watch:

watch -n<seconds> kubectl -n <namespace> top pod <pod_name>

Здесь:

  • <namespace> — имя пространства имен, в котором установлен кластер.

  • <pod_name> — имя пода, информацию о котором требуется просмотреть.

  • <seconds> — число секунд между запусками команды, являющейся аргументом watch.

С подробной справкой о команде kubectl top pod можно ознакомиться в документации Kubernetes.