如何为 worker pod 定义 k8s liveness probe 和 readiness probe

How to define k8s liveness probe and readness probe for worker pod

我有一个k8s集群。我们的服务是基于队列的。我们的 pod 订阅事件队列,获取事件并执行任务。那么对于这种服务,如何定义k8s liveness probe和readiness probe呢?

以下是对这些探测器的简要介绍:

Liveliness Probe 用于让 Kubernetes 了解工作负载是否健康。它可以是在您的容器中执行的 shell 命令或应该积极响应的简单 tcp/http 请求。

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

因此,如果您的工作负载正在执行耗时的过程,您可能需要给您的 liveliness 探测器足够的时间,以确保您的 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/

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

在这种情况下,您可以定义 livenessProbereadinessProbe 自定义命令,下一个示例来自 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

此外,请记住您的进程启动并准备好调整 initialDelaySecondsperiodSeconds 以在 pod 完全加载之前不杀死 pod 所需的时间。