Reputation: 329
How to Get a container’s full id from inside of itself in Kubernetes. I want to add container id in my application log which is running as Kubernetes container
Upvotes: 16
Views: 13838
Reputation: 1076
Similar answer to @damitj07, but seems like you can get the UID of a pod in raw form like so:
apiVersion: v1
kind: Pod
metadata:
name: myname
spec:
containers:
- name: mycontainer
...
env:
- name: K8S_POD_UID
valueFrom:
fieldRef:
fieldPath: metadata.uid
...
Injectable fields can be found here
Upvotes: 0
Reputation: 2899
There are two ways to expose Pod and Container fields to a running Container:
- Environment variables
- Volume Files
Together, these two ways of exposing Pod and Container fields are called the Downward API.
So, simply using environment variables you can inject any metadata of a pod into the running container.
Post Comment Update - As per the kubernetes documentation each name has a UID that is appended to the name of the resource, for example, a pod or container which will provide with for a way to get a unique ID to be used for logging.
metadata.name = myimage + unique id
note* -the only caveat here is the fact that UID changes on each upgrade so It would be better to assign a unique ID from your side to identify the container or pod in combination with K8 UID.
Here's an example of YAML.
apiVersion: v1
kind: Pod
metadata:
name: dapi-envars-fieldref
spec:
containers:
- name: test-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_POD_ID // <--- here you inject env into container
valueFrom:
fieldRef:
fieldPath: metadata.name // <--- set value of the env var to pod name
- name: MY_POD_SERVICE_ACCOUNT
valueFrom:
fieldRef:
fieldPath: spec.serviceAccountName
restartPolicy: Never
Upvotes: 9
Reputation: 4586
The HOSTNAME
environment variable is readily available in any container running on Kubernetes and gives the unique name of the pod in which the container is running. Use the means provided by the logging framework to acccesss the environment variable and make it part of the logging pattern, or to programatically add its value to log entries.
That should do for application logging purposes assuming there is only one application container in the pod (which is regarded as a best practice anyway).
Upvotes: 15