I am trying to learn Kubernetes. I was going through a link but not able to understand one thing.
Mentioned in the doc:
Notice that the second container writes the index.html file in the root directory of the nginx server.
How is this HTML file created in the root directory of the Nginx server? As we are executing this command in the different container i.e. debian-container.
CodePudding user response:
In the example from the link you posted you have:
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"]
You have two containers which share a volume, named shared-data. Each container decides where does it want to mount the volume:
nginx-containeris mounting it to/usr/share/nginx/html(also known as Nginx's default root directory)debian-containeris mounting it to/pod-data.
Since shared volume is like a shared directory on a computer or in a cloud, everything present in the volume is available in both containers under the mountPath path.
In the example, the debian-container writes index.html file to a shared space, which can then be used by nginx-container.
This is a well-known pattern in Kubernetes, called Sidecar Container Pattern. In this case debian-container is a sidecar container. It extends and enhances the functionality of main container (nginx-container) - provides index.html file in this simple example.
Resources:
