首页 > 解决方案 > 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: {}

标签: kubernetesopenshift

解决方案


看起来您正在使用第一个容器打包环境变量,然后在第二个容器中读取。如果是这种情况,您可以使用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 读取属性


推荐阅读