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

2024-01-02

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

  • envpod 定义中具有显式键/值的字段
  • envFrom using configMapRef and secretRef

当键名重复时,如下例所示,DUPLIK1 and DUPLIK2使用不同的值多次定义。

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

来自库伯内特斯docs https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#environment-variables:

envVar:要在容器中设置的环境变量列表。 无法更新。

envFrom:填充环境变量的源列表 容器。源中定义的键必须是 C_IDENTIFIER。 当容器被关闭时,所有无效的键都将被报告为一个事件。 开始。当一个键存在于多个源中时,关联的值 最后一个来源将优先。由 Env 定义的值 具有重复键的将优先。无法更新。

上面的链接清楚地说明了env将优先于envFrom并且无法更新。

此外,当多个资源中存在引用的键时,与最后一个源关联的值将覆盖所有先前的值。

根据上述内容,您看到的结果是预期的行为:

  1. DUPLIK1添加为env字段,因此无法更新
  2. DUPLIK2添加为envFrom因此,秘密中的那个优先,因为它是最后定义的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • Android相对布局alignCenter从另一个视图

    我有一个RelativeLayout有两个孩子 他们也是RelativeLayout包含一些按钮和东西 这些子布局不在我的主布局的中心 并且主布局确实包含这两个布局之外的一些其他内容 我希望第一个位于第二个之上 这很简单 只需使用andro
  • 将转义的 XML 实体转换回 UTF-8

    所以我在 XML 文件中得到了这个 UTF 8 字符串 Horrible place 当我将其提供给外部应用程序时 有趣的字符会转义为 XML 实体 Horrible place x2620 x2620 x2620 在 Ruby 中 如何将
  • 用于 JavaScript 逗号分隔数字验证的正则表达式

    我有一个文本框 它可以具有如下值1 or 1 2 or 1 225 345 21 即多个值 但现在我想验证这个输入 toString match 0 9 这是我正在使用的代码 它仅验证正确性 但是当用户输入如下值时会出现一个问题 input
  • 迭代 Queue 是否保证按队列顺序?

    这是否保证始终打印123 Queue
  • 我可以在没有 Visual Studio 的情况下下载 Visual C++ 命令行编译器吗?

    正如标题所示 我不想下载整个 Visual C 安装程序 只想下载 cl exe 以及在 Windows 上编译和链接 C 程序所需的其他程序 如前所述 没有办法做到这一点 您需要下载整个 4 6GB 捆绑包 MS 的部署是个糟糕的事情 然
  • lxml增量XML序列化重复命名空间

    我目前正在使用 lxml 在 Python 中序列化一些较大的 XML 文件 我想为此使用增量编写器 我的 XML 格式严重依赖命名空间和属性 当我运行以下代码时 from io import BytesIO from lxml impor
  • (Windows Git-bash) IntelliJ git bash shell 配色方案与 Docker 搞混了

    Windows Git bash 当我在 IntelliJ 项目中使用 git bash 作为终端时 当我登录到 docker 容器并使用时遇到问题ls 文本突出显示为浅蓝色 并且颜色不会消失 直到我退出 有想过如何纠正这个问题吗 我怀疑这
  • 如何避免 Apache Pulsar 中自动删除不活动主题

    我有一个应用程序 可以在特定主题下向 Pulsar 生成消息 并在完成后关闭该应用程序 同时 不存在任何消费者来阅读该主题 过了一段时间 当我创建一个消费者并想要读取写入的数据时 我发现所有数据都丢失了 因为我编写的主题被 Pulsar 删
  • 将土耳其字母替换为英文字母

    我想用英文字母替换句子中的每个土耳其语字母 我尝试以下功能 title result T rkiye nin en iyi oranlari ile Lider Bahis Sitesi turkish array turkish lett
  • 使 PHP 5.3 中的匿名函数与 PHP 5.2 一起使用

    我有一个匿名函数 现在需要更新它才能与 PHP 5 2 兼容 该函数 如下 接受文本并将每个句子的第一个字母大写 function clean text input output input output preg replace call
  • 本机离子网络状态不适用于我的代码

    我想在所有页面上没有连接和 或连接时显示警报消息 但它不起作用 显示网络类型有效 但没有显示任何警报消息 目标是当APP连接和断开时显示消息 我正在跟进https ionicframework com docs native network
  • d3.json 调用总是获取空数据

    如果我从浏览器向服务器发出此调用 http localhost 8080 api items number all json 或者来自卷曲 curl G http localhost 8080 api items number all js
  • 两条道路交叉口的地理编码

    有谁有一种方法 API 或格式可以输入到 google 地图 API 或任何其他 API 中 以便我可以可靠地获取交叉路口的纬度和经度 例如 如果我输入 13th and Walnut Philadelphia PA 或 13th st a
  • Msi 安装程序从命令提示符传递参数以设置服务登录

    安装程序构建工具 Microsoft Visual Studio 2010 项目安装程序 I am trying to pass username and password for the installer to use for runn
  • 如何在警报对话框中膨胀包含列表视图的布局?

    我在布局中使用带有自定义适配器的列表视图 现在我试图将包含列表的布局带到我的警报对话框中 我尝试使用此代码将不包含列表的简单布局引入警报对话框 并且效果良好 但我无法将包含布局的列表带入警报对话框 AlertDialog Builder d
  • 如何对 Delphi/C++Builder 中的设计时包进行故障排除?

    多年来 我在 Delphi C Builder 的每个版本中一直遇到 IDE 问题 我通常只是重新启动 重新编译等然后继续 然而 我不断看到其他人说 IDE 坚如磐石 我读到很多人说大多数 IDE 问题都是自定义组件问题造成的 我们有几个自
  • 如何使用html2canvas上传屏幕截图?

    Using html2canvas http html2canvas hertzen com 如何将屏幕截图保存到对象 我一直在探索演示 发现生成屏幕截图的函数生成如下 window ready function body html2can
  • C++ 函数不可用

    我有以下文件 cumsum bounded cpp include
  • 从 IP 范围到 CIDR 掩码的转换

    我一直在研究一种算法 用于将 IP 范围转换为 CIDR 表示法中的 IP 列表 此后将作为元组提及 现在 让我困惑的是弄清楚这种转换的最坏情况是什么 对于 IPv4 范围 我可以获得的最大元组数是多少 对于 IPv6 范围 我可以获得的最
  • pod 定义中的 env 变量名称重复,确定最终值的优先规则是什么?

    使用 Kubernetes 1 19 3 我使用 3 种不同的方式初始化环境变量值 envpod 定义中具有显式键 值的字段 envFrom using configMapRef and secretRef 当键名重复时 如下例所示 DUP