-2

在我基于 Kubernetes 的集群中,我几乎没有基于 Java 的 dockerized 微服务,它们相互连接,因此每个人都相互发送和接收一些信息。我有 Kafka/Zookeeper 集群,它也再次连接到这个微服务。我需要一些程序,比如当我重新启动活动的 Kafka pod 时,另一个微服务应该理解它并重新启动自己。这个怎么做?请举一些例子yml。

4

1 回答 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 已重新启动,那么您会从/livehttp 调用返回 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 回答