当 kubernetes readiness-probe return false 时会发生什么?要等多久?
What happens when kubernetes readiness-probe return false? How long to wait?
当 Kubernetes readiness-probe
returns 错误时会发生什么? Kubernetes 会在超时后重新启动该 pod 吗? Kubernetes 准备就绪需要多长时间?
就绪探测不会重新启动 pod/container,就绪探测确定容器已准备好为流量提供服务。如果容器被探测并认为未“准备就绪”,则容器将从端点中删除,并且不会向其发送流量,直到它再次准备就绪。
[2] https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
[3] kubectl explain pod.spec.containers.readinessProbe
KIND: Pod
VERSION: v1
RESOURCE: readinessProbe <Object>
DESCRIPTION:
Periodic probe of container service readiness. Container will be removed
from service endpoints if the probe fails. Cannot be updated. More info:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
Probe describes a health check to be performed against a container to
determine whether it is alive or ready to receive traffic.
FIELDS:
exec <Object>
One and only one of the following should be specified. Exec specifies the
action to take.
failureThreshold <integer>
Minimum consecutive failures for the probe to be considered failed after
having succeeded. Defaults to 3. Minimum value is 1.
httpGet <Object>
HTTPGet specifies the http request to perform.
initialDelaySeconds <integer>
Number of seconds after the container has started before liveness probes
are initiated. More info:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
periodSeconds <integer>
How often (in seconds) to perform the probe. Default to 10 seconds. Minimum
value is 1.
successThreshold <integer>
Minimum consecutive successes for the probe to be considered successful
after having failed. Defaults to 1. Must be 1 for liveness and startup.
Minimum value is 1.
tcpSocket <Object>
TCPSocket specifies an action involving a TCP port. TCP hooks not yet
supported
timeoutSeconds <integer>
Number of seconds after which the probe times out. Defaults to 1 second.
Minimum value is 1. More info:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
让我们使用文档中的默认就绪探测器:
cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
readinessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
为了执行探测,kubelet 在目标容器中执行命令 cat /tmp/healthy。如果命令成功,它 returns 0,那么容器就准备好了,可以“服务”了。如果命令 returns 不是 0,则容器不健康。
由于这个文件从一开始就不存在于容器中,所以当 pod 启动时,它会非常不健康。
date && k get pods nginx
Thu 2 Dec 2021 19:08:43 AST
NAME READY STATUS RESTARTS AGE
nginx 0/1 Running 0 66s
现在,让我们执行它并创建文件,以便命令成功。
k exec -it nginx -- bash
root@nginx:/# touch /tmp/healthy
root@nginx:/# exit
exit
再次检查:
date && k get pods nginx
Thu 2 Dec 2021 19:09:26 AST
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 110s
再次删除:
k exec -it nginx -- bash
root@nginx:/# rm /tmp/healthy
root@nginx:/# exit
exit
正在检查:
date && k get pods nginx
Thu 2 Dec 2021 19:09:53 AST
NAME READY STATUS RESTARTS AGE
nginx 0/1 Running 0 2m17s
当 Kubernetes readiness-probe
returns 错误时会发生什么? Kubernetes 会在超时后重新启动该 pod 吗? Kubernetes 准备就绪需要多长时间?
就绪探测不会重新启动 pod/container,就绪探测确定容器已准备好为流量提供服务。如果容器被探测并认为未“准备就绪”,则容器将从端点中删除,并且不会向其发送流量,直到它再次准备就绪。
[2] https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
[3] kubectl explain pod.spec.containers.readinessProbe
KIND: Pod
VERSION: v1
RESOURCE: readinessProbe <Object>
DESCRIPTION:
Periodic probe of container service readiness. Container will be removed
from service endpoints if the probe fails. Cannot be updated. More info:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
Probe describes a health check to be performed against a container to
determine whether it is alive or ready to receive traffic.
FIELDS:
exec <Object>
One and only one of the following should be specified. Exec specifies the
action to take.
failureThreshold <integer>
Minimum consecutive failures for the probe to be considered failed after
having succeeded. Defaults to 3. Minimum value is 1.
httpGet <Object>
HTTPGet specifies the http request to perform.
initialDelaySeconds <integer>
Number of seconds after the container has started before liveness probes
are initiated. More info:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
periodSeconds <integer>
How often (in seconds) to perform the probe. Default to 10 seconds. Minimum
value is 1.
successThreshold <integer>
Minimum consecutive successes for the probe to be considered successful
after having failed. Defaults to 1. Must be 1 for liveness and startup.
Minimum value is 1.
tcpSocket <Object>
TCPSocket specifies an action involving a TCP port. TCP hooks not yet
supported
timeoutSeconds <integer>
Number of seconds after which the probe times out. Defaults to 1 second.
Minimum value is 1. More info:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
让我们使用文档中的默认就绪探测器:
cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
readinessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
为了执行探测,kubelet 在目标容器中执行命令 cat /tmp/healthy。如果命令成功,它 returns 0,那么容器就准备好了,可以“服务”了。如果命令 returns 不是 0,则容器不健康。
由于这个文件从一开始就不存在于容器中,所以当 pod 启动时,它会非常不健康。
date && k get pods nginx
Thu 2 Dec 2021 19:08:43 AST
NAME READY STATUS RESTARTS AGE
nginx 0/1 Running 0 66s
现在,让我们执行它并创建文件,以便命令成功。
k exec -it nginx -- bash
root@nginx:/# touch /tmp/healthy
root@nginx:/# exit
exit
再次检查:
date && k get pods nginx
Thu 2 Dec 2021 19:09:26 AST
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 110s
再次删除:
k exec -it nginx -- bash
root@nginx:/# rm /tmp/healthy
root@nginx:/# exit
exit
正在检查:
date && k get pods nginx
Thu 2 Dec 2021 19:09:53 AST
NAME READY STATUS RESTARTS AGE
nginx 0/1 Running 0 2m17s