Today, I faced a requirement where a running container need to access Pod’s metadata. For my usecase, the running container need to know the namespace it belonged to. After spending time on Google, I learnt about Kubernetes Downward API that exposes Pod information to running container in the form of environment variables.
Let’s create a pod using following manifest file
pod.yaml shown below.
apiVersion: v1 kind: Pod metadata: name: myapp spec: containers: - name: myapp image: busybox command: ["sleep","100000"] env: - name: MY_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: MY_POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace
In the code snippet shown above, we defined two environment variables
MY_POD_NAMESPACE. The values for the environment variables comes from the
metadata fields. In the above pod definition, note that we are running
sleep command to ensure that container does not exit.
You can create the pod by running the following command.
kubectl create -f pod.yaml
Once pod is created you can run the
kubectl exec command to see all the environment variables available to the container.
kubectl exec myapp env|grep MY
Apart from Pod’s name and namespace, you can also access Pod’s IP address, node name, any many other as mentioned in the documentation.