2

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

4

2 回答 2

4

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

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/

于 2020-07-03T06:31:09.943 回答
2

假设您的问题是因为处理工作人员正在使用队列消息,它没有公开任何要检查的端口。

在这种情况下,您可以定义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

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

于 2020-07-03T06:49:50.190 回答