在 Kubernetes 上使用 Spring Boot Admin 监控副本

Monitoring replicas with Spring Boot Admin on Kubernetes

我在 Kubernetes 上设置了一个 Spring 引导管理客户端并扩展到 3 个副本,但是当我尝试检查实例时管理服务器只显示一个

您需要在 yml 文件中设置参数:

eureka.instance.instance-id: ${spring.cloud.client.ip-address}:${server.port}

为了让 SBA(Spring 引导管理员)了解您的服务的三个实例是不同的,您需要确保每个服务都使用其 "internal IP address" 在 SBA 中注册。

这样做会让 SBA 独立查询每个实例的运行状况,并会导致 spring 为每个 pod 创建唯一的实例 ID。

请注意,使用 k8s 服务名称进行注册将导致 SBA 的健康查询在服务的 pods.

之间实现负载平衡

为此,请将以下内容添加到您的 application.yml 中:

spring:
  boot.admin.client:
    url: http://<k8s-service-name-and-port>
    instance:
      name: <service-name>
      service-base-url: http://${K8S_POD_IP}:8080
      management-base-url: http://${K8S_POD_IP}:8081
    auto-deregistration: true

拥有:

  • K8S_POD_IP 是一个环境变量,其中包含必须可从 SBA 访问的 pod 的 IP 地址 - 这是 SBA 将用来查询服务实例健康状况的地址
  • spring.boot.admin.client.url 是 SBA 的 UI 将在您单击服务实例时使用的 URL - 这个 URL 应该指向 k8s 的服务
  • spring.boot.admin.client.management-base-url - SBA 使用它来监控每个服务的健康状况,每个实例都应该是唯一的,并且应该可以从 SBA 访问
  • 如果您没有将 auto-deregistration 设置为 true,每当您推出更新或缩减您的服务时,您将收到不健康实例的通知 - 使用此设置,实例将取消注册关机时来自 SBA。