容器重启后跳过 Kubernetes 启动探测
Kubernetes startup probe skipped after container restart
运行 Kubernetes v1.20
我配置了启动探测器和活动探测器。在容器第一次启动时,启动探测会被执行,直到活动探测接管(如文档所述)。但是,似乎如果 liveness 探测失败并且容器重新启动,则不会再次执行启动探测。这是有意的行为吗?我在任何地方都找不到这个记录。
为了重现这个问题,我 运行 以下容器定义(仅相关部分):
containers:
- args:
- /bin/sh
- -c
- touch /tmp/alive; sleep 10000
image: busybox
livenessProbe:
exec:
command:
- /bin/sh
- -c
- touch /tmp/liveness; test -f /tmp/alive
failureThreshold: 3
initialDelaySeconds: 10
periodSeconds: 2
successThreshold: 1
timeoutSeconds: 2
startupProbe:
exec:
command:
- touch
- /tmp/startup
failureThreshold: 3
periodSeconds: 2
successThreshold: 1
timeoutSeconds: 2
因此,如果活动探测运行,它会创建 /tmp/liveness。如果启动探测运行,它会创建 /tmp/startup。您可以通过删除 /tmp/alive.
来模拟活性检查失败
首次启动时:
$ ls /tmp/
alive liveness startup
rm /tmp/alive
后,liveness检查失败,容器重启。然后,在新容器中:
$ ls /tmp/
alive liveness
所以似乎启动探测不再执行了。
运行 Kubernetes v1.20
我配置了启动探测器和活动探测器。在容器第一次启动时,启动探测会被执行,直到活动探测接管(如文档所述)。但是,似乎如果 liveness 探测失败并且容器重新启动,则不会再次执行启动探测。这是有意的行为吗?我在任何地方都找不到这个记录。
为了重现这个问题,我 运行 以下容器定义(仅相关部分):
containers:
- args:
- /bin/sh
- -c
- touch /tmp/alive; sleep 10000
image: busybox
livenessProbe:
exec:
command:
- /bin/sh
- -c
- touch /tmp/liveness; test -f /tmp/alive
failureThreshold: 3
initialDelaySeconds: 10
periodSeconds: 2
successThreshold: 1
timeoutSeconds: 2
startupProbe:
exec:
command:
- touch
- /tmp/startup
failureThreshold: 3
periodSeconds: 2
successThreshold: 1
timeoutSeconds: 2
因此,如果活动探测运行,它会创建 /tmp/liveness。如果启动探测运行,它会创建 /tmp/startup。您可以通过删除 /tmp/alive.
来模拟活性检查失败首次启动时:
$ ls /tmp/
alive liveness startup
rm /tmp/alive
后,liveness检查失败,容器重启。然后,在新容器中:
$ ls /tmp/
alive liveness
所以似乎启动探测不再执行了。