对Kubernetes上的env变量的字符串操作

ab_*_*_sp 14 kubernetes

我有一个关于Kubernetes YAML字符串操作的问题.

我需要根据部署的容器的主机名设置一个env变量,并为这个变量附加一个端口号.

 env:
    - name: MY_POD_NAME
      valueFrom:
        fieldRef:
          fieldPath: metadata.name
Run Code Online (Sandbox Code Playgroud)

如何创建另一个使用MY_POD_NAME的env变量并使其看起来像这样:uri:// $ MY_POD_NAME:9099 /

这必须定义为env变量.Kubernetes YAML文件中是否允许字符串操作?

小智 30

你可以做点什么

- name: MY_POD_NAME
  valueFrom:
    fieldRef:
      fieldPath: metadata.name
- name: MY_POD_URI
  value: "uri://$(MY_POD_NAME):9099/"
Run Code Online (Sandbox Code Playgroud)

我们正在使用它,因为K8s 1.4

$()由k8s本身处理,不能在任何地方使用,但适用于env变量.

如果您的容器包含bash,您还可以利用bash变量扩展

"command": ["/bin/bash"],
"args": [ "-c",
         "MY_POD_URI_BASH=uri://${MY_POD_NAME}:9099/ originalEntryPoint.sh
       ],
Run Code Online (Sandbox Code Playgroud)

k8s没有触及$ {},但后来在bash的容器中进行了评估.如果有机会,请选择$()的第一个选项

  • 谢谢!请注意:订单在声明中很重要。在上面的示例中,如果稍后在env数组中定义了“ MY_POD_NAME”,则扩展将无法正常工作。 (2认同)

MrE*_*MrE 0

你不能直接这样做。

您应该使用您可以访问的 Pod ENV 变量来运行启动脚本,以设置您需要的任何其他变量,然后在启动脚本中启动您的服务。

  • 早在 2016 年,这是不可能的。现在您可以在 pod 定义中使用 env 变量。 (7认同)