模板中公开的 kubernetes statefulsets 索引/序号

rid*_*tch 5 kubernetes kubectl

Statefulsets 指示 kubectl/kubernetes 创建 pod,其索引或序号跟在 pod 名称后面。例如,如果实体的名称为 redis,并且复制计数为 3,那么我们将得到 redis-0、redis-1 和 redis-2。有什么方法可以访问索引或序数吗?传递给容器的启动脚本将非常有用。如果能在downward api中使用就好了。当尝试将 PVC 与 PV 对齐时,使用它真是太好了。

是否可能存在一些秘密模板变量?

请注意,我已经找到了解决方法。我正在为我的命令使用脚本并使用主机名来提取它。但这似乎需要大量工作(以及未来的维护)。

Mik*_* S. 1

最终,这应该通过添加到清单环境来工作(我被告知从 1.9 开始,但尚未确认):

   - name: KAFKA_BROKER_ID
     valueFrom:
       fieldRef:
         fieldPath: metadata.annotations['spec.pod.beta.kubernetes.io/statefulset-index'] 
Run Code Online (Sandbox Code Playgroud)

现在,您可以像使用脚本或使用生命周期事件一样“破解”它,如下所示:

    lifecycle:
      postStart:
        exec:
          command:
            - "/bin/sh"
            - "-c"
            - "export KAFKA_BROKER_ID=${HOSTNAME##*-}"
Run Code Online (Sandbox Code Playgroud)

  • 如果必须在调用入口点之前设置环境变量,则没有正确的解决方法:https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/ *不能保证挂钩将在调用之前执行容器入口点* (2认同)