На странице сведений рабочей нагрузки, если отображается событие, указывающее, что pod не удалось запустить, выполните следующие действия для поиска неисправности:
Если узел использует Docker, выполните следующую команду:
docker ps -a | grep $podName
Если узел использует containerd, выполните следующую команду:
Если узел использует Docker, выполните следующую команду:
docker logs $containerID
Если узел использует containerd, выполните следующую команду:
Исправьте неисправность рабочей нагрузки на основе журналов.
cat /var/log/messages | grep $containerID | grep oom
Проверьте, был ли вызван системный OOM на основе журналов.
Определите причину на основе журналов или событий, как указано в Table 1.
Лог или событие | Возможная причина | Определение неисправности и решение |
|---|---|---|
Логи Pod: код выхода 0 | В pod нет процесса. | Проверьте, может ли pod работать корректно. Подробности см. No Process in the Pod (Exit Code: 0). |
| Проверка состояния не удалась. | Проверьте, правильно ли настроен liveness probe для pod. Подробности см. Health Check Failed (Exit Code: 137). |
| Недостаточно места на диске. | Увеличьте место на диске или удалите ненужные файлы. Подробности см. Insufficient Disk Space of the Pod. |
Pod logs: oom | Памяти pod недостаточно. | Проверьте, имеет ли pod правильные настройки ресурсов. Для получения подробной информации см. Insufficient Container Resources. |
Pod logs: Address already in use | В pod возникает конфликт между портами контейнера. | Проверьте, есть ли конфликт портов контейнера в pod. Для получения подробной информации см. Container Port Conflict in the Pod. |
Kubernetes event:
| Секрет монтируется к рабочей нагрузке, и значение секрета не зашифровано с помощью Base64. | Для получения подробной информации о решении см. Improper Value of the Secret Mounted to the Workload. |
Kubernetes event:
| Контейнерный образ x86 может работать на узле Arm. | Для получения подробной информации о решении см. Unmatched Container Image Tag with the Node Architecture. |
Kubernetes event:
| Версия containerd несовместима с версией tail. | Для получения подробной информации о решении см. Exit of tail -f xx in the Container Startup Command (Exit Code: 141). |
Other pod logs | Определите неисправность на основе сервисов. | Подробную информацию об определении неисправности см. в Service Setting Checks. |
Если узел использует Docker, выполните следующую команду:
docker ps -a | grep $podName
Если узел использует containerd, выполните следующую команду:
Ниже приведён пример.

Если в pod нет процесса, отображается код статуса Exited (0).
Проверки состояния, настроенные для рабочей нагрузки, периодически выполняются на сервисах. При возникновении исключения будет событие, указывающее на нездоровый pod, и перезапуски pod завершатся с ошибкой.
Если для рабочей нагрузки настроен liveness probe и количество неудачных проверок состояния превышает порог, pod будет перезапущен. На странице сведений о рабочей нагрузке, если события Kubernetes содержат Liveness probe failed: Get http..., проверка состояния считается неуспешной.
Решение
Нажмите имя рабочей нагрузки, чтобы перейти на страницу сведений о рабочей нагрузке, нажмите вкладку Containers. Затем выберите Health Check, чтобы проверить, корректна ли политика и работают ли сервисы должным образом.
Следующее сообщение относится к thin pool диску, который выделяется из Docker диска, выбранного при создании узла. Вы можете выполнить команду lvs от пользователя root, чтобы просмотреть текущее использование диска.
Thin Pool has 15991 free data blocks which is less than minimum required 16383 free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior

Решения
Решение 1: Очистка образов
Выполните следующие действия для очистки неиспользуемых образов: Не удаляйте системные образы, такие как образ cce-pause. В противном случае создание pod может завершиться ошибкой.
Решение 2: Расширение ёмкости диска
Чтобы расширить ёмкость диска, выполните следующие действия:
Только емкость хранилища дисков EVS расширяется. Вам необходимо выполнить следующие операции для расширения емкости логических томов и файловых систем.
Диск с данными делится в зависимости от контейнерного хранилища Rootfs:
Если достигнут верхний предел ресурсов контейнера, OOM будет отображён в деталях события, а также в журнале:
cat /var/log/messages | grep 96feb0a425d6 | grep oom

