我正在寻找一组精确的条件来表明容器发生了故障。
1)准备检查还不够-容器可能处于init或容器创建状态,因此很健康。
2)终止状态也不足够-容器可能会在滚动重启中终止。另外,终止状态的原因是'string'类型的,所以可能是任何东西,而且我找不到详尽的列表。
3)等待状态也不足够-它有一个同样的问题,原因是字符串,并且没有详尽的可能性列表。不过,检查[“ CrashLoopBackOff”,“ ErrImagePull”,“ ImagePullBackOff”]确实可以得出肯定的答案,即容器确实失败了。
用例(如果重要的话)是,如果部署/状态集处于失败状态,我想通知用户,但避免在创建和滚动重新引导时出现假阳性。我还认为滚动重启导致新容器的CrashLoopBackOff失败的情况。因此,我希望使用容器来构建部署/状态集的健康状态。
答案 0 :(得分:1)
首先,我假设两件事:
在这种情况下,您有几个选项可以从容器/容器本身外部确定故障容器的状态。
从所有命名空间获取失败的容器:
kubectl get pods --field-selector=status.phase=Failed --all-namespaces
简单:
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/