在我基于Kubernetes的集群中,我很少有基于Java的,Docker化的微服务,它们相互连接,因此每个人都相互发送和接收一些信息。我也有Kafka / Zookeeper集群,该集群再次连接到该微服务。我需要执行一些步骤,例如当我重新启动活动的Kafka pod时,另一个微服务应该理解它并重新启动自己。这该怎么做?请举个yml示例。
答案 0 :(得分:1)
没有没有Kubernetes原生方式来完成您的工作。但是您可以使您的应用程序重新启动容器。
您可以从容器的livenessProbe获取帮助。
Kubernetes提供livenessProbe来检测您的应用程序是否存在。如果失败,活动性探测实际上将尝试重新启动容器。
spec:
containers:
- name: liveness
image: <image>
livenessProbe:
httpGet: # make an HTTP request
port: 8080 # port to use
path: /live # endpoint to hit
scheme: HTTP # or HTTPS
initialDelaySeconds: 3
periodSeconds: 3
failureThreshold: 1
现在,让您的应用在需要重启时返回200以外的值。
如果您可以从微服务中识别出您的kafka pod已重新启动,则您将通过/live
http调用返回200以外的状态代码。
如果您想直接通过liveness
探针调用kafka服务,请在httpGet
下添加以下内容
httpGet:
httpHeaders:
- name: Host
value: kafka-svc
现在,您的应用程序将调用kafka-svc.svc:8080/live
第二种方式:
您可以编写一个应用程序,该应用程序将使用kubernetes watch api 来监视您的 Kafka 播客,如果在Kafka播客中发现了任何重新启动,则可以将所有相关的播客重新启动为您需要。