如何为工人吊舱定义k8s活动度探针和就绪度探针

时间:2020-07-03 06:09:27

标签: kubernetes readinessprobe livenesprobe

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

2 个答案:

答案 0 :(得分:3)

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

生动性探针用于让Kubernetes知道工作负载是否正常。它可能是在您的容器中执行的shell命令,也可能是一个简单的tcp / http请求,应该会积极响应。

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

因此,如果您的工作量正在执行耗时的过程,则可能需要给活动度探针足够的时间以确保吊舱不会过度重启。

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


这些探针参数以及副本数量可确保您的应用程序快速健康地运行。了解每个探头覆盖的区域以及可以调整它们的参数非常重要。

这里有一些读物:

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/

答案 1 :(得分:1)

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

在这种情况下,您可以定义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使其完全浸出之前不会杀死豆荚。