如何从kubernetes部署中的卷读取arg?

brccelvz  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(104)

我想创建一个statefulset,它运行一个创建设备的映像。我希望每个pod创建独特的设备,所以第一个将做1-20,第二个21-40等。图像接受一个标志,指示从哪个索引开始。我正在努力实现这一点,以便标志对于statefulset中的每个pod都是唯一的。
我尝试使用一个init容器,它在卷上创建一个文件,并将pod编号放在该文件上。这正如预期的那样起作用。我也可以从主容器访问这个文件。如何将此文件中的值作为容器的参数传递?我尝试在args部分直接访问它,并创建一个环境变量,但都不起作用。理想情况下,这样的东西会起作用,但不会:

env:
  - name: index 
    value: "cat ./pod/pod.toml"
args: ["--start-index","$(index)"]
7ivaypg9

7ivaypg91#

您可以通过downward api将pod名称公开为环境变量:

env:
  - name: PODNAME
    valueFrom:
      fieldRef:
        fieldPath: metadata.name

您可以使用此变量在shell脚本中计算索引,然后使用适当的参数启动服务:

command:
- sh
- -c
- |
  podnumber=$(echo $PODNAME | cut -f2 -d-)
  startindex=$(( podnumber * 20 + 1 ))
  exec myserver --start-index $index

Pod 0将运行--start-index 1,Pod 1将运行--start-index 21,依此类推。
请注意,这确实需要覆盖映像中的ENTRYPOINT(通过在清单中设置command),因为您需要在shell脚本中执行计算。这是简单还是复杂取决于您正在使用的图像,以及它是否具有广泛的现有ENTRYPOINT脚本。

相关问题