【问题标题】:Kubernetes check if pod fails [closed]Kubernetes检查pod是否失败[关闭]
【发布时间】:2019-05-23 13:39:09
【问题描述】:

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

【问题讨论】:

  • 愚蠢的言论......

标签: kubernetes apache-kafka ping spring-cloud-zookeeper


【解决方案1】:

没有 Kubernetes 原生方式来完成你的工作。但是你可以让你的应用做重启你的容器。

您可以从容器的livenessProbe 获得帮助。

Kubernetes 提供 livenessProbe 来检测您的应用程序是否处于活动状态。如果 容器 失败,liveness 探测器实际上会尝试重新启动它。

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你需要。

【讨论】:

  • 如何定义liveness probe到另一个pod?所以我正在写一个微服务来对kafka进行活性探测,怎么写呢?按路径:它始终显示为主机微服务的 IP。
  • httpHeaders 中添加主机。现在,您的 pod 将调用 kafka 服务 kafka.svc:8080/live 。更新答案
  • 我应该在不修改源代码的情况下这样做,只需使用 Kubernetes 和脚本......
  • 你可以试试第二个选项
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 2019-06-03
  • 2020-03-01
  • 2019-12-29
  • 1970-01-01
相关资源
最近更新 更多