【问题标题】:Multiple liveness probes in kuberenetesKubernetes 中的多个活性探针
【发布时间】:2018-03-08 12:05:48
【问题描述】:

我有一个包含多个独立1 组件的程序。

在所有组件中添加一个活性探针是微不足道的,但是拥有一个单个活性探针来确定所有程序组件的健康状况并不容易。

如何让 kubernetes 查看多个活跃度探测并在其中任何一个失效时重新启动容器?

我知道这可以通过添加更多软件来实现,例如执行活性检查的额外 bash 脚本,但我正在寻找一种本地方式来执行此操作。


1独立是指一个组件的故障不会导致其他组件的故障。

【问题讨论】:

  • 它们至少应该在不同的 Pod 或 Pod 内的不同容器中运行吗?
  • @user2983542 他们应该这样做,但并非所有应用程序都经过精心设计。
  • 对,我认为这是不可能的,尽管我有待纠正。用一些逻辑创建一个 sidecar 容器并将探针设置为那个怎么样?
  • 因此,如果您的 3 个组件中的 1 个组件未能通过活性探测,那么 pod 应该 33% 不可用?试图表达你想要达到的目标已经给了你一个线索。

标签: kubernetes kubernetes-health-check


【解决方案1】:

Kubernetes API 允许每个应用程序(部署/POD)一个活动和一个阅读。我建议创建一个具有端点休息的验证集中服务:

livenessProbe:
  httpGet:
    path: /monitoring/alive
    port: 3401
    httpHeaders:
    - name: X-Custom-Header
      value: Awesome
  initialDelaySeconds: 15
  timeoutSeconds: 1
  periodSeconds: 15

或尝试一次 bash 来完成相同的任务,例如:

livenessProbe:
  exec:
    command:
      - bin/bash
      - -c
      - ./liveness.sh
  initialDelaySeconds: 220
  timeoutSeconds: 5

liveness.sh

#!/bin/sh
if [ $(ps -ef | grep java | wc -l) -ge 1 ]; then
  echo 0
else
  echo "Nothing happens!" 1>&2
    exit 1
fi

回顾消息处理可以在有问题的失败事件中看到什么: “Warning Unhealthy Pod Liveness 探测失败:没有任何反应!”

希望对你有帮助

【讨论】:

  • 更准确地说,每个容器有一个探针(每个 pod/deployment/daemonset 可以有多个容器)。容器在其活性探测失败时重新启动。 -- 感谢您对消息的提示!我不明白这个文档。
【解决方案2】:

它不会那样做。该模型非常简单,每个容器一个探针,失败时遵循重启策略。

了解旧版应用程序的容器设计问题,但确实有很多方法可以安排资源共享以实现旧版兼容性。如果这个系统的组件已经是不同的进程,那么应该有一种方法将它们划分到容器中。

如果组件是线程或其他一些应用程序内模块化技术,那么活性确定确实必须来自应用程序内部。

【讨论】:

    猜你喜欢
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 2017-09-06
    • 2019-07-22
    • 2021-10-12
    • 2020-09-12
    相关资源
    最近更新 更多