使用 Config Server 干净部署 Spring 启动微服务

Clean deploy of Spring boot microservices with Config Server

我们已经配置了一个 kubernetes 集群,我们使用 spring 引导部署了各种服务,我们有一个服务是 Spring 云配置服务器。

我们的问题是,当我们启动集群时,所有服务都尝试连接到配置服务器以下载配置,并且由于配置服务器尚未启动所有服务失败,导致 kubernetes 重试初始化和消耗大量资源导致配置服务器无法自行启动。

我们想知道是否有一种方法可以在不使集群过载的情况下初始化所有服务,或者让它们缓慢地等待配置服务器启动。截至目前,所有服务都已启动,我们必须等待大约 20 分钟,直到集群运行完毕。

提前致谢

您可以使用Init Containers ping 服务器直到它在线。一个例子是:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: web
  replicas: 1
  template:
    metadata:
      labels:
        app: web
    spec:
      initContainers:
      - name: wait-config-server
        image: busybox
        command: ["sh", "-c", "for i in $(seq 1 300); do nc -zvw1 config-server 8080 && exit 0 || sleep 3; done; exit 1"]
      containers:
      - name: web
        image: my-mage
        ports:
        - containerPort: 80
          ...

在此示例中,我使用 nc 命令对服务器执行 ping 命令,但您也可以使用 wget、curl 或任何最适合您的命令。

他们有多种选择可以做到这一点。选择最适合你的:

  1. 您也可以尝试将 liveliness probe 或 readiness probe 应用到 配置服务器。以这种方式,所有容器都可以等到 配置服务器已启动 运行 然后尝试连接 配置服务器。
  2. 您可以使用 consul 服务 运行 作为 3 或 5 个服务的法定人数, 并设计客户端连接到领事并等待 配置服务器已启动并且 运行.
  3. 你可以写一个启动脚本来触发连接 使用配置服务器和 post 建立它​​可以启动 容器。