如何定义工作线程 Pod 的 k8s 活动探测和读取探测



我有一个k8s集群。我们的服务是基于队列的。我们的 pod 订阅事件队列,获取事件并执行任务。那么对于这类服务,如何定义k8s活体探测和就绪探测呢?

假设您的问题是因为处理工作线程消耗队列消息,它不会公开任何要检查的端口。

在这种情况下,您可以定义livenessProbereadinessProbe自定义命令,接下来是文档中的示例:

apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
spec:
containers:
- name: liveness
image: k8s.gcr.io/busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
readinessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5

另外,请记住您的进程上线并准备好调整initialDelaySeconds所需的时间,periodSeconds在 Pod 完全停滞之前不要杀死它。

以下是对这些探针的非常简短的介绍:

Liveliness Probe是为了让 Kubernetes 知道工作负载是否健康。它可以是在容器中执行的 shell 命令,也可以是应该积极响应的简单 tcp/http 请求。

如果在 pod 配置中指定的一段时间后,实时性检查失败,Kubrenetes 将重新启动工作负载。

因此,如果您的工作负载正在执行耗时的过程,您可能需要给实时探测足够的时间,以确保您的 Pod 不会过度重新启动。

Rediness Probe用于 Kubernetes 代理确定您的工作负载是否已准备好消耗流量。仅当 rediness 探测响应积极时,流量才会发送到您的 pod。因此,如果您的工作负载需要更多时间处理单个请求,并且需要在此期间将其他请求转移到其他副本以进行快速处理,则可能需要为工作负载提供稍高的 rediness 间隔。


这些探测参数与副本数相结合,可以确保应用程序的快速健康运行。了解每个探头覆盖的区域以及可以调谐它们的参数非常重要。

以下是一些阅读:

https://blog.colinbreck.com/kubernetes-liveness-and-readiness-probes-how-to-avoid-shooting-yourself-in-the-foot/

https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

最新更新