1 minute read

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>
Back to Top ↑