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