避免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 infinitytail -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进去进行调试了。

参考: