Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Kubernetes deployment name from within a pod?

How can I to source the Kubernetes deployment/job name that spawned the current pod from within the pod?

like image 312
Evgeny Minkevich Avatar asked Feb 16 '17 12:02

Evgeny Minkevich


People also ask

How do you get the pod deployment name?

You will want to you use the Downward API which allows you to expose metadata as environment variables and/or files on a volume. The name and namespace of a Pod can be exposed as environment variables (fields: metadata.name and metadata.


1 Answers

In many cases the hostname of the Pod equals to the name of the Pod (you can access that by the HOSTNAME environment variable). However that's not a reliable method of determining the Pod's identity.

You will want to you use the Downward API which allows you to expose metadata as environment variables and/or files on a volume.

The name and namespace of a Pod can be exposed as environment variables (fields: metadata.name and metadata.namespace) but the information about the creator of a Pod (which is the annotation kubernetes.io/created-by) can only be exposed as a file.

Example:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: busybox
  labels: {app: busybox}
spec:
  selector: {matchLabels: {app: busybox}}
  template:
    metadata: {labels: {app: busybox}}
    spec:
      containers:
      - name: busybox
        image: busybox
        command:
        - "sh"
        - "-c"
        - |
          echo "I am $MY_POD_NAME in the namespace $MY_POD_NAMESPACE"
          echo
          grep ".*" /etc/podinfo/*
          while :; do sleep 3600; done
        env:
        - name: MY_POD_NAME
          valueFrom: {fieldRef: {fieldPath: metadata.name}}
        - name: MY_POD_NAMESPACE
          valueFrom: {fieldRef: {fieldPath: metadata.namespace}}
        volumeMounts:
        - name: podinfo
          mountPath: /etc/podinfo/
      volumes:
        - name: podinfo
          downwardAPI:
            items:
              - path: "labels"
                fieldRef: {fieldPath: metadata.labels}
              - path: "annotations"
                fieldRef: {fieldPath: metadata.annotations}

Too see the output:

$ kubectl logs `kubectl get pod -l app=busybox -o name | cut -d / -f2`

Output:

I am busybox-1704453464-m1b9h in the namespace default

/etc/podinfo/annotations:kubernetes.io/config.seen="2017-02-16T16:46:57.831347234Z"
/etc/podinfo/annotations:kubernetes.io/config.source="api"
/etc/podinfo/annotations:kubernetes.io/created-by="{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"default\",\"name\":\"busybox-1704453464\",\"uid\":\"87b86370-f467-11e6-8d47-525400247352\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"191157\"}}\n"
/etc/podinfo/annotations:kubernetes.io/limit-ranger="LimitRanger plugin set: cpu request for container busybox"
/etc/podinfo/labels:app="busybox"
/etc/podinfo/labels:pod-template-hash="1704453464"
like image 55
Janos Lenart Avatar answered Oct 18 '22 16:10

Janos Lenart