1

我们已经配置了一个 kubernetes 集群,我们在其中使用 spring boot 部署各种服务,并且我们有一个服务是 Spring Cloud Config Server。

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

我们想知道是否有一种方法可以以不会使集群过载的方式初始化所有服务,或者让它们有节奏地等待配置服务器启动。到目前为止,所有服务都启动了,我们必须等待大约 20 分钟,直到集群运行完毕。

提前致谢

4

2 回答 2

2

您可以使用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 或任何最适合你的东西。

于 2019-03-18T17:05:35.333 回答
1

他们有不同的选择来做同样的事情。选择最适合您的一种:

  1. 您也可以尝试将 liveliness probe 或 readiness probe 应用到配置服务器。这样,所有容器都可以等待配置服务器启动并运行,然后尝试与配置服务器连接。
  2. 您可以使用 consul 服务作为 3 或 5 个服务的法定人数运行,并设计客户端连接到 consul 并等待配置服务器启动并运行。
  3. 您可以编写一个启动脚本将触发与配置服务器的连接建立并发布它可以启动容器。
于 2019-03-18T17:55:04.577 回答