<p>I am using Spring Cloud for Creating Microservice Architecture.</p>

<p>I was using the below feature from the Spring Cloud</p>

<ul>
<li>Zuul –  API gateway service that provides dynamic routing, monitoring, resiliency, security, and more - </li>
<li>Ribbon – Client side load balancer</li>
<li>Feign – Declarative REST client</li>
<li>Eureka – Service registration and discovery</li>
<li>Sleuth – Distributed tracing via logs</li>
<li>Zipkin – Distributed tracing system with request visualization.</li>
<li>Hystrix - Circuit Breaker, Fault Tolerance, Hystrix Dashboard for all API </li>
</ul>

<p>Now Lets say if I have 100 microservices, then we need 100 servers to maintain each microservices. So I thought of using Kubernetes to solve this issue by  deploying each microservices in a separate docker container, so now since Kubernetes takes care of microserivice health check, autoscaling, load-balancing so do I need to again use Ribbon, Eureka and Zuul. </p>

<p>Can anyone please help me on this</p>

<p>Even when you use Spring Cloud, 100 services do NOT mean 100 servers. In Spring Cloud the packaging unit is Spring Boot application and a single server may host many such Spring Boot applications. If you want, you can containerize the Spring Boot applications and other Spring Cloud infrastructure support components. But that is not Kubernetes.</p>

<p>If you move to Kubernetes, you don't need the infrastructure support services like Zuul, Ribbon etc. because Kubernetes has its own components for service discovery, gateway, load balancer etc. In Kubernetes, the packaging unit is Docker images and one or more Docker containers can be put inside one pod which is the minimal scaling unit. So, Kubernetes has a different set of components to manage the Microservices.</p>

<p>Kubernetes is a different platform than Spring cloud. Both have the same objectives. However, Kubernetes has some additional features like self healing, auto-scaling, rolling updates, compute resource management, deployments etc.</p>
