bobef
bobef

Reputation: 1020

How to pass kubernetes pod instance id to within the pod upon start up?

So I'm researching how to use Kubernetes for my case. I installed it and played a bit.

The question is when the replication controller starts couple of replicas they have something like an id in their name:

  1. How unique is this id? Is it uniqueness for the lifetime of kubernetes? Is it unique across different kubernetes runs (i.e. if I restart kubernetes)?
  2. How to pass this id to the app in the container? Can I specify some kind of template in the yaml so for example the id will be assigned to environment variable or something similar?
  3. Alternatively is there a way for the app in the container to ask for this id?

More explanation of the use case. I have an application that writes some session files inside a directory. I want to guarantee unique for the session ids in the system. This means if one app instance is running on VM1 and another instance on VM2, I want to prepend some kind of identifier to the ids like app-1-dajk4l and app-2-dajk4l, where app is the name of the app and 1, 2 is the instance identifier, which should come from the replication controller because it is dynamic and can not be configured manually. dajk4l is some identifier like the current timestamp or similar.

Thanks.

Upvotes: 11

Views: 13709

Answers (1)

Alex Robinson
Alex Robinson

Reputation: 13377

  1. The ID is guaranteed to be unique at any single point in time, since Kubernetes doesn't allow two pods in the same namespace to have the same name. There aren't any longer-term guarantees though, since they're just generated as a random string of 5 alphanumeric characters. However, given that there are more than 60 million such random strings, conflicts across time are also unlikely in most environments.

  2. Yes, you can pull in the pod's namespace and name as environment variables using what's called the "Downward API", adding a field on the container like env: - name: MY_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name

Upvotes: 20

Related Questions