2 min read | by Jordi Prats
We can choose to expose some of the Pod's information as volumes or environment variables using DownwardAPIVolumeFile. It can expose both Pod fields and Container fields
We'll have to check the DownwardAPIVolumeFile documentation for which fields can be exposed.
At the time of this writing, for fieldRef we can only expose labels and annotations beside it's name and namespace:
Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.
An example pod with a downwardAPI Volume would look like as follows:
apiVersion: v1 kind: Pod metadata: name: test-podinfo labels: example-label: demo annotations: example-annotation: demo spec: containers: - name: client-container image: alpine command: ["sleep", "infinity"] volumeMounts: - name: podinfo mountPath: /etc/podinfo volumes: - name: podinfo downwardAPI: items: - path: "labels" fieldRef: fieldPath: metadata.labels - path: "annotations" fieldRef: fieldPath: metadata.annotations
If we apply this manifest we will be able to see that the Volume contains two files, one for annotations and another one for labels:
$ kubectl apply -f podinfo.yaml pod/test-podinfo created $ kubectl get pods NAME READY STATUS RESTARTS AGE sloop-0 1/1 Running 2 (32h ago) 43d test-podinfo 1/1 Running 0 13s $ kubectl exec -it test-podinfo -- ls /etc/podinfo annotations labels
On the labels file we will only have the labels we have defined:
$ kubectl exec -it test-podinfo -- cat /etc/podinfo/labels example-label="demo"
But for the annotations file we will also be able to see all the annotations that the Pod has (not just the ones we have defined):
$ kubectl exec -it test-podinfo -- cat /etc/podinfo/annotations example-annotation="demo" kubectl.kubernetes.io/last-applied-configuration="{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"annotations\":{\"example-annotation\":\"demo\"},\"labels\":{\"example-label\":\"demo\"},\"name\":\"test-podinfo\",\"namespace\":\"default\"},\"spec\":{\"containers\":[{\"command\":[\"sleep\",\"infinity\"],\"image\":\"alpine\",\"name\":\"client-container\",\"volumeMounts\":[{\"mountPath\":\"/etc/podinfo\",\"name\":\"podinfo\"}]}],\"volumes\":[{\"downwardAPI\":{\"items\":[{\"fieldRef\":{\"fieldPath\":\"metadata.labels\"},\"path\":\"labels\"},{\"fieldRef\":{\"fieldPath\":\"metadata.annotations\"},\"path\":\"annotations\"}]},\"name\":\"podinfo\"}]}}\n" kubernetes.io/config.seen="2022-01-04T21:04:45.076278440Z" kubernetes.io/config.source="api"
Posted on 05/01/2022