k8s 探针

三类探针的作用域

1. 存活探针(Liveness Probe)

  • 作用:判断Pod是否存活
  • 影响:失败时重启Pod
  • 范围:仅影响Pod生命周期

2. 就绪探针(Readiness Probe)

  • 作用:判断Pod是否准备好接收流量
  • 影响:控制Pod是否加入Service的Endpoint
  • 范围:影响Service流量分发

3. 启动探针(Startup Probe)

  • 作用:判断应用是否启动完成
  • 影响:在启动期间禁用其他探针
  • 范围:仅影响Pod启动过程

与Service的关系详解

就绪探针与Service的关联

1
2
3
4
5
6
7
8
9
10
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app # 选择标签匹配的Pod
ports:
- port: 80
targetPort: 8080
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: v1
kind: Pod
metadata:
labels:
app: my-app # 与Service选择器匹配
spec:
containers:
- name: app
image: my-app:latest
readinessProbe: # 就绪探针决定是否加入Service
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 10

关键点说明

  1. 就绪探针影响Service

    • 就绪探针失败的Pod不会被加入到Service的Endpoint中
    • 这是唯一的间接关联
  2. 其他探针不直接影响Service

    • 存活探针只影响Pod重启
    • 启动探针只影响Pod启动过程
  3. Service基于标签选择

    • Service通过selector选择Pod
    • 不关心Pod的探针配置

实际示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# Service配置
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web-server # 选择标签为web-server的Pod
ports:
- port: 80
targetPort: 8080

---
# Deployment配置
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 3
selector:
matchLabels:
app: web-server
template:
metadata:
labels:
app: web-server # 与Service匹配
spec:
containers:
- name: web-container
image: nginx
ports:
- containerPort: 8080
# 探针配置不影响Service选择逻辑
livenessProbe:
httpGet:
path: /healthz
port: 8080
readinessProbe:
httpGet:
path: /ready
port: 8080 # 只影响是否接收流量

总结

  • 探针与Service解耦:探针配置不影响Service的选择逻辑
  • 就绪探针特殊:唯一影响Pod是否接收Service流量的探针
  • 独立配置:可以在没有Service的情况下单独使用探针
  • 灵活组合:可以根据业务需要灵活配置探针和Service