springspring-bootkubernetesconfigserver

Clean deploy of Spring boot microservices with Config Server


We had configured a kubernetes cluster where we deploy various services using spring boot and we have one service that is Spring Cloud Config Server.

Our trouble is that when we start the cluster all the services try to connect to the config server to download the configuration, and since the Config Server has not yet started all the services fail, causing kubernetes to retry the initialization and consuming many resources so that config server it self can not start.

We are wondering if there is a way to initialize all services in such a way that do not over load the cluster or so that they pacefully wait until the config server starts. As of now, all services start and we have to wait for like 20 minutes until the cluster works its way out.

Thanks in advance


Solution

  • You can use Init Containers to ping for the server until it is online. An example would be:

    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
              ...
    

    In this example I am using an nc command for pinging the server but you can also use wget, curl or whatever is suited best for you.