如何在启动时将kubernetes pod实例ID传递到pod中?

时间:2015-08-29 16:21:53

标签: kubernetes

所以我正在研究如何在我的案例中使用Kubernetes。我安装了它并玩了一下。

问题是,当复制控制器启动几个副本时,它们的名称中会出现类似id的内容:

  1. 这个身份有多独特?它是kubernetes一生的独特之处吗?它是否在不同的kubernetes运行中是唯一的(即如果我重新启动kubernetes)?
  2. 如何将此ID传递给容器中的应用程序?我可以在yaml中指定某种模板,例如将id分配给环境变量或类似的东西吗?
  3. 或者,容器中的应用程序是否有办法要求此ID?
  4. 用例的更多解释。我有一个应用程序在目录中写入一些会话文件。我想保证系统中会话ID的唯一性。这意味着如果一个应用程序实例在VM1上运行,另一个实例在VM2上运行,我想在app之前添加某种标识符,如app-1-dajk4l和app-2-dajk4l,其中app是应用程序的名称和1 ,2是实例标识符,它应该来自复制控制器,因为它是动态的,不能手动配置。 dajk4l是一些标识符,如当前时间戳或类似标识符。

    感谢。

1 个答案:

答案 0 :(得分:12)

  1. 由于Kubernetes不允许同一名称空间中的两个pod具有相同的名称,因此保证ID在任何单个时间点都是唯一的。但是,没有任何长期保证,因为他们只是generated as a random string of 5 alphanumeric characters。但是,鉴于有超过6千万个这样的随机字符串,在大多数环境中,不太可能发生时间冲突。

  2. 是的,你可以使用名为"Downward API"的名称拉入pod的命名空间并命名为环境变量,在容器上添加一个字段 env: - name: MY_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name