Kubernetes环境变量未在命令中正确使用

时间:2018-11-17 21:17:06

标签: kubernetes

我正在尝试在Kubernetes集群中引导etcd集群,这是pod定义的相关部分

  - name: etcd
    image: quay.io/coreos/etcd:v2.2.0
    ports:
    - containerPort: 2379
    - containerPort: 2380
    - containerPort: 4001
    env:
    - name: POD_IP
      valueFrom:
        fieldRef:
          fieldPath: status.podIP
    args:
    - "-name"
    - "etcd0"
    - "-advertise-client-urls"
    - http://${POD_IP}:2379,http://${POD_IP}:4001
    - "-initial-advertise-peer-urls"
    - "http://${POD_IP}:2380"
    - "-listen-peer-urls"
    - "http://0.0.0.0:2380"
    - "-initial-cluster"
    - 'etcd0=http://${POD_IP}:2380'
    - "-initial-cluster-state"
    - "new"

但是,当我应用POD_IP环境变量时,日志似乎证明了这一点:

 advertise URLs of "etcd0" do not match in --initial-advertise-peer-urls [http://$%7BPOD_IP%7D:2380] and --initial-cluster [http://$%7BPOD_IP%7D:2380]

有人看见过类似的东西吗?

2 个答案:

答案 0 :(得分:4)

shell不会解释参数,因此花括号无法使您获得想要的行为。如果要在arg中使用envvar值,则$(VAR_NAME)之类的变量引用将使用容器的环境进行扩展。

答案 1 :(得分:1)

初始化容器使用案例:

https://kubernetes.io/docs/concepts/workloads/pods/init-containers/

  

将值放入配置文件并运行模板工具以   为主应用容器动态生成配置文件。   例如,将POD_IP值放入配置中并生成   使用Jinja的主要应用配置文件