kubernetes 如何将容器参数复制到pod模板文件的环境变量中?

dgsult0t  于 2023-04-20  发布在  Kubernetes
关注(0)|答案(1)|浏览(92)

我试图将pod定义中的第一个容器参数复制到环境变量中。这是我的pod模板文件。

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: test
    image: nginx
    command: [ "/bin/bash", "-c", "--" ]
    args: ["sleep 30"]
    env:
      - name: "TEST_ENV"
        valueFrom:
          fieldRef:
            fieldPath: spec.containers[0].args[0]
  restartPolicy: Never

但是在执行kubectl apply时,我得到以下错误。
The Pod "myapp-pod" is invalid: spec.containers[0].env[0].valueFrom.fieldRef.fieldPath: Invalid value: "spec.containers[0].args[0]": error converting fieldPath: field label not supported: spec.containers[0].args[0]
引用这个论点的正确方法是什么?

8yparm6h

8yparm6h1#

使用fieldRef时,只有有限数量的字段可用。
来自文档:
只有部分Kubernetes API字段可通过向下API使用。本节列出了您可以使用的字段。

通过fieldRef获取信息

  • metadata.name
  • metadata.namespace
  • metadata.uid
  • metadata.annotations['<KEY>']
  • metadata.labels['<KEY>']

以下信息可通过环境变量获得,但不能作为downwardAPI卷fieldRef获得:

  • spec.serviceAccountName
  • spec.nodeName
  • status.hostIP
  • status.podIP

以下信息可通过downwardAPI volume fieldRef获得,但不能作为环境变量:

  • metadata.labels
  • metadata.annotations

在任何情况下,由于容器参数可用于在容器内运行的任何服务,因此您应该能够从代码参数array/list/argv/etc中检索它们。

相关问题