kubernetes: точный набор условий для определения сбойного контейнера - PullRequest
0 голосов
/ 30 августа 2018

Я собираюсь составить точный набор условий, которые указывают на сбой контейнера.

1) Проверка готовности недостаточна - контейнер может находиться в состоянии инициализации или создания контейнера и, таким образом, исправен.

2) Недостаточно завершающего состояния - контейнер может завершаться как часть текущей перезагрузки. Кроме того, причина завершающего состояния имеет тип 'string', поэтому может быть что угодно, и я не смог найти исчерпывающий список.

3) Состояние ожидания также недостаточно - оно имеет ту же проблему, что и причина - строка, и нет исчерпывающего списка возможностей. Хотя проверка на ["CrashLoopBackOff", "ErrImagePull", "ImagePullBackOff"] действительно дает однозначный ответ, что контейнер действительно завершился ошибкой.

Вариант использования, если это важно, заключается в том, что я хочу уведомить пользователя, если установка / набор состояний находится в состоянии сбоя, но избежать ложных срабатываний при создании и повторных перезагрузках. Я также рассматриваю случай, когда повторная перезагрузка приводит к ошибке CrashLoopBackOff новых контейнеров. Поэтому я ищу контейнеры для определения состояния работоспособности развертываний / наборов состояний.

1 Ответ

0 голосов
/ 30 августа 2018

Прежде всего, я предполагаю 2 вещи:

  1. Под контейнером вы на самом деле имеете в виду стручок с одним контейнером в нем.
  2. Ваш вариант использования позволяет вам определять статус извне

В этом случае у вас есть несколько вариантов определения состояния вышедших из строя модулей за пределами самого модуля / контейнера.

  1. используйте Kubectl для получения списка неисправных контейнеров

Получить сбойные контейнеры из всех пространств имен:

kubectl get pods --field-selector=status.phase=Failed --all-namespaces

  1. Используйте kubectl для определения состояния модуля

Simple: kubectl get pod mypod | tail -n 1 | awk '{ print $3 }'

Пример вывода:

"Failed"
"Running"

Команда Simple может использоваться для простого сравнения bash, например:

if [ $(`kubectl get pod mypod | tail -n 1 | awk '{ print $3 }'`) == "Failed" ]; 
    then echo "Container has failed!"; 
fi

Подробнее о жизненных циклах pod

https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/

...