在 Kubernetes (K8s) 中,Pod 的容器可以通过探针(Probes)来检测容器的健康状况和就绪状态。探针主要用于确保容器能够正确启动并在运行过程中保持健康状态。Kubernetes 支持三种类型的探针:
- livenessProbe (存活探针)
- readinessProbe (就绪探针)
- startupProbe (启动探针)
每种探针都有其特定的作用和使用场景。
1. livenessProbe (存活探针)
- 目的:
- 检查容器是否还活着,即是否处于正常运行状态。
- 如果容器被认为是不健康的,Kubernetes 会杀死这个容器,并根据容器的重启策略(如
Always
或OnFailure
)来决定是否重启它。
- 触发时机:
- 在容器运行期间定期执行。
- 示例配置:
livenessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 30 periodSeconds: 10
2. readinessProbe (就绪探针)
- 目的:
- 检查容器是否已经准备好接收流量。
- 只有当容器通过就绪探针检查时,Kubernetes 才会将其加入到 Service 的后端列表中。
- 触发时机:
- 在容器运行期间定期执行。
- 示例配置:
readinessProbe: httpGet: path: /ready port: 8080 initialDelaySeconds: 5 periodSeconds: 5
3. startupProbe (启动探针)
- 目的:
- 检查容器是否成功启动并进入就绪状态。
- 这种探针主要用于那些启动时间较长的应用程序,以避免在容器启动完成之前就执行 livenessProbe 或 readinessProbe。
- 触发时机:
- 在容器启动后立即执行,并在容器被认为已准备好之前一直执行。
- 示例配置:
startupProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 1 periodSeconds: 1 failureThreshold: 30
4. 探针配置参数
- httpGet:
- 通过 HTTP GET 请求来检查容器状态。
- 需要指定路径和端口。
- tcpSocket:
- 检查容器内的 TCP 端口是否打开。
- 需要指定端口号。
- exec:
- 在容器内执行命令。
- 需要指定要执行的命令。
- initialDelaySeconds:
- 探针开始执行前等待的秒数。
- periodSeconds:
- 探针执行间隔的秒数。
- timeoutSeconds:
- 探针执行的最大等待时间。
- successThreshold:
- 探针连续成功执行的次数。
- failureThreshold:
- 探针连续失败执行的次数,超过此次数后将采取行动。
4. 使用探针的好处
- 提高应用的可靠性:通过探针可以及时发现容器的问题,并采取适当的措施,如重启容器。
- 优化服务的可用性:只有当容器准备就绪时才将流量路由到该容器,确保服务始终可用。
- 减少不必要的资源浪费:避免长时间运行不健康或未准备好状态的容器。
5. 示例 YAML 配置
以下是一个简单的 YAML 文件示例,展示了如何配置 livenessProbe 和 readinessProbe:
apiVersion: v1 kind: Pod metadata: name: myapp-pod spec: containers: - name: myapp-container image: my-app-image ports: - containerPort: 8080 livenessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: httpGet: path: /ready port: 8080 initialDelaySeconds: 5 periodSeconds: 5
综上所述,这些探针配置可以根据实际应用的需求进行调整,以确保容器的健康和就绪状态得到有效的监控。