kubernetes:确定失败容器的精确条件集

时间:2018-08-30 02:03:56

标签: kubernetes pod

我正在寻找一组精确的条件来表明容器发生了故障。

1)准备检查还不够-容器可能处于init或容器创建状态,因此很健康。

2)终止状态也不足够-容器可能会在滚动重启中终止。另外,终止状态的原因是'string'类型的,所以可能是任何东西,而且我找不到详尽的列表。

3)等待状态也不足够-它有一个同样的问题,原因是字符串,并且没有详尽的可能性列表。不过,检查[“ CrashLoopBackOff”,“ ErrImagePull”,“ ImagePullBackOff”]确实可以得出肯定的答案,即容器确实失败了。

用例(如果重要的话)是,如果部署/状态集处于失败状态,我想通知用户,但避免在创建和滚动重新引导时出现假阳性。我还认为滚动重启导致新容器的CrashLoopBackOff失败的情况。因此,我希望使用容器来构建部署/状态集的健康状态。

1 个答案:

答案 0 :(得分:1)

首先,我假设两件事:

  1. 实际上,通过容器,您指的是其中具有单个容器的容器。
  2. 您的用例允许您从外部检测状态

在这种情况下,您有几个选项可以从容器/容器本身外部确定故障容器的状态。

  1. 使用Kubectl获取失败容器的列表

从所有命名空间获取失败的容器:

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

  1. 使用kubectl检测pod的状态

简单: 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/