При создании рабочей нагрузки, если запрошенные ресурсы превышают сконфигурированный верхний предел, система OOM срабатывает, и контейнер завершается неожиданно.
Если узел использует Docker, выполните следующую команду:
docker ps -a | grep $podName
Если узел использует containerd, выполните следующую команду:
Если узел использует Docker, выполните следующую команду:
docker logs $containerID
Если узел использует containerd, выполните следующую команду:
Устраните ошибку рабочей нагрузки на основе журналов. Как показано на следующем рисунке, порты контейнеров в одном pod конфликтуют. В результате контейнер не может быть запущен.
Рисунок 1 Сбой перезапуска Pod из‑за конфликта порта контейнера

Решение
Настройте корректные порты контейнеров, чтобы они не конфликтовали друг с другом. Затем создайте рабочую нагрузку заново.
Если pod использует host network (с параметром hostNetwork: true), может возникнуть конфликт порта контейнера. Это происходит потому, что контейнеры в pod используют сетевой интерфейс и диапазон портов хост‑узла. Несколько pod, использующих один и тот же порт, не могут работать на одном узле.
В событии отображается информация, аналогичная следующей:
Error: failed to start container "filebeat": Error response from daemon: OCI runtime create failed: container_linux.go:330: starting container process caused "process_linux.go:381: container init caused \"setenv: invalid argument\"": unknown
Коренной причиной является монтирование секрета в рабочую нагрузку, но значение секрета не зашифровано с помощью Base64.
Решение
Создайте Secret в консоли. Значение секрета автоматически шифруется с помощью Base64.
Если вы используете YAML для создания Secret, необходимо вручную зашифровать его значение с помощью Base64.
echo -n "Content to be encoded" | base64
При создании рабочей нагрузки на узле Arm не использован корректный тег образа. Чтобы решить проблему, используйте правильный тег образа.
Событие Kubernetes выглядит следующим образом:
the failed container exited with ExitCode: 141
Возможная причина
Устаревшая версия containerd несовместима с версией tail (≥ 8.28) в образе контейнера. В результате выполнение команды tail -f приводит к неожиданному завершению, возвращая exit code 141.
Решения
Проверьте, правильно ли выполнена команда запуска рабочей нагрузки, или есть ли в ней ошибка.
Если node использует Docker, выполните следующую команду:
docker ps -a | grep $podName
Если node использует containerd, выполните следующую команду:
Если node использует Docker, выполните следующую команду:
docker logs $containerID
Если node использует containerd, выполните следующую команду:
Примечание: В предыдущей команде containerID указывает ID контейнера, который завершил работу.
Исправьте ошибку рабочей нагрузки на основе журналов.
Как показано на рисунке ниже, container не запускается из‑за неправильной команды запуска.

Решение
Создайте новую рабочую нагрузку и настройте правильную команду запуска.
После создания рабочей нагрузки она не запускается. В журналах отображается следующая ошибка:
fatal error: procresize: invalid argruntime stack:runtime.throw(0x75be20, 0x17)/usr/lib/google-golang/src/runtime/panic.go:530 +0x99runtime.procresize(0x180, 0x0)/usr/lib/google-golang/src/runtime/proc1.go:2735 +0xba6runtime.schedinit()/usr/lib/google-golang/src/runtime/proc1.go:72 +0x110runtime.rt0_go(0x7ffcd751f9f8, 0x1, 0x7ffcd751f9f8, 0x0, 0x0, 0x1, 0x7ffcd7520b77, 0x0, 0x7ffcd7520b81, 0x7ffcd7520bc3, ...)/usr/lib/google-golang/src/runtime/asm_amd64.s:109 +0x132
Согласно журналам ошибок, программа Go падает при запуске, потому что среда выполнения пытается установить GOMAXPROCS на основе видимого количества CPU и вычисляет недопустимое значение из‑за переполнения целого числа. Это происходит, когда количество видимых CPU у container превышает 255 и версия Go равна 1.9 или 1.10. Версия Go в образе — 1.10.
В Go 1.9 и 1.10 среда выполнения использует 8‑битное целое число для хранения количества CPU, которое переполняется при наличии более 255 видимых ядер. Переполненное значение передаётся во внутреннюю функцию procresize, вызывая падение container.
Выполните следующую команду, чтобы проверить ограничение CPU узла:
cat /sys/fs/cgroup/cpuset/cpuset.cpus
Вывод 0-383, что превышает 255. Это подтверждает причину.
Решение
Используйте один из следующих методов для решения этой проблемы:
- env:- name: GOMAXPROCSvalue: "1"