Can a deployment resource have multiple containers?

9/6/2019

I am trying to deploy multiple pods in k8s like say MySQL, Mango, Redis etc

Can i create a single deployment resource for this and have multiple containers defined in template section? Is this allowed? If so, how will replication behave in this case?

Thanks Pavan

-- Pavan
kubectl
kubernetes

3 Answers

9/6/2019

It's common having multiple containers per Pod in order to share namespaces and volumes between them: take as example the Ambassador pattern that is used to present the application to outside adding a layer for the authentication, making it totally transparent to the main app.

Other examples using the sidecar pattern consist of log parsers or configurators that hot reload credentials without the main app to worry about it.

That's the theory, according to your needs you have to use one deployment per component, so a Deployment for your app, a StatefulSet for the DB and so on. Keep in mind to use a container per process and a Kubernetes resource per backing service.

-- prometherion
Source: StackOverflow

9/6/2019

A deployment can have multiple containers inside of it.

Generaly it's used to have one master container for the app and some sidecar container that are needed for the app. I don't have an example right now.

Still it's a best practice to split deployments for scalling purpose, your front may need to scale more than the back depending on cache and you may not want to have pods too big. For cahing purpose like redis it's better to have a cluster on the side as each time a pod start or stop, you will loose data.

-- night-gold
Source: StackOverflow

9/6/2019

I am trying to deploy multiple pods in k8s like say MySQL, Mango, Redis etc

From microservices architecture perspective it is actually quite a bad idea to place all those containers in a single Pod. Keep in mind that a Pod is a smallest deployable unit that can be created and managed by Kubernetes. There are quite many good reasons you don't want to have all above mentioned services in a single Pod. Difficulties in scaling such solution is just one of them.

Can i create a single deployment resource for this and have multiple containers defined in template section? Is this allowed? If so, how will replication behave in this case?

No, it is not allowed in Kubernetes. As to Deployments and StatefulSets, (which you need for statefull applications such as databases) both manage Pods that are based on identical container spec so it is not possible to have a Deployment or StatefulSet consisting of different types of Pods, based on different specs.

To sum up: Many Deployments and StatefulSets objects, serving for different purposes are the right solution.

-- mario
Source: StackOverflow