Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Programmatically get the name of the pod that a container belongs to in Kubernetes?

Is there a way to programmatically get the name of the pod that a container belongs to in Kubernetes? If so how? I'm using fabric8's java client but curl or something similar will be fine as well.

Note that I don't want to find the pod using a specific label since then (I assume) I may not always find the right pod if it's scaled with a replication controller.

like image 407
Johan Avatar asked May 16 '16 11:05

Johan


People also ask

How do you get the logs of a specific container of a specific pod?

If you run kubectl logs pod_name , a list of containers in the pod is displayed. You can use one of the container names to get the logs for that specific container.


2 Answers

You can tell Kubernetes to put the pod name in an environment variable of your choice using the downward API.

For example:

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: gcr.io/google_containers/busybox
      command: [ "/bin/sh", "-c", "env" ]
      env:
        - 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
  restartPolicy: Never
like image 120
Alex Robinson Avatar answered Sep 24 '22 07:09

Alex Robinson


The pod name is written to /etc/hostname so it's possible to read it from there. In Java (which I'm using) you can also get the hostname (and thus the name of the pod) by calling System.getenv("HOSTNAME").

like image 27
Johan Avatar answered Sep 22 '22 07:09

Johan