本文主要介绍 Kubernetes 中 Liveness Probe 和 Readiness Probe 的概念、用途及配置方法,并给出示例代码。
什么是 Liveness Probe 和 Readiness Probe?
在 Kubernetes 中,Liveness Probe 和 Readiness Probe 都是用于监控应用程序健康状态的机制。两者的区别在于:
- Liveness Probe:用于判断应用程序是否处于运行状态,即判断容器内的进程是否存活。如果 Liveness Probe 探测失败,则 Kubernetes 认为容器内的应用程序已经不可用,会杀掉该 Pod,并重新拉起一个新的 Pod。
- Readiness Probe:用于判断应用程序是否已准备好接收客户端请求,即判断容器内的进程是否已经启动并正常运行。如果 Readiness Probe 探测失败,则 Kubernetes 认为容器内的应用程序还不能提供服务,会将该 Pod 从 Service 的 Endpoint 列表中移除,直到应用程序再次准备好接收请求。
通过 Liveness Probe 和 Readiness Probe 机制,Kubernetes 可以自动检测并处理异常情况,提高了应用程序的可用性和稳定性。
如何配置 Liveness Probe 和 Readiness Probe?
在 Kubernetes 的 Deployment 或 StatefulSet 中,可以通过配置 Pod 的 spec.containers[].livenessProbe 和 spec.containers[].readinessProbe 属性来设置 Liveness Probe 和 Readiness Probe。具体的配置参数包括:
- type:探测方式,支持三种类型:
- httpGet:通过向容器内的 HTTP 服务发送 GET 请求来探测应用程序的运行状态;需要指定 HTTP 请求的 path、port 和 scheme 等参数。
- tcpSocket:通过 TCP 连接来探测应用程序的运行状态;需要指定连接的 port 参数。
- exec:通过执行容器内的命令来探测应用程序的运行状态;需要指定要执行的命令参数。
- initialDelaySeconds:Pod 启动后多少秒开始进行探测,默认为 0。
- timeoutSeconds:探测超时时间,如果在该时间内没有响应,则认为探测失败,默认为 1。
- periodSeconds:探测间隔时间,默认为 10。
- successThreshold:连续成功探测多少次后认为应用程序已成功运行,默认为 1。
- failureThreshold:连续失败探测多少次后认为应用程序已经停止运行,默认为 3。
下面给出一个示例,通过 httpGet 方式探测一个 Web 应用的 Liveness Probe 和 Readiness Probe。
// javascriptcn.com 代码示例 apiVersion: apps/v1 kind: Deployment metadata: name: web spec: replicas: 3 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: web image: nginx:latest ports: - containerPort: 80 livenessProbe: httpGet: path: / port: 80 initialDelaySeconds: 10 timeoutSeconds: 1 periodSeconds: 10 failureThreshold: 3 readinessProbe: httpGet: path: / port: 80 initialDelaySeconds: 10 timeoutSeconds: 1 periodSeconds: 10 successThreshold: 1
在上述示例中,通过 httpGet 方式对根路径进行探测,间隔时间为 10s,探测超时时间为 1s,连续探测 3 次失败后认为应用程序已经停止运行。对于 Readiness Probe,设定了连续成功探测 1 次后即认为应用程序已经准备好接收客户端请求。
总结
通过 Liveness Probe 和 Readiness Probe 机制,Kubernetes 可以自动监控并处理容器内应用程序的健康状态,提高了应用程序的可用性和稳定性。掌握 Liveness Probe 和 Readiness Probe 的用途和配置方法,对于开发和运维人员都具有重要的指导意义。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6530c6387d4982a6eb255f14