Kubernetes Expose Pod Information to Containers using ENV Variables
Expose Pod Information to Containers Through Environment Variables
We can pass values to environment variables using fieldRef
and fieldPath
. The fieldPath
will be taking the JsonPath as input.
pradeep@learnk8s$ cat podinfo-as-env.yaml
apiVersion: v1
kind: Pod
metadata:
name: fieldref-demo
spec:
containers:
- name: field-ref-container
image: k8s.gcr.io/busybox
command: [ "sh", "-c"]
args:
- while true; do
echo -en '\n';
printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE;
printenv MY_POD_IP MY_POD_SERVICE_ACCOUNT;
sleep 10;
done;
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
restartPolicy: Never
pradeep@learnk8s$ kubectl create -f podinfo-as-env.yaml
pod/fieldref-demo created
pradeep@learnk8s$ kubectl get pods
NAME READY STATUS RESTARTS AGE
fieldref-demo 1/1 Running 0 28s
pradeep@learnk8s$ kubectl describe pods fieldref-demo
Name: fieldref-demo
Namespace: default
Priority: 0
Node: minikube-m02/192.168.177.32
Start Time: Mon, 04 Apr 2022 22:04:26 +0530
Labels: <none>
Annotations: cni.projectcalico.org/containerID: f352909e972ad7f4dc859d602bd0901983d2dbc426ae938f96042c4e8ad5c34d
cni.projectcalico.org/podIP: 10.244.205.195/32
cni.projectcalico.org/podIPs: 10.244.205.195/32
Status: Running
IP: 10.244.205.195
IPs:
IP: 10.244.205.195
Containers:
field-ref-container:
Container ID: docker://33e3b8f8659bbb967be95a731f5593a9ea4339e49e1fa70a7d977c1f26582e73
Image: k8s.gcr.io/busybox
Image ID: docker-pullable://k8s.gcr.io/busybox@sha256:d8d3bc2c183ed2f9f10e7258f84971202325ee6011ba137112e01e30f206de67
Port: <none>
Host Port: <none>
Command:
sh
-c
Args:
while true; do echo -en '\n'; printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE; printenv MY_POD_IP MY_POD_SERVICE_ACCOUNT; sleep 10; done;
State: Running
Started: Mon, 04 Apr 2022 22:04:52 +0530
Ready: True
Restart Count: 0
Environment:
MY_NODE_NAME: (v1:spec.nodeName)
MY_POD_NAME: fieldref-demo (v1:metadata.name)
MY_POD_NAMESPACE: default (v1:metadata.namespace)
MY_POD_IP: (v1:status.podIP)
MY_POD_SERVICE_ACCOUNT: (v1:spec.serviceAccountName)
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-ff6cw (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
kube-api-access-ff6cw:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 34s default-scheduler Successfully assigned default/fieldref-demo to minikube-m02
Normal Pulling 31s kubelet Pulling image "k8s.gcr.io/busybox"
Normal Pulled 9s kubelet Successfully pulled image "k8s.gcr.io/busybox" in 22.262573897s
Normal Created 9s kubelet Created container field-ref-container
Normal Started 9s kubelet Started container field-ref-container
pradeep@learnk8s$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
fieldref-demo 1/1 Running 0 4m54s 10.244.205.195 minikube-m02 <none> <none>
pradeep@learnk8s$ kubectl logs fieldref-demo
minikube-m02
fieldref-demo
default
10.244.205.195
default
minikube-m02
fieldref-demo
default
10.244.205.195
default
minikube-m02
fieldref-demo
default
10.244.205.195
default
minikube-m02
fieldref-demo
default
10.244.205.195
default
<output_omitted>