在 Kubernetes 中,Pod 的 Liveness Probe 探针用于确定何时重启容器。以下是 Liveness Probe 的常见方式:
-
ExecAction:
-
在容器内执行命令。如果命令执行成功(返回码为0),则认为容器健康。否则,kubelet 会杀死并重启容器。
-
配置示例:
livenessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5
-
在这个例子中,kubelet 会每隔 5 秒执行一次
cat /tmp/healthy
命令。如果命令返回失败(文件不存在或命令执行出错),则 kubelet 会重启容器。
-
-
HTTPGetAction:
-
向容器的特定端口和路径发送 HTTP GET 请求。如果服务器返回的 HTTP 状态码在 200-399 范围内,则认为容器健康。
-
配置示例:
livenessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 3 periodSeconds: 3
-
在这个例子中,kubelet 会每隔 3 秒向容器的 8080 端口上的
/healthz
路径发送一个 HTTP GET 请求。如果请求失败(例如,返回 500 错误),则 kubelet 会重启容器。
-
-
TCPSocketAction:
-
尝试与容器的指定端口建立 TCP 连接。如果连接成功,则认为容器健康。
-
配置示例:
livenessProbe: tcpSocket: port: 8080 initialDelaySeconds: 15 periodSeconds: 10
-
在这个例子中,kubelet 会每隔 10 秒尝试与容器的 8080 端口建立 TCP 连接。如果连接失败,则 kubelet 会重启容器。
-
-
gRPC(Kubernetes v1.27 引入):
-
如果应用实现了 gRPC 健康检查协议,可以使用 gRPC 探针进行存活性检查。
-
配置示例:
livenessProbe: grpc: port: 2379 initialDelaySeconds: 10
-
在这个例子中,kubelet 会检查 gRPC 服务是否在指定的端口上运行。如果服务未运行,则 kubelet 会重启容器。
-
综上所述,每种探针都可以配置额外的参数,如 initialDelaySeconds
(首次探测前的等待时间)、periodSeconds
(探测间隔时间)、timeoutSeconds
(探测超时时间)、successThreshold
(探测成功的阈值)和 failureThreshold
(探测失败的阈值)等,以精确控制探针的行为。