Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

kubernetes

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.

like image 679
bobef Avatar asked Aug 29 '15 16:08

bobef


People also ask

How to terminate all pods at once in Kubernetes?

Run the kubectl scale command below to terminate all the pods one by one as you defined 0 replicas ( --replicas=0 ). 6. Run the kubectl get pods command to verify the numbers of pods. Notice below that all the pods are currently terminating.

What is Kubernetes pod-managed identity?

Privacy policy. Thank you. Azure Active Directory (Azure AD) pod-managed identities use Kubernetes primitives to associate managed identities for Azure resources and identities in Azure AD with pods.

How to update Kubernetes deployment using kubectl?

Run the kubectl set env command below to update the deployment by setting the DATE environment variable in the pod with a null value ( =$ () ). As soon as you update the deployment, the pods will restart. 2. Now execute the below command to verify the pods that are running.

What happens when you scale down a Kubernetes deployment?

Scaling your Deployment down to 0 will remove all your existing Pods. Wait until the Pods have been terminated, using kubectl get pods to check their status, then rescale the Deployment back to your intended replica count. Kubernetes will create new Pods with fresh container instances.


1 Answers

  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

like image 69
Alex Robinson Avatar answered Sep 16 '22 14:09

Alex Robinson