在Kubernetes中,Probes(探针)是用来检查容器状态的一种机制。它们帮助Kubernetes确定容器何时处于健康状态、何时应该重启以及何时可以开始接收流量。Kubernetes支持三种类型的探针:
- Liveness Probe(存活探针)
- Readiness Probe(就绪探针)
- Startup Probe(启动探针)
每种探针都有其特定的用途,并且可以通过几种不同的方式来执行检查,包括exec
命令、HTTP请求和TCP套接字。
Liveness Probe(存活探针)
- 用途:存活探针用于检查容器是否仍在运行。如果存活探针失败,则Kubernetes会杀死该容器并根据Pod的重启策略进行处理。
- 适用场景:当应用程序出现死锁或进入不响应的状态时,存活探针可以帮助系统识别这种情况并采取行动。
Readiness Probe(就绪探针)
- 用途:就绪探针用于判断容器是否准备好开始服务请求。如果就绪探针失败,则端点控制器将从与Pod关联的所有Service的负载均衡池中移除相应的Pod。
- 适用场景:当应用程序需要一段时间进行初始化或者需要依赖外部服务时,就绪探针可以确保只有在所有准备工作完成后才开始接受流量。
Startup Probe(启动探针)
- 用途:启动探针用于检查应用程序的启动过程是否完成。这在应用启动时间较长的情况下特别有用,因为它允许你设置比存活探针更长的初始延迟。
- 适用场景:对于那些启动时间可能很长的应用程序,使用启动探针可以防止存活探针在应用完全启动之前将其标记为失败。
探针的执行方式
-
Exec Action:在容器内执行指定的命令。如果命令退出时返回码为0,则认为诊断成功。
livenessProbe: exec: command: - cat - /tmp/healthy
-
HTTP Get:对容器的IP地址、端口和路径执行HTTP GET请求。如果响应的状态码大于等于200且小于400,则诊断被认为是成功的。
livenessProbe: httpGet: path: /healthz port: 8080
-
TCP Socket:尝试打开一个到容器的指定端口的TCP连接。如果连接建立成功,则诊断被认为是成功的。
livenessProbe: tcpSocket: port: 8080
配置示例
下面是一个包含所有三种探针类型的完整Pod配置示例:
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: my-pod
spec:
containers:
- name: my-container
image: nginx
livenessProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 80
initialDelaySeconds: 5
periodSeconds: 5
startupProbe:
httpGet:
path: /startup
port: 80
failureThreshold: 30
periodSeconds: 10
在这个例子中:
livenessProbe
每10秒检查一次/healthz
端点,初始延迟为30秒。readinessProbe
每5秒检查一次/ready
端点,初始延迟为5秒。startupProbe
每10秒检查一次/startup
端点,最大失败次数为30次,即最多等待5分钟。
通过合理配置这些探针,你可以提高应用程序的可靠性和可用性,确保只有健康的服务实例才会处理用户请求。