Java线程化应用程序的活力/健康探测器

Java线程化应用程序的活力/健康探测器,java,kubernetes,Java,Kubernetes,我有一个java多线程主程序应用程序,可以将消息从事件中心(Azure EH是一个按照Kafka/Amazon Kinesis的思路划分的消息传递系统)中排出并处理它们 这是部署在AKS/Kubernetes上的,对于HA,我设置了一些副本。为了使其完整,我想添加一个健康检查探针,以便我们能够自我修复侦听器 我一直使用的几个选项是 a) 基于JMX的统计数据,并查看它是否有用,并监视一般的JVM统计数据 b) 创建一个小型套接字应用程序来使用TCP探测器,需要检查它的可靠性以及需要的安全性(可能

我有一个java多线程主程序应用程序,可以将消息从事件中心(Azure EH是一个按照Kafka/Amazon Kinesis的思路划分的消息传递系统)中排出并处理它们

这是部署在AKS/Kubernetes上的,对于HA,我设置了一些副本。为了使其完整,我想添加一个健康检查探针,以便我们能够自我修复侦听器

我一直使用的几个选项是

a) 基于JMX的统计数据,并查看它是否有用,并监视一般的JVM统计数据

b) 创建一个小型套接字应用程序来使用TCP探测器,需要检查它的可靠性以及需要的安全性(可能只是在集群内就可以了)

c) 嵌入一个小型HTTP服务器并公开一个HTTP端点(最不可取的做法是,它会给我希望保持小型的应用程序增加开销)

问题:

a) 对于部署这样的侦听器应用程序,是否有建议或最佳做法。使用ReplicaSet for HA可以吗?或者k8s中是否有一种不同的“类型”适用于此

b) 运行状况检查是否有所减少(我可以为java主应用程序的探测扩展这些检查)。这些类型的应用程序运行状况统计数据通常是如何监控的

问候

a) 是否有建议或最佳实践可供参考 部署这样的侦听器应用程序。可以用吗 这是为HA设置的,还是k8s中有不同的“种类” 适合这个

ReplicaSet可确保在任何给定时间运行指定数量的pod副本。然而,部署是一个更高级别的概念,它管理复制集,并向POD提供声明性更新以及许多其他有用的功能。因此,我建议使用部署而不是直接使用复制集,除非您需要自定义更新编排或根本不需要更新。 这实际上意味着您可能永远不需要操纵ReplicaSet对象:而是使用部署,并在spec部分定义应用程序

b) 健康检查是否有下降(我可以延长探针的检查时间) 用于java主应用程序)。这些应用程序的运行状况如何 一般监控的统计数据

Kubernetes通过不同类型的探针提供健康检查所需的功能。此健康检查将为您的豆荚提供自我修复

如果您遇到HTTP探测或命令探测无法正常工作的情况,TCP探测将派上用场。例如,gRPC或FTP服务是此类探测器的主要候选

您需要选择最适合您的用例的一个。我还建议进行初始探测延迟,因为活动探测失败会导致pod重新启动。你需要确保在应用程序准备就绪之前探测器不会启动。否则,应用程序将不断重新启动,并且永远不会准备就绪。我建议使用启动时间作为initialDelaySeconds,或者只取平均启动时间并添加一个缓冲区。当应用程序的启动时间变快或变慢时,请确保更新此号码

此外,您还应该为南北通信量使用,并且您可以配置负载平衡和健康检查入口。当此健康检查失败时,入口将停止向后端pod发送流量