在我基于 Kubernetes 的集群中,我几乎没有基于 Java 的 dockerized 微服务,它们相互连接,因此每个人都相互发送和接收一些信息。我有 Kafka/Zookeeper 集群,它也再次连接到这个微服务。我需要一些程序,比如当我重新启动活动的 Kafka pod 时,另一个微服务应该理解它并重新启动自己。这个怎么做?请举一些例子yml。
1 回答
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 pod ,如果在 Kafka pod 中发现任何重新启动,那么您可以根据需要重新启动所有依赖的 pod。
于 2018-12-24T11:30:43.017 回答