k8s-探针
在Kubernetes中,有三种类型的探针(Probes)用于检查容器的健康状况和确定是否应该将请求路由到容器。这些探针可以配置在 Pod 的规范中。
存活探针(Liveness Probe)
存活探针用于确定容器是否处于运行状态。如果存活探针失败(返回失败状态码或超时),Kubernetes会认为容器不健康,并会重启容器。这可以用于检测应用程序内部错误或死锁情况。
livenessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 15 periodSeconds: 10
上述示例配置了一个 HTTP GET 请求的存活探针。它将在容器启动后等待 15 秒后开始执行,并且每 10 秒执行一次。探针会发送一个 HTTP GET 请求到容器的 /health
路径,并使用端口号 8080
就绪探针(Readiness Probe)
就绪探针用于确定容器是否准备好接受流量。如果就绪探针失败,Kubernetes 会将容器从服务的负载均衡中剔除,直到探针成功。这可以用于确保应用程序在启动后完成必要的初始化或数据加载。
readinessProbe: httpGet: path: /ready port: 8080 initialDelaySeconds: 5 periodSeconds: 3
上述示例配置了一个 HTTP GET 请求的就绪探针。它将在容器启动后等待 5 秒后开始执行,并且每 3 秒执行一次。探针会发送一个 HTTP GET 请求到容器的 /ready
路径,并使用端口号 8080。
启动探针(Startup Probe)
这个 1.16 版本增加的,启动探针用于确定容器是否已经启动并且准备好接受流量。与存活探针和就绪探针不同,启动探针在容器的初始启动阶段使用,并且仅会运行一次。启动探针成功后,就绪探针和存活探针才会启动。
startupProbe: exec: command: - cat - /tmp/initialized initialDelaySeconds: 10 periodSeconds: 5 failureThreshold: 30
上述示例配置了一个执行命令的启动探针。它将在容器启动后等待 10秒 后开始执行,并且每 5 秒执行一次。探针会执行命令 cat /tmp/initialized
,如果命令成功执行,表示容器已经初始化完成
三种探测方法
ExecAction
在容器中执行指定的命令,如果执行成功,退出码为 0 则探测成功。
HTTPGetAction
通过容器的 IP 地址、端口号及路径调用 HTTP Get 方法,如果响应的状态码大于等于 - 200 且小于 400,则认为容器 健康。
TCPSocketAction
通过容器的 IP 地址和端口号执行 TCP 检 查,如果能够建立 TCP 连接,则表明容器健康。
探针属性
- initialDelaySeconds:容器启动后要等待多少秒后就探针开始工作,单位“秒”,默认是 0 秒,最小值是 0
- periodSeconds:执行探测的时间间隔(单位是秒),默认为 10s,单位“秒”,最小值是 1
- timeoutSeconds:探针执行检测请求后,等待响应的超时时间,默认为 1s,单位“秒”,最小值是 1
- successThreshold:探针检测失败后认为成功的最小连接成功次数,默认为 1s,在 Liveness 探针中必须为 1s,最小值为 1s。
- failureThreshold:探测失败的重试次数,重试一定次数后将认为失败,在 readiness 探针中,Pod 会被标记为未就绪,默认为 3s,最小值为 1s