Is it possible to take pods directly offline in kubernetes loadbalancer

2/6/2020

I have an app running on three pods behind a loadbalancer, all set up with Kubernetes. My problem is that when I take pods down or update them, this results in a couple of 503s before the loadbalancer notices the pod is unavailable and stops sending traffic to it. Is there any way to inform the loadbalancer directly that it should stop sending traffic to a pod? So we can avoid the 503s on pod update

-- Peter Lind
kubernetes
load-balancing

4 Answers

2/6/2020

You should implement probes for pods. Read Configure Liveness, Readiness and Startup Probes.

-- mtkachenko
Source: StackOverflow

2/6/2020

There are readinessProbe and LivenessProbes which you can make use of. In your case I think you can make use of readinessProbe, only when your readinessProbe will pass, kubernetes will start sending traffic to your Pod.

For example

apiVersion: v1
Kind: Pod
metadata:
 name: my-nginx-pod
spec:
 containers: 
 - name: my-web-server
   image: nginx
   readinessProbe:
    httpGet:
     path: /login
     port: 3000

in this above example, the nginx Pod will only receive traffic in case it passed the readinessProbe.

You can find more about probes here https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

-- opensource-developer
Source: StackOverflow

2/6/2020

Since there are 3 pods running behind a Load balancer, I believe you must be using Deployment/Statefulset to manage them.

If by updating the pods you mean updating docker image version running in the pod then you can make use of Update strategies in Deployment to do rolling update. This will update your pods with zero downtime.

Additionally you can also make use of startup, readiness and liveness probe to only direct traffic to the pod when the pod is ready/live to serve traffic.

-- shashank tyagi
Source: StackOverflow

2/6/2020

You need to keep in mind if the pods are down the loadbalancer will still be redirecting the traffic to the designated service ports, and as no pod is servicing those ports.

Hence you should use rolling update mechanism in kubernetes which gives zero down time to the deployment. link

-- Dhananjay Gupta
Source: StackOverflow