我有一个具有以下规格的容器:
containers:
- name: test-container
image: REDACTED
env:
- name: DISPLAY
value: ":10.0" <---------------------
- name: NODE_ENV
value: "production"
- name: ENDPOINT
value: REDACTED
ports:
- containerPort: 8080
volumeMounts:
- name: x11
mountPath: /tmp/.X11-unix
volumes:
- name: x11
hostPath:
path: /tmp/.X11-unix
sidenote:这样做是允许我在主机节点上渲染组件,但可以在容器内执行计算。
现在我已将DISPLAY硬编码为“:10.0”,但我想做类似的事情:
env:
- name: DISPLAY
value: ":$HOST_DISPLAY"
将挂载主机节点的DISPLAY变量(而不是硬编码和猜测变量的名称),以便如果节点设置为“:0”或任何其他变量,它将动态地将其转发/注入到容器中。 / p>
有什么方法可以做到这一点?如果有帮助,我可以使用ansible运算符
编辑以进一步说明:
想象一下,一个简单的http服务器的pod,当您用浏览器点击它时,将向您显示运行该节点的操作系统。假设该节点具有一个名为OPERATING_SYSTEM的环境变量。节点A具有OPERATING_SYSTEM = Windows节点B具有OPERATING_SYSTEM = Linux。我如何配置此窗格以显示节点的操作系统。 不是容器操作系统
另一个例子:
想象一下一个pod,它是一个简单的http服务器,当您用浏览器访问它时,它会返回运行节点的ID。假设节点1的环境变量名为NODE_ID = 123,节点2的环境变量名为NODE_ID = 456。当在这两个任意节点之一上调度任何Pod时,它可以访问这些NODE环境变量以正确显示其在哪个节点上运行
除了node.fields:https://v1-15.docs.kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/
之外,我几乎都想这样做。答案 0 :(得分:1)
传递环境变量的方法很少。
要将新的环境变量传递给容器,您需要使用ConfigMap
或Secret
。
不幸的是,由于Kubernetes concepts
,在纯Kubernetes中无法实现您想要的目标。根据{{3}}:
Pod封装了应用程序的容器(或者在某些情况下, 多个容器),存储资源,唯一的网络IP和 用于控制容器运行方式的选项。荚代表 部署单元:中的一个应用程序实例 Kubernetes,可能由单个容器或一个容器组成 少量紧密耦合且共享的容器 资源。
如果您愿意kubectl describe <pod-name>
,则只有主机名,因为这就是Kubernetes所需要的。 Kubernetes确保在整个节点上运行整个部署应用程序,而不用担心(您指定nodeSelector
的unitl)。 Kubernetes就是这样设计的。有关详细信息,您应该休息doc。
您可以添加一些tags
和ansible
,python
等来提问。也许您可以使用某些脚本/库,但是可以使用pure Kubernetes
来实现。
答案 1 :(得分:0)
您可以使用ConfigMap。在配置映射中创建key = value并在您的环境中引用
https://medium.com/google-cloud/kubernetes-configmaps-and-secrets-68d061f7ab5b