Kubernetes:如何从一个环境变量引用另一个环境变量?

6fe3ivhb  于 5个月前  发布在  Kubernetes
关注(0)|答案(4)|浏览(97)

我有一个Deployment对象,我使用Downward API暴露POD ID。这很好用。但是,我想设置另一个env变量,log path,引用POD ID。但是,将该变量值设置为/var/log/mycompany/${POD_ID}/logs不起作用,容器中没有创建日志。我可以让入口点脚本或应用程序知道POD ID,并建立日志路径,但我不想这么做

v2g6jxz6

v2g6jxz61#

正确的语法是使用$(FOO),如the documentation中所述;您使用的语法是“shell”语法,这不是kubernetes插值变量的方式。所以:

containers:
- env:
  - name: POD_ID
    valueFrom: # etc etc
  - name: LOG_PATH
    value: /var/log/mycompany/$(POD_ID)/logs

字符串
另外请注意,如图所示,要扩展的变量必须在引用它的变量之前定义。

gg58donl

gg58donl2#

我想补充一下这个问题,前几天我们遇到的一个警告。根据the documentation
变量引用$(VAR_NAME)使用容器中之前定义的环境变量和任何服务环境变量进行扩展。如果变量无法解析,则输入字符串中的引用将保持不变。
强调我的。如果你有

- name: POD_ID
    valueFrom: # etc etc
  - name: LOG_PATH
    value: /var/log/mycompany/$(POD_ID)/logs

字符串
它会工作,但如果你有

- name: LOG_PATH
    value: /var/log/mycompany/$(POD_ID)/logs
  - name: POD_ID
    valueFrom: # etc etc


如果你使用模板引擎来生成你的规格,要小心了。

mfuanj7w

mfuanj7w3#

下面是一个读取metadata.name的示例

- name: POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: LOG_FILE_NAME
            value: "/app/log/$(POD_NAME).log"

字符串
下面是另一个例子,它读取metadata.namespace

- name: POD_NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace
          - name: REACT_APP_DB_URI
            value: "http://api-$(POD_NAMESPACE).org.com"


另一个示例,演示如何从metadata.labels读取

- name: SRVC_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.labels['app']
          - name: LOG_FILE_NAME
            value: '/app/log/$(SRVC_NAME).log'


关键是因变量以后再定义
有关详细信息,请参阅this

yb3bgrhw

yb3bgrhw4#

你也可以先添加一个secret,然后在你无数的部署文件中使用新创建的secret来共享同一个环境变量的值:

kubectl create secret generic jwt-secret --from-literal=JWT_KEY=my_awesome_jwt_secret_code
spec:
      containers:
        - name: auth
          image: lord/auth
          env:
            - name: MONGO_URI
              value: "mongodb://auth-mongo-srv:27017/auth"
            - name: JWT_KEY
              valueFrom:
                secretKeyRef:
                  name: jwt-secret
                  key: JWT_KEY
process.env.MONGO_URI
 process.env.JWT_KEY

相关问题