How to use a Volume to communicate between two Containers running in the same Kubernetes-Pod?

+1 vote
How to establish communication between containers in the same Kubernetes-Pod Using a Shared Volume?
Jul 23 in Kubernetes by Karan
• 5,270 points
181 views

1 answer to this question.

+1 vote

Create a Pod that runs two Containers

Create a Pod that runs two Containers. The two containers share a Volume that they can use to communicate. Here is the configuration file for the Pod:

pods/two-container-pod.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: two-containers
spec:

  restartPolicy: Never

  volumes:
  - name: shared-data
    emptyDir: {}

  containers:

  - name: nginx-container
    image: nginx
    volumeMounts:
    - name: shared-data
      mountPath: /usr/share/nginx/html

  - name: debian-container
    image: debian
    volumeMounts:
    - name: shared-data
      mountPath: /pod-data
    command: ["/bin/sh"]
    args: ["-c", "echo Hello from the debian container > /pod-data/index.html"]
  • In the configuration file, you can see that the Pod has a Volume named shared-data.

  • The first container listed in the configuration file runs an nginx server. 

  • The mount path for the shared Volume is /usr/share/nginx/html

  • The second container is based on the debian image, and has a mount path of /pod-data

  • The second container runs the following command and then terminates.

echo Hello from the debian container > /pod-data/index.html
  • Notice that the second container writes the index.html file in the root directory of the nginx server.

  • Create the Pod and the two Containers:

kubectl apply -f https://k8s.io/examples/pods/two-container-pod.yaml
  • View information about the Pod and the Containers:

kubectl get pod two-containers --output=yaml
  • Here is a portion of the output:

apiVersion: v1
kind: Pod
metadata:
  ...
  name: two-containers
  namespace: default
  ...
spec:
  ...
  containerStatuses:

  - containerID: docker://c1d8abd1 ...
    image: debian
    ...
    lastState:
      terminated:
        ...
    name: debian-container
    ...

  - containerID: docker://96c1ff2c5bb ...
    image: nginx
    ...
    name: nginx-container
    ...
    state:
      running:
    ...
  • You can see that the debian Container has terminated, and the nginx Container is still running.

  • Get a shell to nginx Container:

kubectl exec -it two-containers -c nginx-container -- /bin/bash
  • In your shell, verify that nginx is running:

root@two-containers:/# apt-get update
root@two-containers:/# apt-get install curl procps
root@two-containers:/# ps aux
  • The output is similar to this:

USER       PID  ...  STAT START   TIME COMMAND
root         1  ...  Ss   21:12   0:00 nginx: master process nginx -g daemon off;
  • Recall that the debian Container created the index.html file in the nginx root directory. Use curl to send a GET request to the nginx server:

root@two-containers:/# curl localhost
  • The output shows that nginx serves a web page written by the debian container:

Hello from the debian container

The Volume in this example provides a way for Containers to communicate during the life of the Pod. If the Pod is deleted and recreated, any data stored in the shared Volume is lost.

answered Jul 23 by Sirajul
• 36,620 points

Related Questions In Kubernetes

0 votes
1 answer

How to use gravitational teleport in a container/kubernetes environment?

You can use teleport to augment kubernetes ...READ MORE

answered Jun 28, 2018 in Kubernetes by ajs3033
• 7,280 points
392 views
0 votes
1 answer

How to configure a Pod to use the updated configMap?

If the config map is mounted into ...READ MORE

answered Jul 18 in Kubernetes by Sirajul
• 36,620 points
33 views
0 votes
1 answer

Configure a Kubernetes-pod to use persistent volume for storage.

The output shows that the PersistentVolume has ...READ MORE

answered Jul 23 in Kubernetes by Sirajul
• 36,620 points
322 views
0 votes
1 answer
0 votes
3 answers

Error while joining cluster with node

Hi Kalgi after following above steps it ...READ MORE

answered Jan 17 in Others by anonymous
2,966 views
+3 votes
1 answer
0 votes
1 answer

how can i access two containers that are inside a pod from the browser with IP address?

Just do port forward. kubectl port-forward [nginx-pod-name] 80:80 kubectl ...READ MORE

answered Jul 18 in Kubernetes by Sirajul
• 36,620 points
48 views