Exposes metadata about the Pod itself to containers running inside it.
Two mechanisms: env vars (fieldRef, resourceFieldRef) and files via downwardAPI volume.
Pod fields as environment variables
env:
- name: MY_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: MY_POD_SERVICE_ACCOUNT
valueFrom:
fieldRef:
fieldPath: spec.serviceAccountName
Container resource fields as env vars
containerName defaults to current container in env context: can be omitted.
resources:
requests:
memory: "32Mi"
cpu: "125m"
limits:
memory: "64Mi"
cpu: "250m"
env:
- name: MY_CPU_REQUEST
valueFrom:
resourceFieldRef:
resource: requests.cpu
- name: MY_MEM_LIMIT
valueFrom:
resourceFieldRef:
resource: limits.memory
downwardAPI volume
spec:
containers:
- name: processing-engine
image: alpine
resources:
limits:
memory: "128Mi"
volumeMounts:
- name: budget-volume
mountPath: /etc/podinfo
volumes:
- name: budget-volume
downwardAPI:
items:
- path: "labels"
fieldRef:
fieldPath: metadata.labels
- path: "mem_limit"
resourceFieldRef:
containerName: processing-engine # REQUIRED in volume context
resource: limits.memory
containerName: optional vs required
| Where | containerName |
|---|---|
containers[].env[].valueFrom.resourceFieldRef | Optional (defaults to same container) |
volumes[].downwardAPI.items[].resourceFieldRef | Required (volume is Pod-scoped) |
Exam gotchas
fieldRef.fieldPathuses API paths:metadata.name,spec.nodeName,status.podIPresourceFieldRefin env:containerNameoptional for same containerresourceFieldRefin downwardAPI volume:containerNamealways required- Each item needs
path+fieldRef(orresourceFieldRef)