Automatic scaling of pods or containers

3/24/2020

Can anyone tell me if it is possible to scale either the number of containers in a pod or the number of pods (containing only 1 container)?

I want to have a setup where ideally 0 instances are running. Then whenever a user arrive at a page it should add another pod/container-instance, so that each user has their own environment. When the user leaves the specific environment should be terminated. Is this possible to set for any n-users. E.g. to have a limit of 5 users per pod/container. First person that joins means creating a new pod/container. The second just arrives at the same p/c and so on to the fifth. If a sixth user joins I want it to create a new pod/container for this user. A pod/container should be terminated if it has 0 connections.

I have read that if a container within a pod gets terminated - then all the containers of the same kind also gets terminated, which I want to avoid in case other users are connected to one of these containers.

Being fairly new within this docker / kubernetes stuff (using minikube as a test right now), I hope you can point me in the right direction. Thanks!

-- mfindinge
docker
kubernetes

1 Answer

3/26/2020

As I mentioned in comments you should check Horizontal Pod Autoscaler and Cluster Autoscaler.

Horizontal Pod Autoscaler can upscale or downscale number of your pods depends on metrics. If you want use CPU or Memory metrics, they are built-in in Kubernetes. Information how to use is well described in Horizontal Pod Autoscaler Walkthrough.

When you will use HPA example from docs, please keep in mind, HPA need a few minutes to gather metrics and then display it.

If you would use other metrics (those like you mentioned in question) you should use custom metrics or external metrics, depends on your needs. To get those metrics you will need to deploy metrics agents who will gather this data. One of the most popular is Prometheus adapter. I've already mentioned about this when use kubeadm or minikube here.

If you want to autoscale nodes, you should read about Cluster Autoscaler. As CA need to add/remove node at any time it's recommended to use Cloud environment.

For AWS you can check this article and if you would use GKE you should check this article.

-- PjoterS
Source: StackOverflow