避免Pod反复自动重启
如果一个Pod在错误状态启动不了 (crashloopbackoff),那么Kubernetes就会自动重启该Pod。这就给调试这个Pod带来了麻烦,无法exec到这个Pod上查看问题,也不容易看到这个Pod的日志,因为此时这个Pod已经被Kubernetes杀掉了:
unable to upgrade connection: container not found ("")
那如何防止有错误的Pod无限重启或反复重启?
只需要在deployment的yaml中加两行命令即可。Kubernetes杀掉Pod的原因是由于出错而程序执行完毕,那么再加条命令让Pod永远不能执行完毕就可以避免被杀掉从而可以exec到Pod中进行调试。这两行命令可以是
sleep infinity
或 tail -f /dev/null
:
command: ["sleep"]
args: ["infinity"]
or
command: ["tail"]
args: ["-f", "/dev/null"]
把它们加到 spec.template.spec.containers
中:
...
spec:
template:
spec:
containers:
- name: xxx
command: ["sleep"]
args: ["infinity"]
...
(可选)如果希望Pod状态显示成绿色,可以把liveness/readiness部分从deployment yaml中去掉。
然后可以在deployment重新创建后exec进去进行调试了。
参考: