V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
liunaijie
V2EX  ›  问与答

k8s 使用 statefulset 如何在 pod 内获取序号并设置到环境变量里

  •  
  •   liunaijie · 2020-10-23 13:14:12 +08:00 · 3094 次点击
    这是一个创建于 1492 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,使用 statefulset,需要为每个 pod 中的配置文件配置不同的值,比如在 pod1 里面的值是 value1,pod2 里面的值是 value2 。 可以创建多个 configmap 来挂载,但是我想使用一个 configmap 然后使用动态替换的方式。

    所以想在 stateful-pod-0 中获取 0,然后将其设置为环境变量,在 stateful-pod-1 中获取 1 将其设置为环境变量。配置文件通过读取环境变量为其赋值。

            env:
              - name: REPLICA
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.name
              - name: SHARD
                value: $(REPLICA##*-) ## get the statefulset pod index, like stateful-0, get 0
    

    我也用其他方法尝试过,比如在启动到时候运行命令,但是这个时候 pod 就起不来了

            command: ["/bin/sh", "-c", "export SHARD=${HOSTNAME##*-}"]
    

    有没有大佬了解这种情况要怎么设置

    第 1 条附言  ·  2020-10-23 17:42:14 +08:00
    我最终是在 initContainer 里面用一个脚本,读取 hostname 即 statefulset 产生的 pod 全称,然后又截取序号。将他们写入到配置文件中,
    container 同样挂载这个路径,再指定下这个生成的配置文件路径。
    6 条回复    2020-10-23 17:54:11 +08:00
    acrisliu
        1
    acrisliu  
       2020-10-23 13:38:48 +08:00
    用 InitContainer 读取 HOSTNAME 再写入对应的配置文件?
    zhenjiachen
        2
    zhenjiachen  
       2020-10-23 15:37:52 +08:00
    同求,我也想知道,搜了一圈没有啥好的解决方案
    JeromeCui
        3
    JeromeCui  
       2020-10-23 15:54:59 +08:00
    有个环境变量:HOSTNAME=microservice-discovery-0,最后那个 0 就是序号
    你可以读这个变量的值或者是读文件 /etc/hostname
    1423
        4
    1423  
       2020-10-23 16:12:30 +08:00
    @JeromeCui 是这,我们也有这么用
    liunaijie
        5
    liunaijie  
    OP
       2020-10-23 17:39:48 +08:00
    @JeromeCui 是的,可以读到这个 hostname,但是要截取后面的序号,没法在 env 里面做转换
    zzzbkl
        6
    zzzbkl  
       2020-10-23 17:54:11 +08:00 via Android
    看看 k8s downward API 是不是你想要的?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2650 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:47 · PVG 10:47 · LAX 18:47 · JFK 21:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.