Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Short lived kubernetes container (/sidekick) in a pod (in a Replication Controller)

I have a ReplicationController containing two containers in a pod, the first is a long-living pod, the second does a few maintenance tasks when the RC starts up a POD. However as the second container is short lived, it stops itself when it finishes its start tasks. When Kuberbetes notices this, it kills off the POD and starts a new one...

What is the correct way to handle this in Kuberbetes?

like image 340
Michael Lloyd Lee mlk Avatar asked May 16 '16 14:05

Michael Lloyd Lee mlk


People also ask

What is true about replication controller in Kubernetes?

A ReplicationController manages all the pods with labels that match the selector. It does not distinguish between pods that it created or deleted and pods that another person or process created or deleted. This allows the ReplicationController to be replaced without affecting the running pods. If specified, the .

How many containers a pod can run in Kubernetes?

No more than 300000 total containers.

What are the possible states of a pod replica in Kubernetes?

There are three possible container states: Waiting , Running , and Terminated .

What is the difference between POD and container?

Pod is just a co-located group of container and an Kubernetes object. Instead of deploying them separate you can do deploy a pod of containers . Best practices is that you should not actually run multiple processes via single container and here is the place where pod idea comes to a place.


1 Answers

As you already noticed, by design all containers in a pod are destined to live and die together. It's a bit hard to tell what your best alternative would be without knowing what kind of maintenance task your sidekick needs to perform exactly. Generally speaking, I can think of three approaches:

  1. Keep your maintenance container running. This is probably a fairly ugly solution as it wastes resources. It really only makes sense if the maintenance task can benefit from running periodically.

  2. Move the maintenance task over to your primary container, effectively converting your multi-container pod into a single-container one. I assume that you can run the task asynchronously (as you would already be able to run it in a separate container); if, for some reasons, you cannot, consider modifying readiness and liveness probes accordingly so that your container is given enough time to finish any boot-up procedures before becoming eligible for termination.

  3. Consider adjusting your design so that the maintenance task may run as a separate pod (or maybe even as a job). You'd then need to manage any dependencies and wiring yourself by putting together Kubernetes primitives properly.

like image 119
Timo Reimann Avatar answered Sep 27 '22 21:09

Timo Reimann