原创首发
K8s startupProbe ReadinessProbe 和 LivenessProbe 三种探针
在 Kubernetes 中,startupProbe
、readinessProbe
和 livenessProbe
是用来监控容器健康状况的不同类型的探针。每种探针都有其特定的目的和用途。
1. StartupProbe (启动探针)
目的: 确定容器中的应用程序是否已经成功启动。
行为: - 在 startupProbe
成功之前,livenessProbe
和 readinessProbe
不会被执行。 - 一旦 startupProbe
成功,livenessProbe
和 readinessProbe
将开始工作。 - 如果 startupProbe
失败达到 failureThreshold
指定的次数,容器将根据其重启策略进行处理。
配置示例:
startupProbe:
httpGet:
path: /healthz/startup
port: 8080
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 30
successThreshold: 1
2. ReadinessProbe (就绪探针)
目的: 确定容器是否准备好接收流量。
行为: - 当 readinessProbe
失败时,Kubernetes 会将该 Pod 从服务的 Endpoint 列表中移除,确保没有流量被路由到该 Pod。 - 只有当 readinessProbe
成功时,Pod 才被视为就绪,并可以接收流量。
配置示例:
readinessProbe:
httpGet:
path: /healthz/ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 3
3. LivenessProbe (存活探针)
目的: 确定容器是否还在运行,并且运行正常。
行为: - 当 livenessProbe
失败时,Kubernetes 会重启容器。 - 这种探针通常用于检测容器是否进入了一个崩溃循环或不再响应的状态。
配置示例:
livenessProbe:
httpGet:
path: /healthz/live
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 3
共同配置选项
对于所有三种探针,你可以指定以下选项:
httpGet
: 发送 HTTP GET 请求到指定的 URL。tcpSocket
: 检查一个 TCP 套接字是否打开。exec
: 在容器内执行命令。initialDelaySeconds
: 在首次执行探针前等待的秒数。periodSeconds
: 两次探针执行之间的时间间隔。timeoutSeconds
: 探针超时的时间。successThreshold
: 成功的阈值,通常设置为 1。failureThreshold
: 失败的阈值,即连续失败多少次后采取行动。
示例
这是一个包含所有三种探针的完整示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: myapp:v1
ports:
- containerPort: 8080
startupProbe:
httpGet:
path: /healthz/startup
port: 8080
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 30
successThreshold: 1
readinessProbe:
httpGet:
path: /healthz/ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 3
livenessProbe:
httpGet:
path: /healthz/live
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 3
请注意,实际配置需要根据您的应用具体情况调整,包括端口号、路径以及各种探针的参数。