如何在启动时将 kubernetes pod 实例 id 传递到 pod 内?
How to pass kubernetes pod instance id to within the pod upon start up?
所以我正在研究如何为我的案例使用 Kubernetes。我安装玩了一下
问题是当复制控制器启动几个副本时,它们的名称中有类似 id 的东西:
- 这个 ID 有多独特?它是 kubernetes 生命周期的唯一性吗?它在不同的 kubernetes 运行中是否是唯一的(即如果我重新启动 kubernetes)?
- 如何将这个id传递给容器中的app?我可以在 yaml 中指定某种模板,例如将 id 分配给环境变量或类似的东西吗?
- 或者,容器中的应用程序是否可以请求此 ID?
用例的更多解释。我有一个在目录中写入一些会话文件的应用程序。我想保证系统中会话 ID 的唯一性。这意味着如果一个应用程序实例在 VM1 上是 运行 而在 VM2 上是另一个实例,我想在 id 前添加某种标识符,例如 app-1-dajk4l 和 app-2-dajk4l,其中 app 是名称app 和 1, 2 是实例标识符,它应该来自复制控制器,因为它是动态的,不能手动配置。 dajk4l 是一些标识符,例如当前时间戳或类似的。
谢谢。
ID 保证在任何一个时间点都是唯一的,因为 Kubernetes 不允许同一命名空间中的两个 pods 具有相同的名称。但是没有任何长期保证,因为它们只是 generated as a random string of 5 alphanumeric characters。然而,鉴于有超过 6000 万个这样的随机字符串,在大多数环境中也不太可能出现跨时间冲突。
是的,您可以使用所谓的 "Downward API" 引入 pod 的命名空间和名称作为环境变量,在容器上添加一个字段,例如
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
所以我正在研究如何为我的案例使用 Kubernetes。我安装玩了一下
问题是当复制控制器启动几个副本时,它们的名称中有类似 id 的东西:
- 这个 ID 有多独特?它是 kubernetes 生命周期的唯一性吗?它在不同的 kubernetes 运行中是否是唯一的(即如果我重新启动 kubernetes)?
- 如何将这个id传递给容器中的app?我可以在 yaml 中指定某种模板,例如将 id 分配给环境变量或类似的东西吗?
- 或者,容器中的应用程序是否可以请求此 ID?
用例的更多解释。我有一个在目录中写入一些会话文件的应用程序。我想保证系统中会话 ID 的唯一性。这意味着如果一个应用程序实例在 VM1 上是 运行 而在 VM2 上是另一个实例,我想在 id 前添加某种标识符,例如 app-1-dajk4l 和 app-2-dajk4l,其中 app 是名称app 和 1, 2 是实例标识符,它应该来自复制控制器,因为它是动态的,不能手动配置。 dajk4l 是一些标识符,例如当前时间戳或类似的。
谢谢。
ID 保证在任何一个时间点都是唯一的,因为 Kubernetes 不允许同一命名空间中的两个 pods 具有相同的名称。但是没有任何长期保证,因为它们只是 generated as a random string of 5 alphanumeric characters。然而,鉴于有超过 6000 万个这样的随机字符串,在大多数环境中也不太可能出现跨时间冲突。
是的,您可以使用所谓的 "Downward API" 引入 pod 的命名空间和名称作为环境变量,在容器上添加一个字段,例如
env: - name: MY_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name