在K8S中,Pod 的健康检查方式有哪些?
在 Kubernetes 中,Pod 的健康检查是通过探针(Probe)来实现的,主要有三种类型的探针:存活探针(Liveness Probe)、就绪探针(Readiness Probe)和启动探针(Startup Probe)。以下是这些探针的详细介绍和配置方式:
-
存活探针(Liveness Probe):
-
目的:确定容器是否正在运行并能够响应请求。如果存活探针失败,Kubernetes 会根据 Pod 的重启策略重启容器。
-
探测方式:
- ExecAction:在容器内执行命令,如果命令执行成功(返回码为0),则认为容器健康。例如,可以检查某个特定文件是否存在或执行某个脚本。
- HTTPGetAction:向容器的特定端口和路径发送 HTTP GET 请求,如果响应码在200-399之间,则认为容器健康。
- TCPSocketAction:尝试与容器的指定端口建立 TCP 连接,如果连接成功,则认为容器健康。
-
配置示例:
livenessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5
-
-
就绪探针(Readiness Probe):
-
目的:确定容器是否准备好接收流量。如果就绪探针失败,Pod 将不会被加入到任何服务的负载均衡池中。
-
探测方式:与存活探针相同,可以是 ExecAction、HTTPGetAction 或 TCPSocketAction。
-
配置示例:
readinessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 3 periodSeconds: 3
-
-
启动探针(Startup Probe):
-
目的:确定容器中的应用程序是否已经启动。如果应用程序启动缓慢,使用启动探针可以避免在应用程序完全启动前就进行存活探针和就绪探针的检查。
-
探测方式:可以是 ExecAction、HTTPGetAction 或 TCPSocketAction。
-
配置示例:
startupProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 15 periodSeconds: 10 failureThreshold: 30
-
除了这些基本的配置,探针还可以配置其他参数,如 initialDelaySeconds
(首次探测前的等待时间)、periodSeconds
(探测间隔时间)、timeoutSeconds
(探测超时时间)、successThreshold
(探测成功阈值)、failureThreshold
(探测失败阈值)等。
例如,以下是一个完整的探针配置示例,包含了存活探针和就绪探针:
apiVersion: v1
kind: Pod
metadata:
name: goproxy
labels:
app: goproxy
spec:
containers:
- name: goproxy
image: registry.k8s.io/goproxy:0.1
ports:
- containerPort: 8080
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
综上所述,在这个示例中,readinessProbe
和 livenessProbe
都使用了 TCP 套接字来检查容器的 8080 端口是否开放,从而判断容器是否就绪和存活。