为什么 kubernetes 报告 "readiness probe failed" 和 "liveness probe failed"
Why kubernetes reports "readiness probe failed" along with "liveness probe failed"
我的应用程序有一个有效的 Kubernetes 部署。
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
...
template:
...
spec:
containers:
- name: my-app
image: my-image
...
readinessProbe:
httpGet:
port: 3000
path: /
livenessProbe:
httpGet:
port: 3000
path: /
当我应用我的部署时,我可以看到它正确运行并且应用程序响应我的请求。
$ kubectl describe pod -l app=my-app
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 4m7s default-scheduler Successfully assigned XXX
Normal Pulled 4m5s kubelet, pool-standard-4gb-2cpu-b9vc Container image "my-app" already present on machine
Normal Created 4m5s kubelet, pool-standard-4gb-2cpu-b9vc Created container my-app
Normal Started 4m5s kubelet, pool-standard-4gb-2cpu-b9vc Started container my-app
应用程序存在缺陷,在某些情况下会崩溃。我 "invoke" 这样的情况,然后我在 pod 事件中看到以下内容:
$ kubectl describe pod -l app=my-app
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 6m45s default-scheduler Successfully assigned XXX
Normal Pulled 6m43s kubelet, pool-standard-4gb-2cpu-b9vc Container image "my-app" already present on machine
Normal Created 6m43s kubelet, pool-standard-4gb-2cpu-b9vc Created container my-app
Normal Started 6m43s kubelet, pool-standard-4gb-2cpu-b9vc Started container my-app
Warning Unhealthy 9s kubelet, pool-standard-4gb-2cpu-b9vc Readiness probe failed: Get http://10.244.2.14:3000/: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
Warning Unhealthy 4s (x3 over 14s) kubelet, pool-standard-4gb-2cpu-b9vc Liveness probe failed: Get http://10.244.2.14:3000/: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
Normal Killing 4s kubelet, pool-standard-4gb-2cpu-b9vc Container crawler failed liveness probe, will be restarted
预计liveness探测失败,重启容器。但为什么我会看到 Readiness probe failed
事件?
您为就绪性和活性探测配置了相同的检查 - 因此,如果活性检查失败,则可以假定就绪性也失败了。
就绪探测用于确定容器是否已准备好处理请求。您的容器可以 运行 但未通过探测。如果它没有通过检查,则没有服务将重定向到此容器。
默认情况下,就绪探测的周期为 10 秒。
您可以在此处阅读更多内容:https://docs.openshift.com/container-platform/3.9/dev_guide/application_health.html
请在后端提供一个实现function/method,你可以将/health命名为uri,并且可以在这里写一个liveness逻辑,readiness也可以是你的选择。
/health uri,应与函数实现相关联,如果一切正常,该函数实现将 return 200 状态代码,否则可能会失败
正如@suren 在评论中所写,容器启动后仍会执行就绪探测。因此,如果 liveness 和 readiness 探测器都被定义(并且 fx 它们是相同的),readiness 和 liveness 探测器都可能失败。
这里是。
我的应用程序有一个有效的 Kubernetes 部署。
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
...
template:
...
spec:
containers:
- name: my-app
image: my-image
...
readinessProbe:
httpGet:
port: 3000
path: /
livenessProbe:
httpGet:
port: 3000
path: /
当我应用我的部署时,我可以看到它正确运行并且应用程序响应我的请求。
$ kubectl describe pod -l app=my-app
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 4m7s default-scheduler Successfully assigned XXX
Normal Pulled 4m5s kubelet, pool-standard-4gb-2cpu-b9vc Container image "my-app" already present on machine
Normal Created 4m5s kubelet, pool-standard-4gb-2cpu-b9vc Created container my-app
Normal Started 4m5s kubelet, pool-standard-4gb-2cpu-b9vc Started container my-app
应用程序存在缺陷,在某些情况下会崩溃。我 "invoke" 这样的情况,然后我在 pod 事件中看到以下内容:
$ kubectl describe pod -l app=my-app
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 6m45s default-scheduler Successfully assigned XXX
Normal Pulled 6m43s kubelet, pool-standard-4gb-2cpu-b9vc Container image "my-app" already present on machine
Normal Created 6m43s kubelet, pool-standard-4gb-2cpu-b9vc Created container my-app
Normal Started 6m43s kubelet, pool-standard-4gb-2cpu-b9vc Started container my-app
Warning Unhealthy 9s kubelet, pool-standard-4gb-2cpu-b9vc Readiness probe failed: Get http://10.244.2.14:3000/: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
Warning Unhealthy 4s (x3 over 14s) kubelet, pool-standard-4gb-2cpu-b9vc Liveness probe failed: Get http://10.244.2.14:3000/: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
Normal Killing 4s kubelet, pool-standard-4gb-2cpu-b9vc Container crawler failed liveness probe, will be restarted
预计liveness探测失败,重启容器。但为什么我会看到 Readiness probe failed
事件?
您为就绪性和活性探测配置了相同的检查 - 因此,如果活性检查失败,则可以假定就绪性也失败了。
就绪探测用于确定容器是否已准备好处理请求。您的容器可以 运行 但未通过探测。如果它没有通过检查,则没有服务将重定向到此容器。
默认情况下,就绪探测的周期为 10 秒。
您可以在此处阅读更多内容:https://docs.openshift.com/container-platform/3.9/dev_guide/application_health.html
请在后端提供一个实现function/method,你可以将/health命名为uri,并且可以在这里写一个liveness逻辑,readiness也可以是你的选择。
/health uri,应与函数实现相关联,如果一切正常,该函数实现将 return 200 状态代码,否则可能会失败
正如@suren 在评论中所写,容器启动后仍会执行就绪探测。因此,如果 liveness 和 readiness 探测器都被定义(并且 fx 它们是相同的),readiness 和 liveness 探测器都可能失败。
这里是