我有一个 k8s 集群。我们的服务是基于队列的。我们的 pod 订阅一个事件队列,获取事件并执行任务。那么对于这种服务,如何定义k8s liveness probe和readiness probe呢?
2 回答
以下是对这些探针的简要介绍:
Liveliness Probe让 Kubernetes 知道工作负载是否健康。它可以是在您的容器中执行的 shell 命令,也可以是一个简单的 tcp/http 请求,它应该会做出积极响应。
如果在 pod 配置中指定的超时时间后活性检查失败,Kubrenetes 将重新启动工作负载。
因此,如果您的工作负载正在执行耗时的过程,您可能需要给活跃度探测足够的时间以确保您的 Pod 不会过度重启。
Rediness Probe用于 Kubernetes 代理来决定您的工作负载是否已准备好使用流量。只有当 rediness 探测响应积极时,流量才会发送到您的 pod。因此,如果您的工作负载需要更多时间来处理单个请求,并且需要在此期间将其他请求转移到其他副本以进行快速处理,那么您可能希望为工作负载提供稍高的 rediness 间隔。
这些探测参数与副本数量相结合,可以确保您的应用程序快速健康地运行。了解每个探头覆盖的区域以及可以调整它们的参数非常重要。
以下是一些读物:
假设您的问题是因为处理工作人员正在使用队列消息,它没有公开任何要检查的端口。
在这种情况下,您可以定义livenessProbe
和readinessProbe
自定义命令,接下来是文档中的示例:
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 所需的时间。