Kubernetes 探针
1. 探针概述
探针(Probe)是Kubernetes用于检测容器健康状况的机制,主要分为三种类型:
- 存活探针(Liveness Probe):检测容器是否正在运行
- 就绪探针(Readiness Probe):检测容器是否准备好接收流量
- 启动探针(Startup Probe):检测应用是否已完成启动(1.16+版本)
2. 探针类型
2.1 存活探针(Liveness Probe)
- 作用:确定容器是否需要重启
- 失败后果:杀死容器并根据重启策略决定是否重启
- 适用场景:检测死锁、长时间阻塞等不可恢复状态
2.2 就绪探针(Readiness Probe)
- 作用:确定容器是否可以接收请求
- 失败后果:从Service的Endpoint中移除该Pod,不再接收流量
- 适用场景:应用启动需要较长时间准备、临时过载等情况
2.3 启动探针(Startup Probe)
- 作用:保护慢启动容器
- 失败后果:在启动探针成功前,其他探针不会生效
- 适用场景:旧版应用启动时间较长的情况
3. 探针检查方式
3.1 ExecAction
在容器内执行指定命令,返回0表示成功
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
3.2 HTTPGetAction
对容器IP的指定端口和路径执行HTTP GET请求
readinessProbe:
httpGet:
path: /healthz
port: 8080
httpHeaders:
- name: Custom-Header
value: Awesome
3.3 TCPSocketAction
对容器IP的指定端口进行TCP检查
livenessProbe:
tcpSocket:
port: 8080
4. 探针参数配置
所有探针类型都支持以下参数:
initialDelaySeconds
:容器启动后等待多少秒开始探测(默认0)periodSeconds
:执行探测的时间间隔(默认10秒)timeoutSeconds
:探测超时时间(默认1秒)successThreshold
:探测连续成功多少次才认为成功(默认1)failureThreshold
:探测连续失败多少次才认为失败(默认3)
5. 最佳实践
- 所有生产Pod都应定义就绪探针
- 谨慎使用存活探针,确保它能准确反映应用健康状态
- 为慢启动应用配置启动探针,避免被存活探针误杀
- 探针端点应轻量级,避免消耗过多资源
- 避免在探针检查中依赖外部服务,确保独立性
- 合理设置超时和间隔,避免过于频繁或耗时的检查
- 考虑实现优雅终止,配合terminationGracePeriodSeconds使用
6. 示例配置
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-http
spec:
containers:
- name: liveness
image: registry.k8s.io/liveness
args:
- /server
livenessProbe:
httpGet:
path: /healthz
port: 8080
httpHeaders:
- name: Custom-Header
value: Awesome
initialDelaySeconds: 3
periodSeconds: 3
readinessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
startupProbe:
httpGet:
path: /healthz
port: 8080
failureThreshold: 30
periodSeconds: 10
评论需开启科学上网!