gpt4 book ai didi

kubernetes - pod定义中重复的env变量名称,确定最终值的优先规则是什么?

转载 作者:行者123 更新时间:2023-12-04 16:25:07 28 4
gpt4 key购买 nike

使用 Kubernetes 1.19.3,我使用 3 种不同的方式初始化 env 变量值:

  • env pod 定义中具有显式键/值的字段
  • envFrom使用 configMapRefsecretRef

  • 当键名重复时,如下例所示, DUPLIK1DUPLIK2用不同的值定义了多次。
    Kubernetes 用于将最终值分配给变量的优先规则是什么?
    # create some test Key/Value configs and Key/Value secrets
    kubectl create configmap myconfigmap --from-literal=DUPLIK1=myConfig1 --from-literal=CMKEY1=CMval1 --from-literal=DUPLIK2=FromConfigMap -n mydebugns

    kubectl create secret generic mysecret --from-literal=SECRETKEY1=SECval1 --from-literal=SECRETKEY2=SECval2 --from-literal=DUPLIK2=FromSecret -n mydebugns

    # create a test pod
    cat <<EOF | kubectl apply -n mydebugns -f -
    apiVersion: v1
    kind: Pod
    metadata:
    name: pod1
    spec:
    containers:
    - name: container1
    image: busybox
    command: [ "/bin/sh", "-c", "env" ]
    env:
    - name: DUPLIK1
    value: "Key/Value defined in field env"
    envFrom:
    - configMapRef:
    name: myconfigmap
    - secretRef:
    name: mysecret
    restartPolicy: Never
    EOF
    显示环境变量值。结果是确定性的。删除资源 + 重新创建总是以相同的结果结束。
    kubectl logs pod/pod1 -n mydebugns

    CMKEY1=CMval1
    DUPLIK1=Key/Value defined in field env
    DUPLIK2=FromSecret
    SECRETKEY1=SECval1
    SECRETKEY2=SECval2
    清理测试资源
    kubectl delete pod/pod1 -n mydebugns
    kubectl delete cm/myconfigmap -n mydebugns
    kubectl delete secret/mysecret -n mydebugns

    最佳答案

    来自 Kubernetes docs :

    envVar: List of environment variables to set in the container.Cannot be updated.


    envFrom: List of sources to populate environment variables in thecontainer. The keys defined within a source must be a C_IDENTIFIER.All invalid keys will be reported as an event when the container isstarting. When a key exists in multiple sources, the value associatedwith the last source will take precedence. Values defined by an Envwith a duplicate key will take precedence. Cannot be updated.


    上面的链接清楚地说明了 env将优先于 envFrom并且无法更新。
    此外,当多个资源中存在引用的键时,与最后一个源关联的值将覆盖所有先前的值。
    基于上述,您看到的结果是预期的行为:
  • DUPLIK1添加为 env字段,因此无法更新
  • DUPLIK2添加为 envFrom所以来自 secret 的那个优先,因为它是在最后
  • 定义的。

    关于kubernetes - pod定义中重复的env变量名称,确定最终值的优先规则是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66288565/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com