Multi Container Pods In Kubernetes
Shared Network Namespace
All the containers in the pod share the same network namespace, therefore all containers can communicate with each other on the localhost. For instance, We have two containers in the same pod listening on ports 8080 and 8081 respectively. Container 1 can talk to container 2 on localhost:8080.
Shared Storage Volumes
All the containers can have the same volume mounted so that they can communicate with each other by reading and modifying files in the storage volume.
Shared Process Namespace
Another way for the containers to communicate is with the Shared Process Namespace. With this, the containers inside the pod can signal each other. For this to be enabled, we need to have this setting _shareProcessNamespace _ to true in the pod spec.
Defining a multi-container pod:
vim multiplepod.yml
apiVersion: v1
kind: Pod
metadata:
name: myfirstpod
labels:
label1: harshal
label2: gaurav
label3: saurav
spec:
containers:
- name: firstcontainer
image: coolgourav147/nginx-custom
env:
- name: myname
value: Gaurav
- name: city
value: Jaipur
args: ["sleep", "3600"]
- name: secondcontainer
image: coolgourav147/nginx-custom
How To Deploy A Multi Container Pod:
To deploy a multi-container command we use the kubectl command given below:
kubectl apply -f multiple-pod.yml
Why Use Multi Container Pods
Well there are many good reasons why to use them rather than not to use them; here are some of them:
- The primary purpose of a multi-container Pod is to support co-located, co-managed helper processes for a primary application.
- With the same network namespace, shared volumes, and the same IPC namespace it is possible for these containers to efficiently communicate, ensuring data locality.
- They enable you to manage several tightly coupled application containers as a single unit.
- Another reason is that all containers have the same lifecycle which should run on the same node.