【问题标题】:How to define k8s liveness probe and readness probe for worker pod如何为worker pod定义k8s liveness probe和readiness probe
【发布时间】:2020-07-03 06:09:27
【问题描述】:

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

【问题讨论】:

    标签: kubernetes readinessprobe livenesprobe


    【解决方案1】:

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

    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/

    【讨论】:

    • 谢谢。挺好用的!
    【解决方案2】:

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

    在这种情况下,您可以定义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 完全加载之前不杀死它所需的时间。

    【讨论】:

    • 所以这种方式,我们需要创建一个线程,定期将时间戳日志写入文件。可以通过 liveness probe 来检查日志是否过时。对吗?
    • 使用该命令,您可以在 pod 内进行任何您需要的检查,不仅检查文件,还可以检查进程状态或与您的工作人员相关的其他检查。
    • 我有点困惑。什么是进程状态,如何检查与工人相关的状态?有什么例子吗?哪个命令?
    • 这完全取决于你的工作代码,command livenessProbe 允许你执行任何你想检查你正在运行的工作/进程的命令或脚本。如果没有看到你的工作代码,我不能给你一个例子。
    猜你喜欢
    • 2016-06-12
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 2020-07-19
    相关资源
    最近更新 更多