Kubernetes 部署 SpringBoot Admin + Eureka 监控微服务

Kubernetes 部署 SpringBoot Admin + Eureka 监控微服务

文章目录

  !版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。


系统环境

  • Kubernetes 版本:1.5.3
  • SpringBoot Admin 版本:2.1.6
  • SpringCloud 版本:Greenwich.SR2
  • SpringCloud Kubernetes 版本:1.0.2.RELEASE

参考地址

  • 示例 Github 地址:https://github.com/my-dlq/blog-example/tree/master/springcloud/springboot-admin-demo

一、概念简介

1、背景

现在很多 SpringCloud 组件都在往 Kubernetes 中迁移,SpringBoot Admin 作为我们微服务监控经常使用的组件,也要将它迁移到 Kubernetes 环境下。

在之前写过 SpringBoot Admin 与 SpringCloud Kubernetes 组件结合,通过 API 方式发现服务列表,让 Admin 服务能服务发现。但是现在还是很多实际生产环境中,还是将 Eureka 注册中心部署到 Kubernetes 环境下作为注册中心,然后将全部服务注册到 Eureka,通过注册中心将服务间关系进行关联,所以考虑到这种情况,所以这里将使用 Admin + Eureka 方式来部署。

2、SpringBoot Admin 简介

SpringBoot Admin 是一个管理和监控 SpringBoot 应用程序的开源软件,每个应用都认为是一个客户端,它可用通过 HTTP 或者使用 Eureka 注册到 admin server 中,能收集这些客户端的监控指标信息,展示在页面上,并且还能动态更改日志级别。

3、SpringBoot Admin 功能

常见的功能如下:

  • 显示健康状况
  • 显示详细信息,例如
    • JVM和内存指标
    • micrometer.io指标
    • 数据源指标
    • 缓存指标
  • 显示构建信息编号
  • 关注并下载日志文件
  • 查看jvm系统和环境属性
  • 查看Spring Boot配置属性
  • 支持Spring Cloud的postable / env-和/ refresh-endpoint
  • 轻松的日志级管理
  • 与JMX-beans交互
  • 查看线程转储
  • 查看http跟踪
  • 查看auditevents
  • 查看http-endpoints
  • 查看计划任务
  • 查看和删除活动会话(使用spring-session)
  • 查看Flyway / Liquibase数据库迁移
  • 下载heapdump
  • 状态变更通知(通过电子邮件,Slack,Hipchat,......)
  • 状态更改的事件日志(非持久性)

二、Kubernetes 部署 SpringBoot Admin 需要的环境

1、注册中心

由于这里使用 SpringBoot Admin 用于监控 SpringCloud 下的微服务,故而需要一个注册中心。现在生产环境下使用最多的还是 Eureka,所以我们需要提前部署 Eureka 注册中心,并且现在是 Kubernets 环境,如何在 Kubernetes 部署 Eureka 注册中心,在之前博博客中已经写过,这里不过多描述,本人这里已经存在的环境如下:

2、配置中心

在 SpringCloud 微服务框架中,我们需要一个配置中心来管理整个微服务的配置,并且实现动态刷新配置。

我们常用的做法是部署 SpringCloud Config 组件,但是由于 SpringCloud Config 需要将配置存放于 Git 或者 SVN 中,这两种存储仓库都会有不可读取或者读取超时问题,动态通知可能还需要部署一个消息队列动来充当消息总线,还要保证队列的稳定性从而不影响全部服务的可用性,故而比较麻烦和需要保证可用性,这里不太推荐。

由于 SpringCloud 各个组件和服务都是部署在 Kubernetes 环境下,而 Kubernetes 自己也有个配置管理的 ConfigMap。考虑到这点 SpringCloud 也有 SpringCloud Kubernetes Config项目,可以从 ConfigMap 动态读取配置信息,只要 Kubernetes 整个集群不宕机,那么配置就可以得到保障,这是目前比较推荐的组件。

关于如何使用 SpringCloud Kubernetes Config 完成动态配置,之前文章中也有写,需要了解的可以查看下。当然,如果你使用不是该组件,而是另一款比较流行的配置中心 Apollo 也是可以的。

使用 SpringCloud Kubernetes Config 配置中心非常简单,只需要:

  • (1)、SpringBoot 项目 Maven 引入 spring-cloud-starter-kubernetes-config 组件。
  • (2)、SpringBoot 项目 Maven 引入 spring-boot-starter-actuator 组件,并开启 management.endpoint.restart.enabled 选项。
  • (3)、将 SpringBoot 项目中的 Application.yml 配置内容存入 ConfigMap。
  • (4)、SpringBoot 项目中的 Bootstrap.yml 配置 spring-cloud-starter-kubernetes-config 的配置项,配置从 Kubernetes 的哪个 Namespace 下读取 ConfigMap 对象信息。

(1)、Maven 引入对应依赖

 1<!--Actuator-->
 2<dependency>
 3  	<groupId>org.springframework.boot</groupId>
 4  	<artifactId>spring-boot-starter-actuator</artifactId>
 5</dependency>
 6<!--springcloud kubernetes config-->
 7<dependency>
 8    <groupId>org.springframework.cloud</groupId>
 9    <artifactId>spring-cloud-starter-kubernetes-config</artifactId>
10</dependency>

(2)、将 application.yml 内容写入 Kubernetes 的 ConfigMap 中,然后部署到 Kubernetes

 1kind: ConfigMap
 2apiVersion: v1
 3metadata:
 4  name: springcloud-zuul-config
 5data:
 6  application.yaml: |-
 7    eureka:
 8      client:
 9        service-url:
10          defaultZone: http://127.0.0.1:30002/eureka/    

(3)、Bootstrap 中配置 spring-cloud-starter-kubernetes-config 和 Actuator 的配置项,用于加载 ConfigMap 中的配置和开启 Actuator 的 Restart 功能

 1#Actuator Config
 2management:
 3  server:
 4    port: 8081
 5  endpoint:
 6    restart:
 7      enabled: true
 8#Read ConfigMap Config
 9server:
10  port: 8080
11spring:
12  application:
13    name: springcloud-zuul-demo
14  cloud:
15    kubernetes:
16      reload:
17        enabled: true
18        mode: polling
19        period: 5000
20        strategy: refresh
21        monitoring-secrets: true
22      config:
23        enabled: true
24        enableApi: true
25        sources:
26          - namespace: mydlqcloud
27