kubernetes - Kubernetes/Openshift:如何使用 envFile 从文件系统文件中读取
问题描述
我已经将两个容器配置到一个 pod 中。
他们中的第一个致力于创建一个文件,例如:
SPRING_DATASOURCE_USERNAME: username
SPRING_DATASOURCE_PASSWORD: password
我希望第二个容器从该位置读取以初始化其环境变量。
我正在使用envFrom
,但我不太清楚如何使用它。
这是我的规格:
metadata:
annotations:
configmap.fabric8.io/update-on-change: ${project.artifactId}
labels:
name: wsec
name: wsec
spec:
replicas: 1
selector:
name: wsec
version: ${project.version}
provider: fabric8
template:
metadata:
labels:
name: wsec
version: ${project.version}
provider: fabric8
spec:
containers:
- name: sidekick
image: quay.io/ukhomeofficedigital/vault-sidekick:latest
args:
- -cn=secret:openshift/postgresql:env=USERNAME
env:
- name: VAULT_ADDR
value: "https://vault.vault-sidekick.svc:8200"
- name: VAULT_TOKEN
value: "34f8e679-3fbd-77b4-5de9-68b99217cc02"
volumeMounts:
- name: sidekick-backend-volume
mountPath: /etc/secrets
readOnly: false
- name: wsec
image: ${docker.image}
env:
- name: SPRING_APPLICATION_JSON
valueFrom:
configMapKeyRef:
name: wsec-configmap
key: SPRING_APPLICATION_JSON
envFrom:
???
volumes:
- name: sidekick-backend-volume
emptyDir: {}
解决方案
看起来您正在使用第一个容器打包环境变量,然后在第二个容器中读取。如果是这种情况,您可以使用initContainers。
创建一个映射到 emptyDir 的卷。将其安装在 initContainer(propertiesContainer) 和主容器(springBootAppContainer) 上作为 volumeMount。这个目录现在对两个容器都是可见的。
image: properties/container/path
command: [bash, -c]
args: ["cp -r /location/in/properties/container /propsdir"]
volumeMounts:
- name: propsDir
mountPath: /propsdir
这会将属性放在 /propsdir 中。当主容器启动时,它可以从 /propsdir 读取属性
推荐阅读
- javascript - 在 REACT 中的两个函数之间传递信息
- php - 使用 PHP HTTP_USER_AGENT 在 Chrome/Opera 中查找用户操作系统类型
- javascript - 提示“您已成功注册!”后似乎无法重定向到另一个网址。
- angular - Angular(不是AngularJs)中angular-tiny-calendar包的用途是什么?
- haskell - 有没有办法在 Haskell 中对长度进行模式匹配?
- linux - 无法编译 android 内核:在 built-in.o 中停止
- variables - jq 的变量绑定是否通过函数起作用?
- templates - 使用 VueJs 计算“脱离 DOM”的模板绑定
- java - 如何仅从具有重复项的列表中删除一项?
- keyerror - Python KeyError:我想不通(python 新手)